Changeset 514

Show
Ignore:
Timestamp:
12/11/06 21:37:02 (2 years ago)
Author:
alo
Message:

--

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • cherokee/trunk/ChangeLog

    r513 r514  
     12006-12-11  A.D.F  <adefacc@tin.it> 
     2 
     3        * cherokee/buffer.h:  
     4        - new function prototype: 
     5                cherokee_buffer_ensure_addlen(); 
     6         
     7        * cherokee/buffer.c:  
     8        - added new function cherokee_buffer_ensure_addlen() 
     9          in order to ensure that there is enough space 
     10          to add n characters to the buffer, useful to lower 
     11          the number of reallocations when it is known 
     12          how much space is needed (more or less); 
     13 
     14        - added constant REALLOC_EXTRA_SIZE to each realloc() 
     15          call; it is useful to lower the number of realloc() 
     16          calls, especially when using functions like 
     17          cherokee_buffer_add*() with small chunks; 
     18 
     19        - added 1 to a few calls to cherokee_buffer_ensure_size 
     20          in order to always allow space for a final '\0', 
     21          which is included in "size" counting. 
     22 
    1232006-12-11  Alvaro Lopez Ortega  <alvaro@alobbs.com> 
    224 
  • cherokee/trunk/cherokee/buffer.c

    r493 r514  
    4242 
    4343 
    44 #define TO_HEX(c) (c > 9 ? c+'a'-10 : c+'0') 
     44#define REALLOC_EXTRA_SIZE      0 
     45#define TO_HEX(c)               (c > 9 ? c+'a'-10 : c+'0') 
     46 
    4547 
    4648ret_t 
     
    154156        if (free < (size+1)) { 
    155157                char *pbuf; 
    156                 pbuf = (char *) realloc(buf->buf, buf->size + size - free + 1); 
     158                int newsize = buf->size + size - free + REALLOC_EXTRA_SIZE + 1; 
     159                pbuf = (char *) realloc(buf->buf, newsize); 
    157160                if (unlikely (pbuf == NULL))  
    158161                        return ret_nomem; 
    159162                buf->buf = pbuf; 
    160                 buf->size += size - free + 1
     163                buf->size = newsize
    161164        } 
    162165 
     
    251254        if (free < (num+1)) { 
    252255                char *pbuf; 
    253                 pbuf = (char *) realloc(buf->buf, buf->size + num - free + 1); 
     256                int newsize = buf->size + num - free + REALLOC_EXTRA_SIZE + 1; 
     257                pbuf = (char *) realloc(buf->buf, newsize); 
    254258                if (unlikely (pbuf == NULL)) 
    255259                        return ret_nomem; 
    256260                buf->buf = pbuf; 
    257                 buf->size += num - free + 1
     261                buf->size = newsize
    258262        } 
    259263 
     
    276280        if (free < (size+1)) { 
    277281                char *pbuf; 
    278                 pbuf = (char *) realloc(buf->buf, buf->size + size - free + 1); 
     282                int newsize = buf->size + size - free + REALLOC_EXTRA_SIZE + 1; 
     283                pbuf = (char *) realloc(buf->buf, newsize); 
    279284                if (unlikely (pbuf == NULL)) 
    280285                        return ret_nomem; 
    281286                buf->buf = pbuf; 
    282                 buf->size += size - free + 1
     287                buf->size = newsize
    283288        } 
    284289 
     
    330335 
    331336ret_t 
     337cherokee_buffer_ensure_addlen (cherokee_buffer_t *buf, size_t addlen) 
     338{ 
     339        if (addlen < 0) 
     340                return ret_error; 
     341 
     342        if (buf->len + addlen < buf->size) 
     343                return ret_ok; 
     344 
     345        return cherokee_buffer_ensure_size (buf, ((size_t)buf->len + addlen)); 
     346} 
     347 
     348 
     349ret_t 
    332350cherokee_buffer_ensure_size (cherokee_buffer_t *buf, size_t size) 
    333351{ 
     
    336354        /* Maybe it doesn't need it 
    337355         */ 
    338         if (size < buf->len)  
     356        if (size <= buf->len)  
    339357                return ret_ok; 
    340358 
     
    615633 
    616634        initial_size = buf->len; 
    617         cherokee_buffer_ensure_size (buf, buf->len * num); 
     635        cherokee_buffer_ensure_size (buf, buf->len * num + 1); 
    618636 
    619637        for (i=0; i<num; i++) { 
     
    940958        /* Get memory 
    941959         */ 
    942         ret = cherokee_buffer_ensure_size (&new_buf, (buf->len+4)*4/3); 
     960        ret = cherokee_buffer_ensure_size (&new_buf, (buf->len+4)*4/3 + 1); 
    943961        if (unlikely (ret != ret_ok)) return ret; 
    944962 
  • cherokee/trunk/cherokee/buffer.h

    r493 r514  
    9191ret_t cherokee_buffer_replace_string     (cherokee_buffer_t  *buf, char *subs, int subs_len, char *repl, int repl_len); 
    9292 
     93ret_t cherokee_buffer_ensure_addlen      (cherokee_buffer_t  *buf, size_t alen); 
    9394ret_t cherokee_buffer_ensure_size        (cherokee_buffer_t  *buf, size_t size); 
    9495