#define DOPR_OUTCH(buf, pos, buflen, thechar) \
do { \
- if (++pos >= INT_MAX) { \
+ if (pos + 1 >= INT_MAX) { \
errno = ERANGE; \
return -1; \
+ } \
if (pos < buflen) \
buf[pos] = thechar; \
- } \
+ (pos)++; \
} while (0)
static int dopr(char *buffer, size_t maxlen, const char *format,
++cnt;
}
while (*value && (cnt < max)) {
- DOPR_OUTCH(buffer, *currlen, maxlen, *value++);
+ DOPR_OUTCH(buffer, *currlen, maxlen, *value);
+ *value++;
++cnt;
}
while ((padlen < 0) && (cnt < max)) {
}
/* Digits */
- while (place > 0)
- DOPR_OUTCH(buffer, *currlen, maxlen, convert[--place]);
+ while (place > 0) {
+ --place;
+ DOPR_OUTCH(buffer, *currlen, maxlen, convert[place]);
+ }
/* Left Justified spaces */
while (spadlen < 0) {
if (signvalue)
DOPR_OUTCH(buffer, *currlen, maxlen, signvalue);
- while (iplace > 0)
- DOPR_OUTCH(buffer, *currlen, maxlen, iconvert[--iplace]);
+ while (iplace > 0) {
+ --iplace;
+ DOPR_OUTCH(buffer, *currlen, maxlen, iconvert[iplace]);
+ }
#ifdef DEBUG_SNPRINTF
printf("fmtfp: fplace=%d zpadlen=%d\n", fplace, zpadlen);
--zpadlen;
}
- while (fplace > 0)
- DOPR_OUTCH(buffer, *currlen, maxlen,
- fconvert[--fplace]);
+ while (fplace > 0) {
+ --fplace;
+ DOPR_OUTCH(buffer, *currlen, maxlen, fconvert[fplace]);
+ }
}
while (padlen < 0) {
#endif /* !defined(HAVE_SNPRINTF) || !defined(HAVE_VSNPRINTF) */
#if !defined(HAVE_VSNPRINTF)
-static int
+int
vsnprintf (char *str, size_t count, const char *fmt, va_list args)
{
return dopr(str, count, fmt, args);
#endif
#if !defined(HAVE_SNPRINTF)
-static int
-snprintf(char *str, size_t count, const char *fmt, ...)
+int
+snprintf(char *str, size_t count, SNPRINTF_CONST char *fmt, ...)
{
size_t ret;
va_list ap;