Browse Source

remove INT_MAX limit on the n argument to snprintf/swprintf

this was a POSIX requirement that was always in conflict with ISO C,
which specified a well-defined behavior for snprintf and swprintf so
long as the actual number of bytes/characters produced did not exceed
INT_MAX.

I originally raised this conflict for snprintf with the Austin Group
as tracker issue 761, which was never resolved. it was later reported
again as issue 1219, and as a result the conflicting requirement has
been removed.

the corresponding issue with swprintf does not seem to have been
addressed, but as the same reasoning applies to it, I am removing the
limitation on n for swprintf as well.
master
Rich Felker 2 years ago
parent
commit
11fb383275
  1. 5
      src/stdio/vsnprintf.c
  2. 3
      src/stdio/vswprintf.c

5
src/stdio/vsnprintf.c

@ -45,11 +45,6 @@ int vsnprintf(char *restrict s, size_t n, const char *restrict fmt, va_list ap)
.cookie = &c,
};
if (n > INT_MAX) {
errno = EOVERFLOW;
return -1;
}
*c.s = 0;
return vfprintf(&f, fmt, ap);
}

3
src/stdio/vswprintf.c

@ -51,9 +51,6 @@ int vswprintf(wchar_t *restrict s, size_t n, const wchar_t *restrict fmt, va_lis
if (!n) {
return -1;
} else if (n > INT_MAX) {
errno = EOVERFLOW;
return -1;
}
r = vfwprintf(&f, fmt, ap);
sw_write(&f, 0, 0);

Loading…
Cancel
Save