Tue, 16 Jan 2024 23:43:27 +0100
improve program flow - relates to #353
src/printf.c | file | annotate | diff | comparison | revisions |
1.1 --- a/src/printf.c Tue Jan 16 23:16:15 2024 +0100 1.2 +++ b/src/printf.c Tue Jan 16 23:43:27 2024 +0100 1.3 @@ -144,27 +144,21 @@ 1.4 va_list ap2; 1.5 va_copy(ap2, ap); 1.6 int ret = vsnprintf(*str, len, fmt, ap); 1.7 - if (ret < 0 || ((unsigned)ret) < len) { 1.8 - va_end(ap2); 1.9 - return ret; 1.10 - } else { 1.11 + if ((unsigned) ret >= len) { 1.12 unsigned newlen = ret + 1; 1.13 char *ptr = cxRealloc(alloc, *str, newlen); 1.14 if (ptr) { 1.15 int newret = vsnprintf(ptr, newlen, fmt, ap2); 1.16 - va_end(ap2); 1.17 if (newret < 0) { 1.18 cxFree(alloc, ptr); 1.19 - return ret; 1.20 } else { 1.21 *str = ptr; 1.22 - return newret; 1.23 + ret = newret; 1.24 } 1.25 - } else { 1.26 - va_end(ap2); 1.27 - return ret; 1.28 } 1.29 } 1.30 + va_end(ap2); 1.31 + return ret; 1.32 } 1.33 1.34 int cx_sprintf_sa(CxAllocator *alloc, char *buf, size_t len, char **str, const char *fmt, ... ) { 1.35 @@ -180,25 +174,19 @@ 1.36 va_copy(ap2, ap); 1.37 int ret = vsnprintf(buf, len, fmt, ap); 1.38 *str = buf; 1.39 - if (ret < 0 || ((unsigned)ret) < len) { 1.40 - va_end(ap2); 1.41 - return ret; 1.42 - } else { 1.43 + if ((unsigned) ret >= len) { 1.44 unsigned newlen = ret + 1; 1.45 char *ptr = cxMalloc(alloc, newlen); 1.46 if (ptr) { 1.47 int newret = vsnprintf(ptr, newlen, fmt, ap2); 1.48 - va_end(ap2); 1.49 if (newret < 0) { 1.50 cxFree(alloc, ptr); 1.51 - return ret; 1.52 } else { 1.53 *str = ptr; 1.54 - return newret; 1.55 + ret = newret; 1.56 } 1.57 - } else { 1.58 - va_end(ap2); 1.59 - return ret; 1.60 } 1.61 } 1.62 + va_end(ap2); 1.63 + return ret; 1.64 }