[OPEN-ILS-DEV] C nits: utils.c (Part 2)
Bill Erickson
billserickson at gmail.com
Fri Mar 23 15:42:36 EDT 2007
Below is some code I'm currently testing. I had to make one concession with
an addition call to memset (still not sure why), but, other than that, it's
been revamped more or less according to Scott's suggestions.
Unfortunately, I probaly won't have time to update/test all of the C code
with such detail, and, as you guys pointed out, fussiness, but this chunk of
code is used /a lot/, so it's worth it.
Thanks, Scott and David for the comments.
---------------------------------------------------------------
size_t buffer_add(growing_buffer* gb, const char* data) {
if(!(gb && data)) return 0;
size_t data_len = strlen( data );
if(data_len == 0) return 0;
size_t space_needed = data_len + gb->n_used + 1; /* add 1 for '\0' */
if( space_needed > gb->size ) {
while( space_needed > gb->size )
gb->size *= 2;
if( gb->size > BUFFER_MAX_SIZE ) {
fprintf(stderr, "Buffer reached MAX_SIZE of %lu",
BUFFER_MAX_SIZE );
return 0;
}
if( (gb->buf = realloc(gb->buf, gb->size)) == NULL ) {
perror("realloc(): Out of Memory" );
exit(99);
}
/* clear the new memory segment. in theory, this is
* unnecessary, but something is depending on this somewhere */
memset(gb->buf + space_needed - 1, 0, gb->size - space_needed + 1);
}
/* since we already know the size, use memcpy */
memcpy(gb->buf + gb->n_used, data, data_len);
/* don't count the '\0' in num used */
gb->n_used = space_needed - 1;
//gb->buf[gb->n_used] = '\0'; /* not needed with memset after realloc */
return gb->n_used;
}
-------------------------------------------------
BUFFER_MAX_SIZE is now 10485760L.
Suggestions appreciated.
-bill
--
Bill Erickson
PINES Systems Developer
Georgia Public Library Service
billserickson at gmail.com
http://open-ils.org
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://list.georgialibraries.org/pipermail/open-ils-dev/attachments/20070323/41bd7d7d/attachment.html
More information about the Open-ils-dev
mailing list