memory layout

git-svn-id: https://asn1c.svn.sourceforge.net/svnroot/asn1c/trunk@1180 59561ff5-6e30-0410-9f3c-9617f08c8826
This commit is contained in:
vlm 2006-09-13 02:59:46 +00:00
parent ea226770fc
commit d37b468be4
2 changed files with 16 additions and 17 deletions

View File

@ -136,7 +136,7 @@ process(const char *fname) {
if((collector_size - collector_offset) <= len
|| !collector) {
collector_size <<= 1;
collector = realloc(collector, collector_size);
collector = REALLOC(collector, collector_size);
if(!collector) {
perror("realloc()");
exit(EX_OSERR);

View File

@ -49,7 +49,7 @@ static int single_type_decoding = 0; /* -1 enables that */
static int minimalistic = 0; /* -m enables that */
static int pretty_printing = 1; /* -p disables that */
static int skip_bytes = 0; /* -s controls that */
static char *indent_buffer = " "; /* -i controls that */
static char indent_bytes[16] = " "; /* -i controls that */
int
main(int ac, char **av) {
@ -66,10 +66,9 @@ main(int ac, char **av) {
break;
case 'i':
i = atoi(optarg);
if(i >= 0 && i < 16) {
indent_buffer = alloca(i + 1);
memset(indent_buffer, ' ', i);
indent_buffer[i] = '\0';
if(i >= 0 && i < (int)sizeof(indent_bytes)) {
memset(indent_bytes, ' ', i);
indent_bytes[i] = '\0';
} else {
fprintf(stderr, "-i %s: Invalid indent value\n",optarg);
exit(EX_USAGE);
@ -393,7 +392,7 @@ print_TL(int fin, asn1c_integer_t offset, int level, int constr, ssize_t tlen, b
return;
}
while(level-- > 0) printf(indent_buffer); /* Print indent */
while(level-- > 0) printf(indent_bytes); /* Print indent */
printf(fin ? "</" : "<");
printf(constr ? ((tlv_len == -1) ? "I" : "C") : "P");
@ -473,9 +472,9 @@ print_V(const char *fname, FILE *fp, ber_tlv_tag_t tlv_tag, ber_tlv_len_t tlv_le
case ASN_BASIC_OBJECT_IDENTIFIER:
case ASN_BASIC_RELATIVE_OID:
if(tlv_len > 0 && tlv_len < 128*1024 /* VERY long OID! */) {
arcs = malloc(sizeof(*arcs) * (tlv_len + 1));
arcs = MALLOC(sizeof(*arcs) * (tlv_len + 1));
if(arcs) {
vbuf = malloc(tlv_len + 1);
vbuf = MALLOC(tlv_len + 1);
/* Not checking is intentional */
}
}
@ -504,7 +503,7 @@ print_V(const char *fname, FILE *fp, ber_tlv_tag_t tlv_tag, ber_tlv_len_t tlv_le
(BER_TAG_CLASS(tlv_tag) != ASN_TAG_CLASS_UNIVERSAL
&& pretty_printing)
) && (tlv_len > 0 && tlv_len < 128 * 1024)) {
vbuf = malloc(tlv_len + 1);
vbuf = MALLOC(tlv_len + 1);
/* Not checking is intentional */
}
break;
@ -522,8 +521,8 @@ print_V(const char *fname, FILE *fp, ber_tlv_tag_t tlv_tag, ber_tlv_len_t tlv_le
if(ch == -1) {
fprintf(stderr,
"%s: Unexpected end of file (V)\n", fname);
if(vbuf) free(vbuf);
if(arcs) free(arcs);
if(vbuf) FREEMEM(vbuf);
if(arcs) FREEMEM(arcs);
return -1;
}
switch(etype) {
@ -592,7 +591,7 @@ print_V(const char *fname, FILE *fp, ber_tlv_tag_t tlv_tag, ber_tlv_len_t tlv_le
if(i) printf(".");
printf("%" PRIuASN, arcs[i]);
}
free(vbuf);
FREEMEM(vbuf);
vbuf = 0;
}
}
@ -614,7 +613,7 @@ print_V(const char *fname, FILE *fp, ber_tlv_tag_t tlv_tag, ber_tlv_len_t tlv_le
if(i) printf(".");
printf("%" PRIuASN, arcs[i]);
}
free(vbuf);
FREEMEM(vbuf);
vbuf = 0;
}
}
@ -657,10 +656,10 @@ print_V(const char *fname, FILE *fp, ber_tlv_tag_t tlv_tag, ber_tlv_len_t tlv_le
else
printf("%c", vbuf[i]);
}
free(vbuf);
FREEMEM(vbuf);
}
if(arcs) free(arcs);
if(arcs) FREEMEM(arcs);
return 0;
}
@ -676,7 +675,7 @@ decode_tlv_from_string(const char *datastring) {
int half;
dsize = strlen(datastring) + 1;
dp = data = calloc(1, dsize);
dp = data = CALLOC(1, dsize);
assert(data);
for(half = 0, p = datastring; *p; p++) {