Commit 958d7a80 authored by Lev Walkin's avatar Lev Walkin

BOOLEAN and NULL have changed their types

parent 7f7d46ac
......@@ -30,16 +30,16 @@ asn1_TYPE_descriptor_t asn1_DEF_BOOLEAN = {
*/
ber_dec_rval_t
BOOLEAN_decode_ber(asn1_TYPE_descriptor_t *td,
void **bool_structure, void *buf_ptr, size_t size,
void **bool_value, void *buf_ptr, size_t size,
int tag_mode) {
BOOLEAN_t *st = (BOOLEAN_t *)*bool_structure;
BOOLEAN_t *st = (BOOLEAN_t *)*bool_value;
ber_dec_rval_t rval;
ber_dec_ctx_t ctx = { 0, 0, 0, 0 };
ber_tlv_len_t length;
ber_tlv_len_t lidx;
if(st == NULL) {
(void *)st = *bool_structure = CALLOC(1, sizeof(*st));
(void *)st = *bool_value = CALLOC(1, sizeof(*st));
if(st == NULL) {
rval.code = RC_FAIL;
rval.consumed = 0;
......@@ -71,22 +71,22 @@ BOOLEAN_decode_ber(asn1_TYPE_descriptor_t *td,
/*
* Compute boolean value.
*/
for(st->value = 0, lidx = 0;
(lidx < length) && st->value == 0; lidx++) {
for(*st = 0, lidx = 0;
(lidx < length) && *st == 0; lidx++) {
/*
* Very simple approach: read bytes until the end or
* value is already TRUE.
* BOOLEAN is not supposed to contain meaningful data anyway.
*/
st->value |= ((uint8_t *)buf_ptr)[lidx];
*st |= ((uint8_t *)buf_ptr)[lidx];
}
rval.code = RC_OK;
rval.consumed += length;
ASN_DEBUG("Took %ld/%ld bytes to encode %s, value=%ld",
ASN_DEBUG("Took %ld/%ld bytes to encode %s, value=%d",
(long)rval.consumed, (long)length,
td->name, (long)st->value);
td->name, *st);
return rval;
}
......@@ -109,7 +109,7 @@ BOOLEAN_encode_der(asn1_TYPE_descriptor_t *td, void *sptr,
uint8_t bool_value;
ssize_t ret;
bool_value = st->value?0xff:0; /* 0xff mandated by DER */
bool_value = *st?0xff:0; /* 0xff mandated by DER */
ret = cb(&bool_value, 1, app_key);
if(ret == -1) {
erval.encoded = -1;
......@@ -133,7 +133,7 @@ BOOLEAN_print(asn1_TYPE_descriptor_t *td, const void *sptr, int ilevel,
(void)ilevel; /* Unused argument */
if(st) {
if(st->value)
if(*st)
return cb("TRUE", 4, app_key);
else
return cb("FALSE", 5, app_key);
......
......@@ -7,9 +7,12 @@
#include <constr_TYPE.h>
typedef struct BOOLEAN {
int value;
} BOOLEAN_t;
/*
* The underlying integer may contain various values, but everything
* non-zero is capped to 0xff by the DER encoder. The BER decoder may
* yield non-zero values different from 1, beware.
*/
typedef int BOOLEAN_t;
extern asn1_TYPE_descriptor_t asn1_DEF_BOOLEAN;
......
......@@ -2,18 +2,20 @@
* Copyright (c) 2003 Lev Walkin <vlm@lionet.info>. All rights reserved.
* Redistribution and modifications are permitted subject to BSD license.
*/
#ifndef _NULL_H_
#define _NULL_H_
#ifndef ASN_TYPE_NULL_H
#define ASN_TYPE_NULL_H
#include <constr_TYPE.h>
typedef struct NULL_s {
int value;
} NULL_t;
/*
* The value of the NULL type is meaningless: see BOOLEAN if you want to
* carry true/false semantics.
*/
typedef int NULL_t;
extern asn1_TYPE_descriptor_t asn1_DEF_NULL;
der_type_encoder_f NULL_encode_der;
asn_struct_print_f NULL_print;
#endif /* _NULL_H_ */
#endif /* NULL_H */
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment