Index: branches/chucko/i386/libsa/libsa.h =================================================================== --- branches/chucko/i386/libsa/libsa.h (revision 2291) +++ branches/chucko/i386/libsa/libsa.h (revision 2292) @@ -136,6 +136,7 @@ * printf.c */ extern int sprintf(char *s, const char * format, ...); +extern int snprintf(char *s, size_t size, const char * format, ...); extern int slvprintf(char * buffer, int len, const char * fmt, va_list arg); /* Index: branches/chucko/i386/libsa/printf.c =================================================================== --- branches/chucko/i386/libsa/printf.c (revision 2291) +++ branches/chucko/i386/libsa/printf.c (revision 2292) @@ -63,6 +63,21 @@ } /*VARARGS1*/ +int snprintf(char * str, size_t size, const char * fmt, ...) +{ + va_list ap; + struct putc_info pi; + + va_start(ap, fmt); + pi.str = str; + pi.last_str = str + size - 1; + prf(fmt, ap, sputc, &pi); + *pi.str = '\0'; + va_end(ap); + return (pi.str - str); +} + +/*VARARGS1*/ int slvprintf(char * str, int len, const char * fmt, va_list ap) { struct putc_info pi; Index: branches/chucko/i386/libsa/string.c =================================================================== --- branches/chucko/i386/libsa/string.c (revision 2291) +++ branches/chucko/i386/libsa/string.c (revision 2292) @@ -161,7 +161,10 @@ { register char *ret = s1; while (n && (*s1++ = *s2++)) - n--; + --n; + /* while (n--) *s1++ = '\0'; */ + if (n > 0) + bzero(s1, n); return ret; }