+20070123
+ - (dtucker) [openbsd-compat/bsd-snprintf.c] Static declarations for public
+ library interfaces aren't very helpful. Fix up the DOPR_OUTCH macro
+ so it works properly and modify its callers so that they don't pre or
+ post decrement arguments that are conditionally evaluated. While there,
+ put SNPRINTF_CONST back as it prevents build failures in some
+ configurations. ok djm@ (for most of it)
+
20070122
- (djm) [ssh-rand-helper.8] manpage nits;
from dleonard AT vintela.com (bz#1529)
#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;