clarity
git-svn-id: https://asn1c.svn.sourceforge.net/svnroot/asn1c/trunk@1181 59561ff5-6e30-0410-9f3c-9617f08c8826
diff --git a/skeletons/GeneralizedTime.c b/skeletons/GeneralizedTime.c
index 0c30493..f864d83 100644
--- a/skeletons/GeneralizedTime.c
+++ b/skeletons/GeneralizedTime.c
@@ -118,7 +118,7 @@
setenv("TZ", tzold, 1); \
*tzoldbuf = 0; \
if(tzold != tzoldbuf) \
- free(tzold); \
+ FREEMEM(tzold); \
} else { \
unsetenv("TZ"); \
} \
@@ -671,7 +671,7 @@
FREEMEM(opt_gt->buf);
} else {
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;
diff --git a/skeletons/OCTET_STRING.c b/skeletons/OCTET_STRING.c
index f2dd1c6..7b83b61 100644
--- a/skeletons/OCTET_STRING.c
+++ b/skeletons/OCTET_STRING.c
@@ -1537,7 +1537,7 @@
st = (OCTET_STRING_t *)CALLOC(1, specs->struct_size);
if(st && str && OCTET_STRING_fromBuf(st, str, len)) {
- free(st);
+ FREEMEM(st);
st = NULL;
}
diff --git a/skeletons/REAL.c b/skeletons/REAL.c
index dfaedf7..51098c0 100644
--- a/skeletons/REAL.c
+++ b/skeletons/REAL.c
@@ -119,7 +119,7 @@
buflen = ret;
break;
}
- if(buf != local_buf) free(buf);
+ if(buf != local_buf) FREEMEM(buf);
buf = (char *)MALLOC(buflen);
if(!buf) return -1;
} while(1);
@@ -219,7 +219,7 @@
}
ret = cb(buf, buflen, app_key);
- if(buf != local_buf) free(buf);
+ if(buf != local_buf) FREEMEM(buf);
return (ret < 0) ? -1 : buflen;
}
@@ -322,7 +322,7 @@
b[chunk_size] = 0; /* nul-terminate */
value = strtod(b, &endptr);
- free(b);
+ FREEMEM(b);
if(endptr == b) return XPBD_BROKEN_ENCODING;
if(asn_double2REAL(st, value))
diff --git a/skeletons/asn_SET_OF.c b/skeletons/asn_SET_OF.c
index 3670677..944f2cb 100644
--- a/skeletons/asn_SET_OF.c
+++ b/skeletons/asn_SET_OF.c
@@ -77,7 +77,7 @@
while(as->count--)
as->free(as->array[as->count]);
}
- free(as->array);
+ FREEMEM(as->array);
as->array = 0;
}
as->count = 0;
diff --git a/skeletons/constr_SET_OF.c b/skeletons/constr_SET_OF.c
index 5642963..03c6fe2 100644
--- a/skeletons/constr_SET_OF.c
+++ b/skeletons/constr_SET_OF.c
@@ -747,7 +747,7 @@
if(encs[encs_count].buffer)
FREEMEM(encs[encs_count].buffer);
}
- free(encs);
+ FREEMEM(encs);
}
_ASN_ENCODED_OK(er);
}
diff --git a/skeletons/converter-sample.c b/skeletons/converter-sample.c
index e5ab8da..e1e3dcc 100644
--- a/skeletons/converter-sample.c
+++ b/skeletons/converter-sample.c
@@ -271,57 +271,58 @@
return 0;
}
-/* Dump the buffer */
-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;
-}
-
-static char *buffer;
-static size_t buf_len; /* Length of meaningful contents */
-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)
+static struct dynamic_buffer {
+ char *data; /* Pointer to the data bytes */
+ size_t offset; /* Offset from the start */
+ size_t length; /* Length of meaningful contents */
+ size_t allocated; /* Allocated memory for data */
+ int nreallocs; /* Number of data reallocations */
+ off_t bytes_shifted; /* Number of bytes ever shifted */
+} DynamicBuffer;
/*
* 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 }",
- (long)bySize, (long)buf_offset, (long)buf_len, (long)buf_size);
+ DEBUG("add_bytes(%ld) { o=%ld l=%ld s=%ld }",
+ (long)bySize,
+ (long)DynamicBuffer.offset,
+ (long)DynamicBuffer.length,
+ (long)DynamicBuffer.allocated);
- if(buf_size >= (buf_offset + buf_len + bySize)) {
- /* Nothing to do */
- } else if(bySize <= buf_offset) {
- DEBUG("\tContents shifted by %ld", (long)buf_offset);
+ if(DynamicBuffer.allocated
+ >= (DynamicBuffer.offset + DynamicBuffer.length + bySize)) {
+ /* No buffer reallocation is necessary */
+ } else if(bySize <= DynamicBuffer.offset) {
+ DEBUG("\tContents shifted by %ld", DynamicBuffer.offset);
/* Shift the buffer contents */
- memmove(buffer, buffer + buf_offset, buf_len);
- buf_shifted += buf_offset;
- buf_offset = 0;
+ memmove(DynamicBuffer.data,
+ DynamicBuffer.data + DynamicBuffer.offset,
+ DynamicBuffer.length);
+ DynamicBuffer.bytes_shifted += DynamicBuffer.offset;
+ DynamicBuffer.offset = 0;
} else {
- size_t newsize = (buf_size << 2) + bySize;
- void *p = malloc(newsize);
+ size_t newsize = (DynamicBuffer.allocated << 2) + bySize;
+ void *p = MALLOC(newsize);
if(!p) {
- perror("realloc()");
+ perror("malloc()");
exit(EX_OSERR);
}
- memcpy(p, buffer, buf_len);
- free(buffer);
- buffer = (char *)p;
- buf_size = newsize;
- buf_offset = 0;
+ memcpy(p, DynamicBuffer.data, DynamicBuffer.length);
+ FREEMEM(DynamicBuffer.data);
+ DynamicBuffer.data = (char *)p;
+ DynamicBuffer.offset = 0;
+ DynamicBuffer.allocated = newsize;
+ DynamicBuffer.nreallocs++;
DEBUG("\tBuffer reallocated to %ld, %d time",
- (long)newsize, ++buf_nreallocs);
+ newsize, DynamicBuffer.nreallocs);
}
- memcpy(buffer + buf_offset + buf_len, data2add, bySize);
- buf_len += bySize;
+ memcpy(DynamicBuffer.data + DynamicBuffer.offset + DynamicBuffer.length,
+ data2add, bySize);
+ DynamicBuffer.length += bySize;
}
static void *data_decode_from_file(asn_TYPE_descriptor_t *pduType, const char *fname, ssize_t suggested_bufsize) {
@@ -355,7 +356,7 @@
/* prepare the file buffer */
if(fbuf_size != suggested_bufsize) {
- fbuf = (char *)realloc(fbuf, suggested_bufsize);
+ fbuf = (char *)REALLOC(fbuf, suggested_bufsize);
if(!fbuf) {
perror("realloc()");
exit(EX_OSERR);
@@ -363,11 +364,11 @@
fbuf_size = suggested_bufsize;
}
- buf_nreallocs = 0;
- buf_shifted = 0;
- buf_offset = 0;
- buf_size = 0;
- buf_len = 0;
+ DynamicBuffer.offset = 0;
+ DynamicBuffer.length = 0;
+ DynamicBuffer.allocated = 0;
+ DynamicBuffer.bytes_shifted = 0;
+ DynamicBuffer.nreallocs = 0;
/* Pretend immediate EOF */
rval.code = RC_WMORE;
@@ -380,11 +381,11 @@
/*
* Copy the data over, or use the original buffer.
*/
- if(buf_size) {
+ if(DynamicBuffer.allocated) {
/* Append the new data into the intermediate buffer */
- buf_extend(fbuf, rd);
- i_bptr = bufptr;
- i_size = buf_len;
+ add_bytes_to_buffer(fbuf, rd);
+ i_bptr = DynamicBuffer.data + DynamicBuffer.offset;
+ i_size = DynamicBuffer.allocated;
} else {
i_bptr = fbuf;
i_size = rd;
@@ -405,15 +406,16 @@
break;
}
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);
- 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) {
- buf_extend(fbuf + rval.consumed,
+ add_bytes_to_buffer(fbuf + rval.consumed,
rd - rval.consumed);
rval.consumed = 0;
}
@@ -427,13 +429,17 @@
return structure;
case RC_WMORE:
DEBUG("RC_WMORE, continuing %ld with %ld..%ld..%ld",
- (long)rval.consumed, (long)buf_offset,
- (long)buf_len, (long)buf_size);
+ (long)rval.consumed,
+ (long)DynamicBuffer.offset,
+ (long)DynamicBuffer.length,
+ (long)DynamicBuffer.allocated);
/*
* Adjust position inside the source buffer.
*/
- buf_offset += rval.consumed;
- buf_len -= rval.consumed;
+ if(DynamicBuffer.allocated) {
+ DynamicBuffer.offset += rval.consumed;
+ DynamicBuffer.length -= rval.consumed;
+ }
rval.consumed = 0;
continue;
case RC_FAIL:
@@ -449,7 +455,8 @@
fprintf(stderr, "%s: "
"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)
? "Unexpected end of input"
: "Input processing error");
@@ -457,3 +464,8 @@
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;
+}