diff --git a/skeletons/BOOLEAN.c b/skeletons/BOOLEAN.c index eb89c9c26bf87a265dcdb129b4917a8f9e8291e6..4f9b32444a10ebd17c512276b36f9ad75fffc6ff 100644 --- a/skeletons/BOOLEAN.c +++ b/skeletons/BOOLEAN.c @@ -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); diff --git a/skeletons/BOOLEAN.h b/skeletons/BOOLEAN.h index 234e9f8e750daf6142712a44b211c6f4fe5cbf94..6ad69a451b4f5c40bfe54dab8256d3c0a5b4dde2 100644 --- a/skeletons/BOOLEAN.h +++ b/skeletons/BOOLEAN.h @@ -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; diff --git a/skeletons/NULL.h b/skeletons/NULL.h index 14f5ffab73188a34e109e6d84a6e15b36a2ec422..003a5a63dbd71ffb3706405ba4cf07a7fdc15c5a 100644 --- a/skeletons/NULL.h +++ b/skeletons/NULL.h @@ -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 */