[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