Commit 419f6757 authored by Lev Walkin's avatar Lev Walkin

clarity

parent 9db7ce8b
...@@ -118,7 +118,7 @@ static long GMTOFF(struct tm a){ ...@@ -118,7 +118,7 @@ static long GMTOFF(struct tm a){
setenv("TZ", tzold, 1); \ setenv("TZ", tzold, 1); \
*tzoldbuf = 0; \ *tzoldbuf = 0; \
if(tzold != tzoldbuf) \ if(tzold != tzoldbuf) \
free(tzold); \ FREEMEM(tzold); \
} else { \ } else { \
unsetenv("TZ"); \ unsetenv("TZ"); \
} \ } \
...@@ -671,7 +671,7 @@ asn_time2GT_frac(GeneralizedTime_t *opt_gt, const struct tm *tm, int frac_value, ...@@ -671,7 +671,7 @@ asn_time2GT_frac(GeneralizedTime_t *opt_gt, const struct tm *tm, int frac_value,
FREEMEM(opt_gt->buf); FREEMEM(opt_gt->buf);
} else { } else {
opt_gt = (GeneralizedTime_t *)CALLOC(1, sizeof *opt_gt); opt_gt = (GeneralizedTime_t *)CALLOC(1, sizeof *opt_gt);
if(!opt_gt) { free(buf); return 0; } if(!opt_gt) { FREEMEM(buf); return 0; }
} }
opt_gt->buf = (unsigned char *)buf; opt_gt->buf = (unsigned char *)buf;
......
...@@ -1537,7 +1537,7 @@ OCTET_STRING_new_fromBuf(asn_TYPE_descriptor_t *td, const char *str, int len) { ...@@ -1537,7 +1537,7 @@ OCTET_STRING_new_fromBuf(asn_TYPE_descriptor_t *td, const char *str, int len) {
st = (OCTET_STRING_t *)CALLOC(1, specs->struct_size); st = (OCTET_STRING_t *)CALLOC(1, specs->struct_size);
if(st && str && OCTET_STRING_fromBuf(st, str, len)) { if(st && str && OCTET_STRING_fromBuf(st, str, len)) {
free(st); FREEMEM(st);
st = NULL; st = NULL;
} }
......
...@@ -119,7 +119,7 @@ REAL__dump(double d, int canonical, asn_app_consume_bytes_f *cb, void *app_key) ...@@ -119,7 +119,7 @@ REAL__dump(double d, int canonical, asn_app_consume_bytes_f *cb, void *app_key)
buflen = ret; buflen = ret;
break; break;
} }
if(buf != local_buf) free(buf); if(buf != local_buf) FREEMEM(buf);
buf = (char *)MALLOC(buflen); buf = (char *)MALLOC(buflen);
if(!buf) return -1; if(!buf) return -1;
} while(1); } while(1);
...@@ -219,7 +219,7 @@ REAL__dump(double d, int canonical, asn_app_consume_bytes_f *cb, void *app_key) ...@@ -219,7 +219,7 @@ REAL__dump(double d, int canonical, asn_app_consume_bytes_f *cb, void *app_key)
} }
ret = cb(buf, buflen, app_key); ret = cb(buf, buflen, app_key);
if(buf != local_buf) free(buf); if(buf != local_buf) FREEMEM(buf);
return (ret < 0) ? -1 : buflen; return (ret < 0) ? -1 : buflen;
} }
...@@ -322,7 +322,7 @@ REAL__xer_body_decode(asn_TYPE_descriptor_t *td, void *sptr, const void *chunk_b ...@@ -322,7 +322,7 @@ REAL__xer_body_decode(asn_TYPE_descriptor_t *td, void *sptr, const void *chunk_b
b[chunk_size] = 0; /* nul-terminate */ b[chunk_size] = 0; /* nul-terminate */
value = strtod(b, &endptr); value = strtod(b, &endptr);
free(b); FREEMEM(b);
if(endptr == b) return XPBD_BROKEN_ENCODING; if(endptr == b) return XPBD_BROKEN_ENCODING;
if(asn_double2REAL(st, value)) if(asn_double2REAL(st, value))
......
...@@ -77,7 +77,7 @@ asn_set_empty(void *asn_set_of_x) { ...@@ -77,7 +77,7 @@ asn_set_empty(void *asn_set_of_x) {
while(as->count--) while(as->count--)
as->free(as->array[as->count]); as->free(as->array[as->count]);
} }
free(as->array); FREEMEM(as->array);
as->array = 0; as->array = 0;
} }
as->count = 0; as->count = 0;
......
...@@ -747,7 +747,7 @@ cleanup: ...@@ -747,7 +747,7 @@ cleanup:
if(encs[encs_count].buffer) if(encs[encs_count].buffer)
FREEMEM(encs[encs_count].buffer); FREEMEM(encs[encs_count].buffer);
} }
free(encs); FREEMEM(encs);
} }
_ASN_ENCODED_OK(er); _ASN_ENCODED_OK(er);
} }
......
...@@ -271,57 +271,58 @@ main(int ac, char **av) { ...@@ -271,57 +271,58 @@ main(int ac, char **av) {
return 0; return 0;
} }
/* Dump the buffer */ static struct dynamic_buffer {
static int write_out(const void *buffer, size_t size, void *key) { char *data; /* Pointer to the data bytes */
FILE *fp = (FILE *)key; size_t offset; /* Offset from the start */
return (fwrite(buffer, 1, size, fp) == size) ? 0 : -1; size_t length; /* Length of meaningful contents */
} size_t allocated; /* Allocated memory for data */
int nreallocs; /* Number of data reallocations */
static char *buffer; off_t bytes_shifted; /* Number of bytes ever shifted */
static size_t buf_len; /* Length of meaningful contents */ } DynamicBuffer;
static size_t buf_size; /* Allocated memory */
static size_t buf_offset; /* Offset from the start */
static off_t buf_shifted; /* Number of bytes ever shifted */
static int buf_nreallocs; /* Number of reallocations */
#define bufptr (buffer + buf_offset)
#define bufend (buffer + buf_offset + buf_len)
/* /*
* Ensure that the buffer contains at least this amount of free space. * Ensure that the buffer contains at least this amount of free space.
*/ */
static void buf_extend(const void *data2add, size_t bySize) { static void add_bytes_to_buffer(const void *data2add, size_t bySize) {
DEBUG("buf_extend(%ld) { o=%ld l=%ld s=%ld }", DEBUG("add_bytes(%ld) { o=%ld l=%ld s=%ld }",
(long)bySize, (long)buf_offset, (long)buf_len, (long)buf_size); (long)bySize,
(long)DynamicBuffer.offset,
(long)DynamicBuffer.length,
(long)DynamicBuffer.allocated);
if(buf_size >= (buf_offset + buf_len + bySize)) { if(DynamicBuffer.allocated
/* Nothing to do */ >= (DynamicBuffer.offset + DynamicBuffer.length + bySize)) {
} else if(bySize <= buf_offset) { /* No buffer reallocation is necessary */
DEBUG("\tContents shifted by %ld", (long)buf_offset); } else if(bySize <= DynamicBuffer.offset) {
DEBUG("\tContents shifted by %ld", DynamicBuffer.offset);
/* Shift the buffer contents */ /* Shift the buffer contents */
memmove(buffer, buffer + buf_offset, buf_len); memmove(DynamicBuffer.data,
buf_shifted += buf_offset; DynamicBuffer.data + DynamicBuffer.offset,
buf_offset = 0; DynamicBuffer.length);
DynamicBuffer.bytes_shifted += DynamicBuffer.offset;
DynamicBuffer.offset = 0;
} else { } else {
size_t newsize = (buf_size << 2) + bySize; size_t newsize = (DynamicBuffer.allocated << 2) + bySize;
void *p = malloc(newsize); void *p = MALLOC(newsize);
if(!p) { if(!p) {
perror("realloc()"); perror("malloc()");
exit(EX_OSERR); exit(EX_OSERR);
} }
memcpy(p, buffer, buf_len); memcpy(p, DynamicBuffer.data, DynamicBuffer.length);
free(buffer); FREEMEM(DynamicBuffer.data);
buffer = (char *)p; DynamicBuffer.data = (char *)p;
buf_size = newsize; DynamicBuffer.offset = 0;
buf_offset = 0; DynamicBuffer.allocated = newsize;
DynamicBuffer.nreallocs++;
DEBUG("\tBuffer reallocated to %ld, %d time", DEBUG("\tBuffer reallocated to %ld, %d time",
(long)newsize, ++buf_nreallocs); newsize, DynamicBuffer.nreallocs);
} }
memcpy(buffer + buf_offset + buf_len, data2add, bySize); memcpy(DynamicBuffer.data + DynamicBuffer.offset + DynamicBuffer.length,
buf_len += bySize; data2add, bySize);
DynamicBuffer.length += bySize;
} }
static void *data_decode_from_file(asn_TYPE_descriptor_t *pduType, const char *fname, ssize_t suggested_bufsize) { static void *data_decode_from_file(asn_TYPE_descriptor_t *pduType, const char *fname, ssize_t suggested_bufsize) {
...@@ -355,7 +356,7 @@ static void *data_decode_from_file(asn_TYPE_descriptor_t *pduType, const char *f ...@@ -355,7 +356,7 @@ static void *data_decode_from_file(asn_TYPE_descriptor_t *pduType, const char *f
/* prepare the file buffer */ /* prepare the file buffer */
if(fbuf_size != suggested_bufsize) { if(fbuf_size != suggested_bufsize) {
fbuf = (char *)realloc(fbuf, suggested_bufsize); fbuf = (char *)REALLOC(fbuf, suggested_bufsize);
if(!fbuf) { if(!fbuf) {
perror("realloc()"); perror("realloc()");
exit(EX_OSERR); exit(EX_OSERR);
...@@ -363,11 +364,11 @@ static void *data_decode_from_file(asn_TYPE_descriptor_t *pduType, const char *f ...@@ -363,11 +364,11 @@ static void *data_decode_from_file(asn_TYPE_descriptor_t *pduType, const char *f
fbuf_size = suggested_bufsize; fbuf_size = suggested_bufsize;
} }
buf_nreallocs = 0; DynamicBuffer.offset = 0;
buf_shifted = 0; DynamicBuffer.length = 0;
buf_offset = 0; DynamicBuffer.allocated = 0;
buf_size = 0; DynamicBuffer.bytes_shifted = 0;
buf_len = 0; DynamicBuffer.nreallocs = 0;
/* Pretend immediate EOF */ /* Pretend immediate EOF */
rval.code = RC_WMORE; rval.code = RC_WMORE;
...@@ -380,11 +381,11 @@ static void *data_decode_from_file(asn_TYPE_descriptor_t *pduType, const char *f ...@@ -380,11 +381,11 @@ static void *data_decode_from_file(asn_TYPE_descriptor_t *pduType, const char *f
/* /*
* Copy the data over, or use the original buffer. * Copy the data over, or use the original buffer.
*/ */
if(buf_size) { if(DynamicBuffer.allocated) {
/* Append the new data into the intermediate buffer */ /* Append the new data into the intermediate buffer */
buf_extend(fbuf, rd); add_bytes_to_buffer(fbuf, rd);
i_bptr = bufptr; i_bptr = DynamicBuffer.data + DynamicBuffer.offset;
i_size = buf_len; i_size = DynamicBuffer.allocated;
} else { } else {
i_bptr = fbuf; i_bptr = fbuf;
i_size = rd; i_size = rd;
...@@ -405,15 +406,16 @@ static void *data_decode_from_file(asn_TYPE_descriptor_t *pduType, const char *f ...@@ -405,15 +406,16 @@ static void *data_decode_from_file(asn_TYPE_descriptor_t *pduType, const char *f
break; break;
} }
DEBUG("decode(%ld) consumed %ld (%ld), code %d", DEBUG("decode(%ld) consumed %ld (%ld), code %d",
(long)buf_len, (long)rval.consumed, (long)i_size, (long)DynamicBuffer.length,
(long)rval.consumed, (long)i_size,
rval.code); rval.code);
if(buf_size == 0) { if(DynamicBuffer.allocated == 0) {
/* /*
* Switch the remainder into the intermediate buffer. * Flush the remainder into the intermediate buffer.
*/ */
if(rval.code != RC_FAIL && rval.consumed < rd) { if(rval.code != RC_FAIL && rval.consumed < rd) {
buf_extend(fbuf + rval.consumed, add_bytes_to_buffer(fbuf + rval.consumed,
rd - rval.consumed); rd - rval.consumed);
rval.consumed = 0; rval.consumed = 0;
} }
...@@ -427,13 +429,17 @@ static void *data_decode_from_file(asn_TYPE_descriptor_t *pduType, const char *f ...@@ -427,13 +429,17 @@ static void *data_decode_from_file(asn_TYPE_descriptor_t *pduType, const char *f
return structure; return structure;
case RC_WMORE: case RC_WMORE:
DEBUG("RC_WMORE, continuing %ld with %ld..%ld..%ld", DEBUG("RC_WMORE, continuing %ld with %ld..%ld..%ld",
(long)rval.consumed, (long)buf_offset, (long)rval.consumed,
(long)buf_len, (long)buf_size); (long)DynamicBuffer.offset,
(long)DynamicBuffer.length,
(long)DynamicBuffer.allocated);
/* /*
* Adjust position inside the source buffer. * Adjust position inside the source buffer.
*/ */
buf_offset += rval.consumed; if(DynamicBuffer.allocated) {
buf_len -= rval.consumed; DynamicBuffer.offset += rval.consumed;
DynamicBuffer.length -= rval.consumed;
}
rval.consumed = 0; rval.consumed = 0;
continue; continue;
case RC_FAIL: case RC_FAIL:
...@@ -449,7 +455,8 @@ static void *data_decode_from_file(asn_TYPE_descriptor_t *pduType, const char *f ...@@ -449,7 +455,8 @@ static void *data_decode_from_file(asn_TYPE_descriptor_t *pduType, const char *f
fprintf(stderr, "%s: " fprintf(stderr, "%s: "
"Decode failed past byte %ld: %s\n", "Decode failed past byte %ld: %s\n",
fname, (long)(buf_shifted + buf_offset + rval.consumed), fname, (long)(DynamicBuffer.bytes_shifted
+ DynamicBuffer.offset + rval.consumed),
(rval.code == RC_WMORE) (rval.code == RC_WMORE)
? "Unexpected end of input" ? "Unexpected end of input"
: "Input processing error"); : "Input processing error");
...@@ -457,3 +464,8 @@ static void *data_decode_from_file(asn_TYPE_descriptor_t *pduType, const char *f ...@@ -457,3 +464,8 @@ static void *data_decode_from_file(asn_TYPE_descriptor_t *pduType, const char *f
return 0; return 0;
} }
/* Dump the buffer out to the specified FILE */
static int write_out(const void *buffer, size_t size, void *key) {
FILE *fp = (FILE *)key;
return (fwrite(buffer, 1, size, fp) == size) ? 0 : -1;
}
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