clean-up; removed unnecessary field from type descriptor
git-svn-id: https://asn1c.svn.sourceforge.net/svnroot/asn1c/trunk@400 59561ff5-6e30-0410-9f3c-9617f08c8826
diff --git a/skeletons/OBJECT_IDENTIFIER.c b/skeletons/OBJECT_IDENTIFIER.c
index 43ced79..9e8f2e2 100644
--- a/skeletons/OBJECT_IDENTIFIER.c
+++ b/skeletons/OBJECT_IDENTIFIER.c
@@ -16,11 +16,11 @@
};
asn1_TYPE_descriptor_t asn1_DEF_OBJECT_IDENTIFIER = {
"OBJECT IDENTIFIER",
- INTEGER_free,
+ ASN__PRIMITIVE_TYPE_free,
OBJECT_IDENTIFIER_print,
OBJECT_IDENTIFIER_constraint,
- INTEGER_decode_ber, /* Implemented in terms of INTEGER type */
- OBJECT_IDENTIFIER_encode_der,
+ ber_decode_primitive,
+ der_encode_primitive,
0, /* Not implemented yet */
OBJECT_IDENTIFIER_encode_xer,
0, /* Use generic outmost tag fetcher */
@@ -30,52 +30,11 @@
asn1_DEF_OBJECT_IDENTIFIER_tags, /* Same as above */
sizeof(asn1_DEF_OBJECT_IDENTIFIER_tags)
/ sizeof(asn1_DEF_OBJECT_IDENTIFIER_tags[0]),
- 0, /* Always in primitive form */
0, 0, /* No members */
0 /* No specifics */
};
-/*
- * Encode OBJECT IDENTIFIER type using DER.
- */
-asn_enc_rval_t
-OBJECT_IDENTIFIER_encode_der(asn1_TYPE_descriptor_t *sd, void *ptr,
- int tag_mode, ber_tlv_tag_t tag,
- asn_app_consume_bytes_f *cb, void *app_key) {
- asn_enc_rval_t erval;
- OBJECT_IDENTIFIER_t *st = (OBJECT_IDENTIFIER_t *)ptr;
-
- ASN_DEBUG("%s %s as OBJECT IDENTIFIER (tm=%d)",
- cb?"Encoding":"Estimating", sd->name, tag_mode);
-
- erval.encoded = der_write_tags(sd, st->size, tag_mode, tag,
- cb, app_key);
- ASN_DEBUG("OBJECT IDENTIFIER %s wrote tags %d",
- sd->name, (int)erval.encoded);
- if(erval.encoded == -1) {
- erval.failed_type = sd;
- erval.structure_ptr = ptr;
- return erval;
- }
-
- if(cb && st->buf) {
- int ret = cb(st->buf, st->size, app_key);
- if(ret < 0) {
- erval.encoded = -1;
- erval.failed_type = sd;
- erval.structure_ptr = ptr;
- return erval;
- }
- } else {
- assert(st->buf || st->size == 0);
- }
-
- erval.encoded += st->size;
-
- return erval;
-}
-
int
OBJECT_IDENTIFIER_constraint(asn1_TYPE_descriptor_t *td, const void *sptr,
asn_app_consume_bytes_f *app_errlog, void *app_key) {
@@ -101,11 +60,12 @@
int
-OBJECT_IDENTIFIER_get_single_arc(uint8_t *arcbuf, unsigned int arclen, signed int add, void *rvbuf, unsigned int rvsize) {
+OBJECT_IDENTIFIER_get_single_arc(uint8_t *arcbuf, unsigned int arclen, signed int add, void *rvbufp, unsigned int rvsize) {
unsigned LE __attribute__ ((unused)) = 1; /* Little endian (x86) */
uint8_t *arcend = arcbuf + arclen; /* End of arc */
- void *rvstart = rvbuf; /* Original start of the value buffer */
unsigned int cache = 0; /* No more than 14 significant bits */
+ unsigned char *rvbuf = (unsigned char *)rvbufp;
+ unsigned char *rvstart = rvbuf; /* Original start of the value buffer */
int inc; /* Return value growth direction */
rvsize *= CHAR_BIT; /* bytes to bits */
@@ -155,15 +115,15 @@
errno = ERANGE; /* Overflow */
return -1;
}
- *(unsigned long *)rvbuf = accum + add;
+ *(unsigned long *)rvbuf = accum + add; /* alignment OK! */
return 0;
}
#ifndef WORDS_BIGENDIAN
if(*(unsigned char *)&LE) { /* Little endian (x86) */
/* "Convert" to big endian */
- (unsigned char *)rvbuf += rvsize / CHAR_BIT - 1;
- ((unsigned char *)rvstart)--;
+ rvbuf += rvsize / CHAR_BIT - 1;
+ rvstart--;
inc = -1; /* Descending */
} else
#endif /* !WORDS_BIGENDIAN */
@@ -175,8 +135,8 @@
/* Clear the high unused bits */
for(bits = rvsize - arclen;
bits > CHAR_BIT;
- (unsigned char *)rvbuf += inc, bits -= CHAR_BIT)
- *(unsigned char *)rvbuf = 0;
+ rvbuf += inc, bits -= CHAR_BIT)
+ *rvbuf = 0;
/* Fill the body of a value */
for(; arcbuf < arcend; arcbuf++) {
@@ -184,25 +144,24 @@
bits += 7;
if(bits >= CHAR_BIT) {
bits -= CHAR_BIT;
- *(unsigned char *)rvbuf = (cache >> bits);
- (unsigned char *)rvbuf += inc;
+ *rvbuf = (cache >> bits);
+ rvbuf += inc;
}
}
if(bits) {
- *(unsigned char *)rvbuf = cache;
- (unsigned char *)rvbuf += inc;
+ *rvbuf = cache;
+ rvbuf += inc;
}
}
if(add) {
- for((unsigned char *)rvbuf -= inc; rvbuf != rvstart; (unsigned char *)rvbuf -= inc) {
- int v = add + *(unsigned char *)rvbuf;
+ for(rvbuf -= inc; rvbuf != rvstart; rvbuf -= inc) {
+ int v = add + *rvbuf;
if(v & (-1 << CHAR_BIT)) {
- *(unsigned char *)rvbuf
- = (unsigned char)(v + (1 << CHAR_BIT));
+ *rvbuf = (unsigned char)(v + (1 << CHAR_BIT));
add = -1;
} else {
- *(unsigned char *)rvbuf = v;
+ *rvbuf = v;
break;
}
}
@@ -331,16 +290,16 @@
(void)ilevel; /* Unused argument */
if(!st || !st->buf)
- return cb("<absent>", 8, app_key);
+ return (cb("<absent>", 8, app_key) < 0) ? -1 : 0;
/* Dump preamble */
- if(cb("{ ", 2, app_key))
+ if(cb("{ ", 2, app_key) < 0)
return -1;
if(OBJECT_IDENTIFIER__dump_body(st, cb, app_key) < 0)
return -1;
- return cb(" }", 2, app_key);
+ return (cb(" }", 2, app_key) < 0) ? -1 : 0;
}
int