Changeset 2073
- Timestamp:
- 02/11/2008 09:15:39 PM (5 months ago)
- Files:
-
- trunk/src/log.c (modified) (3 diffs)
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
trunk/src/log.c
r2071 r2073 310 310 int log_trace(const char *fmt, ...) { 311 311 buffer *b; 312 int l ;312 int l, tries = 0; 313 313 errorlog *err = myconfig; 314 314 va_list ap; … … 318 318 319 319 do { 320 errno = 0; 320 321 va_start(ap, fmt); 321 322 l = vsnprintf(b->ptr, b->size, fmt, ap); … … 335 336 /* C99: l is the mem-size we need */ 336 337 buffer_prepare_copy(b, l); 338 } else if (tries++ >= 3) { 339 int e = errno; 340 /* glibc 2.0.6 and earlier return -1 if the output was truncated 341 * so we try to increase the buffer size 3 times - so you cannot 342 * print error messages longer than 8 * 4096 = 32k with glib <= 2.0.6 343 */ 344 buffer_copy_string_len(b, CONST_STR_LEN("log_trace: vsnprintf error: l = ")); 345 buffer_append_long(b, l); 346 if (e) { 347 buffer_append_string_len(b, CONST_STR_LEN(", errno = ")); 348 buffer_append_long(b, errno); 349 buffer_append_string_len(b, CONST_STR_LEN(": ")); 350 buffer_append_string(b, strerror(e)); 351 } 352 break; 337 353 } else { 338 /* glibc 2.0.x and earlier return -1 */ 339 buffer_prepare_copy(b, b->size + 512); 354 buffer_prepare_copy(b, b->size * 2); 340 355 } 341 356 } while(1);

