lib/slprintf.c tiny bug on FreeBSD - test program
Michail Vidiassov
master at iaas.msu.ru
Sat Feb 24 10:18:51 GMT 2001
Sorry, it seems I have forgotten to attach it to my previous mail
#include <stdio.h>
#include <string.h>
#include <stdarg.h>
#define HAVE_STDARG_H 1
/* this is like vsnprintf but the 'n' limit does not include
the terminating null. So if you have a 1024 byte buffer then
pass 1023 for n */
int vslprintf(char *str, int n, char *format, va_list ap)
{
int ret = vsnprintf(str, n, format, ap);
if (ret > n || ret < 0) {
str[n] = 0;
return -1;
}
str[ret] = 0;
return ret;
}
#ifdef HAVE_STDARG_H
int slprintf(char *str, int n, char *format, ...)
{
#else
int slprintf(va_alist)
va_dcl
{
char *str, *format;
int n;
#endif
va_list ap;
int ret;
#ifdef HAVE_STDARG_H
va_start(ap, format);
#else
va_start(ap);
str = va_arg(ap,char *);
n = va_arg(ap,int);
format = va_arg(ap,char *);
#endif
ret = vslprintf(str,n,format,ap);
va_end(ap);
return ret;
}
int main()
{
char buf[11];
char *str;
int i;
printf("buffer size: %d\n",sizeof(buf));
puts("slprintf(buf,sizeof(buf)-1,\"%s\",str)");
bzero(buf,sizeof(buf));
str = "1234567890";
i = slprintf(buf,sizeof(buf)-1,"%s",str);
printf("str:%s buf:%s\n sizeof:%d strlen:%d return code:%d\n",
str, buf, sizeof(buf), strlen(buf), i);
bzero(buf,sizeof(buf));
str = "12345678901";
i = slprintf(buf,sizeof(buf)-1,"%s",str);
printf("str:%s buf:%s\n sizeof:%d strlen:%d return code:%d\n",
str, buf, sizeof(buf), strlen(buf), i);
puts("snprintf(buf,sizeof(buf),\"%s\",str)");
bzero(buf,sizeof(buf));
str = "1234567890";
i = snprintf(buf,sizeof(buf),"%s",str);
printf("str:%s buf:%s\n sizeof:%d strlen:%d return code:%d\n",
str, buf, sizeof(buf), strlen(buf), i);
bzero(buf,sizeof(buf));
str = "12345678901";
i = snprintf(buf,sizeof(buf),"%s",str);
printf("str:%s buf:%s\n sizeof:%d strlen:%d return code:%d\n",
str, buf, sizeof(buf), strlen(buf), i);
return (0);
}
More information about the samba-technical
mailing list