Changeset 514
- Timestamp:
- 12/11/06 21:37:02 (2 years ago)
- Files:
-
- cherokee/trunk/ChangeLog (modified) (1 diff)
- cherokee/trunk/cherokee/buffer.c (modified) (8 diffs)
- cherokee/trunk/cherokee/buffer.h (modified) (1 diff)
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
cherokee/trunk/ChangeLog
r513 r514 1 2006-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 1 23 2006-12-11 Alvaro Lopez Ortega <alvaro@alobbs.com> 2 24 cherokee/trunk/cherokee/buffer.c
r493 r514 42 42 43 43 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 45 47 46 48 ret_t … … 154 156 if (free < (size+1)) { 155 157 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); 157 160 if (unlikely (pbuf == NULL)) 158 161 return ret_nomem; 159 162 buf->buf = pbuf; 160 buf->size += size - free + 1;163 buf->size = newsize; 161 164 } 162 165 … … 251 254 if (free < (num+1)) { 252 255 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); 254 258 if (unlikely (pbuf == NULL)) 255 259 return ret_nomem; 256 260 buf->buf = pbuf; 257 buf->size += num - free + 1;261 buf->size = newsize; 258 262 } 259 263 … … 276 280 if (free < (size+1)) { 277 281 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); 279 284 if (unlikely (pbuf == NULL)) 280 285 return ret_nomem; 281 286 buf->buf = pbuf; 282 buf->size += size - free + 1;287 buf->size = newsize; 283 288 } 284 289 … … 330 335 331 336 ret_t 337 cherokee_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 349 ret_t 332 350 cherokee_buffer_ensure_size (cherokee_buffer_t *buf, size_t size) 333 351 { … … 336 354 /* Maybe it doesn't need it 337 355 */ 338 if (size < buf->len)356 if (size <= buf->len) 339 357 return ret_ok; 340 358 … … 615 633 616 634 initial_size = buf->len; 617 cherokee_buffer_ensure_size (buf, buf->len * num );635 cherokee_buffer_ensure_size (buf, buf->len * num + 1); 618 636 619 637 for (i=0; i<num; i++) { … … 940 958 /* Get memory 941 959 */ 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); 943 961 if (unlikely (ret != ret_ok)) return ret; 944 962 cherokee/trunk/cherokee/buffer.h
r493 r514 91 91 ret_t cherokee_buffer_replace_string (cherokee_buffer_t *buf, char *subs, int subs_len, char *repl, int repl_len); 92 92 93 ret_t cherokee_buffer_ensure_addlen (cherokee_buffer_t *buf, size_t alen); 93 94 ret_t cherokee_buffer_ensure_size (cherokee_buffer_t *buf, size_t size); 94 95