improve program flow - relates to #353

Tue, 16 Jan 2024 23:43:27 +0100

author
Mike Becker <universe@uap-core.de>
date
Tue, 16 Jan 2024 23:43:27 +0100
changeset 813
aba6d37b78bd
parent 812
fda0f1910d7e
child 814
5f9e07d3dd6c

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  }

mercurial