Commit 8950ac03 authored by Andrew Tridgell's avatar Andrew Tridgell

imported new snprintf.c from samba, got rid of slprintf

parent 26ef00bd
...@@ -14,3 +14,5 @@ ...@@ -14,3 +14,5 @@
#undef HAVE_GETTIMEOFDAY_TZ #undef HAVE_GETTIMEOFDAY_TZ
#undef HAVE_SOCKETPAIR #undef HAVE_SOCKETPAIR
#undef HAVE_SECURE_MKSTEMP #undef HAVE_SECURE_MKSTEMP
#undef HAVE_C99_VSNPRINTF
...@@ -39,7 +39,7 @@ static int make_simple_backup(char *fname) ...@@ -39,7 +39,7 @@ static int make_simple_backup(char *fname)
return 0; return 0;
} }
slprintf(fnamebak,sizeof(fnamebak),"%s%s",fname,backup_suffix); snprintf(fnamebak,sizeof(fnamebak),"%s%s",fname,backup_suffix);
if (do_rename(fname,fnamebak) != 0) { if (do_rename(fname,fnamebak) != 0) {
/* cygwin (at least version b19) reports EINVAL */ /* cygwin (at least version b19) reports EINVAL */
if (errno != ENOENT && errno != EINVAL) { if (errno != ENOENT && errno != EINVAL) {
...@@ -92,9 +92,9 @@ static int make_bak_dir(char *fname,char *bak_path) ...@@ -92,9 +92,9 @@ static int make_bak_dir(char *fname,char *bak_path)
while(strncmp(bak_path,"./",2)==0) bak_path += 2; while(strncmp(bak_path,"./",2)==0) bak_path += 2;
if(bak_path[strlen(bak_path)-1]!='/') { if(bak_path[strlen(bak_path)-1]!='/') {
slprintf(fullpath,sizeof(fullpath),"%s/",bak_path); snprintf(fullpath,sizeof(fullpath),"%s/",bak_path);
} else { } else {
slprintf(fullpath,sizeof(fullpath),"%s",bak_path); snprintf(fullpath,sizeof(fullpath),"%s",bak_path);
} }
p=fullpath; p=fullpath;
q=&fullpath[strlen(fullpath)]; /* End of bak_path string */ q=&fullpath[strlen(fullpath)]; /* End of bak_path string */
...@@ -208,7 +208,7 @@ static int keep_backup(char *fname) ...@@ -208,7 +208,7 @@ static int keep_backup(char *fname)
return 0; return 0;
} }
slprintf(keep_name, sizeof (keep_name), "%s/%s", backup_dir, fname); snprintf(keep_name, sizeof (keep_name), "%s/%s", backup_dir, fname);
#ifdef HAVE_MKNOD #ifdef HAVE_MKNOD
......
...@@ -499,7 +499,7 @@ int daemon_main(void) ...@@ -499,7 +499,7 @@ int daemon_main(void)
rsyserr(FLOG, errno, "failed to create pid file %s", pid_file); rsyserr(FLOG, errno, "failed to create pid file %s", pid_file);
exit_cleanup(RERR_FILEIO); exit_cleanup(RERR_FILEIO);
} }
slprintf(pidbuf, sizeof(pidbuf), "%d\n", pid); snprintf(pidbuf, sizeof(pidbuf), "%d\n", pid);
write(fd, pidbuf, strlen(pidbuf)); write(fd, pidbuf, strlen(pidbuf));
close(fd); close(fd);
} }
......
...@@ -127,7 +127,7 @@ AC_FUNC_MEMCMP ...@@ -127,7 +127,7 @@ AC_FUNC_MEMCMP
AC_FUNC_UTIME_NULL AC_FUNC_UTIME_NULL
AC_CHECK_FUNCS(waitpid wait4 getcwd strdup strerror chown chmod mknod) AC_CHECK_FUNCS(waitpid wait4 getcwd strdup strerror chown chmod mknod)
AC_CHECK_FUNCS(fchmod fstat strchr readlink link utime utimes strftime) AC_CHECK_FUNCS(fchmod fstat strchr readlink link utime utimes strftime)
AC_CHECK_FUNCS(memmove lchown vsnprintf snprintf setsid glob strpbrk) AC_CHECK_FUNCS(memmove lchown vsnprintf snprintf asprintf setsid glob strpbrk)
AC_CHECK_FUNCS(strlcat strlcpy mtrace) AC_CHECK_FUNCS(strlcat strlcpy mtrace)
AC_CACHE_CHECK([for working socketpair],rsync_cv_HAVE_SOCKETPAIR,[ AC_CACHE_CHECK([for working socketpair],rsync_cv_HAVE_SOCKETPAIR,[
...@@ -231,6 +231,32 @@ if test x"$rsync_cv_HAVE_GETTIMEOFDAY_TZ" = x"yes"; then ...@@ -231,6 +231,32 @@ if test x"$rsync_cv_HAVE_GETTIMEOFDAY_TZ" = x"yes"; then
AC_DEFINE(HAVE_GETTIMEOFDAY_TZ) AC_DEFINE(HAVE_GETTIMEOFDAY_TZ)
fi fi
AC_CACHE_CHECK([for C99 vsnprintf],rsync_cv_HAVE_C99_VSNPRINTF,[
AC_TRY_RUN([
#include <sys/types.h>
#include <stdarg.h>
void foo(const char *format, ...) {
va_list ap;
int len;
char buf[5];
va_start(ap, format);
len = vsnprintf(0, 0, format, ap);
va_end(ap);
if (len != 5) exit(1);
if (snprintf(buf, 3, "hello") != 5 || strcmp(buf, "he") != 0) exit(1);
exit(0);
}
main() { foo("hello"); }
],
rsync_cv_HAVE_C99_VSNPRINTF=yes,rsync_cv_HAVE_C99_VSNPRINTF=no,rsync_cv_HAVE_C99_VSNPRINTF=cross)])
if test x"$rsync_cv_HAVE_C99_VSNPRINTF" = x"yes"; then
AC_DEFINE(HAVE_C99_VSNPRINTF)
fi
AC_CACHE_CHECK([for secure mkstemp],rsync_cv_HAVE_SECURE_MKSTEMP,[ AC_CACHE_CHECK([for secure mkstemp],rsync_cv_HAVE_SECURE_MKSTEMP,[
AC_TRY_RUN([#include <stdlib.h> AC_TRY_RUN([#include <stdlib.h>
#include <sys/types.h> #include <sys/types.h>
......
...@@ -398,7 +398,7 @@ void add_cvs_excludes(void) ...@@ -398,7 +398,7 @@ void add_cvs_excludes(void)
add_exclude(cvs_ignore_list[i], 0); add_exclude(cvs_ignore_list[i], 0);
if ((p=getenv("HOME")) && strlen(p) < (MAXPATHLEN-12)) { if ((p=getenv("HOME")) && strlen(p) < (MAXPATHLEN-12)) {
slprintf(fname,sizeof(fname), "%s/.cvsignore",p); snprintf(fname,sizeof(fname), "%s/.cvsignore",p);
add_exclude_file(fname,0,0); add_exclude_file(fname,0,0);
} }
......
...@@ -56,7 +56,7 @@ static int skip_file(char *fname, ...@@ -56,7 +56,7 @@ static int skip_file(char *fname,
if (compare_dest != NULL) { if (compare_dest != NULL) {
if (access(fname, 0) != 0) { if (access(fname, 0) != 0) {
slprintf(fnamecmpdest,MAXPATHLEN,"%s/%s", snprintf(fnamecmpdest,MAXPATHLEN,"%s/%s",
compare_dest,fname); compare_dest,fname);
fname = fnamecmpdest; fname = fnamecmpdest;
} }
...@@ -329,7 +329,7 @@ void recv_generator(char *fname,struct file_list *flist,int i,int f_out) ...@@ -329,7 +329,7 @@ void recv_generator(char *fname,struct file_list *flist,int i,int f_out)
if ((statret == -1) && (compare_dest != NULL)) { if ((statret == -1) && (compare_dest != NULL)) {
/* try the file at compare_dest instead */ /* try the file at compare_dest instead */
int saveerrno = errno; int saveerrno = errno;
slprintf(fnamecmpbuf,MAXPATHLEN,"%s/%s",compare_dest,fname); snprintf(fnamecmpbuf,MAXPATHLEN,"%s/%s",compare_dest,fname);
statret = link_stat(fnamecmpbuf,&st); statret = link_stat(fnamecmpbuf,&st);
if (!S_ISREG(st.st_mode)) if (!S_ISREG(st.st_mode))
statret = -1; statret = -1;
......
...@@ -595,7 +595,7 @@ void io_printf(int fd, const char *format, ...) ...@@ -595,7 +595,7 @@ void io_printf(int fd, const char *format, ...)
int len; int len;
va_start(ap, format); va_start(ap, format);
len = vslprintf(buf, sizeof(buf), format, ap); len = vsnprintf(buf, sizeof(buf), format, ap);
va_end(ap); va_end(ap);
if (len < 0) exit_cleanup(RERR_STREAMIO); if (len < 0) exit_cleanup(RERR_STREAMIO);
......
This diff is collapsed.
...@@ -286,7 +286,7 @@ void rprintf(enum logcode code, const char *format, ...) ...@@ -286,7 +286,7 @@ void rprintf(enum logcode code, const char *format, ...)
int len; int len;
va_start(ap, format); va_start(ap, format);
len = vslprintf(buf, sizeof(buf), format, ap); len = vsnprintf(buf, sizeof(buf), format, ap);
va_end(ap); va_end(ap);
if (len > sizeof(buf)-1) exit_cleanup(RERR_MESSAGEIO); if (len > sizeof(buf)-1) exit_cleanup(RERR_MESSAGEIO);
...@@ -311,7 +311,7 @@ void rsyserr(enum logcode code, int errcode, const char *format, ...) ...@@ -311,7 +311,7 @@ void rsyserr(enum logcode code, int errcode, const char *format, ...)
char *sysmsg; char *sysmsg;
va_start(ap, format); va_start(ap, format);
len = vslprintf(buf, sizeof(buf), format, ap); len = vsnprintf(buf, sizeof(buf), format, ap);
va_end(ap); va_end(ap);
if (len > sizeof(buf)-1) exit_cleanup(RERR_MESSAGEIO); if (len > sizeof(buf)-1) exit_cleanup(RERR_MESSAGEIO);
...@@ -392,18 +392,18 @@ static void log_formatted(enum logcode code, ...@@ -392,18 +392,18 @@ static void log_formatted(enum logcode code,
case 'h': if (am_daemon) n = client_name(0); break; case 'h': if (am_daemon) n = client_name(0); break;
case 'a': if (am_daemon) n = client_addr(0); break; case 'a': if (am_daemon) n = client_addr(0); break;
case 'l': case 'l':
slprintf(buf2,sizeof(buf2),"%.0f", snprintf(buf2,sizeof(buf2),"%.0f",
(double)file->length); (double)file->length);
n = buf2; n = buf2;
break; break;
case 'p': case 'p':
slprintf(buf2,sizeof(buf2),"%d", snprintf(buf2,sizeof(buf2),"%d",
(int)getpid()); (int)getpid());
n = buf2; n = buf2;
break; break;
case 'o': n = op; break; case 'o': n = op; break;
case 'f': case 'f':
slprintf(buf2, sizeof(buf2), "%s/%s", snprintf(buf2, sizeof(buf2), "%s/%s",
file->basedir?file->basedir:"", file->basedir?file->basedir:"",
f_name(file)); f_name(file));
clean_fname(buf2); clean_fname(buf2);
...@@ -422,7 +422,7 @@ static void log_formatted(enum logcode code, ...@@ -422,7 +422,7 @@ static void log_formatted(enum logcode code,
b = stats.total_read - b = stats.total_read -
initial_stats->total_read; initial_stats->total_read;
} }
slprintf(buf2,sizeof(buf2),"%.0f", (double)b); snprintf(buf2,sizeof(buf2),"%.0f", (double)b);
n = buf2; n = buf2;
break; break;
case 'c': case 'c':
...@@ -433,7 +433,7 @@ static void log_formatted(enum logcode code, ...@@ -433,7 +433,7 @@ static void log_formatted(enum logcode code,
b = stats.total_read - b = stats.total_read -
initial_stats->total_read; initial_stats->total_read;
} }
slprintf(buf2,sizeof(buf2),"%.0f", (double)b); snprintf(buf2,sizeof(buf2),"%.0f", (double)b);
n = buf2; n = buf2;
break; break;
} }
......
...@@ -327,7 +327,7 @@ static int check_refuse_options(char *ref, int opt) ...@@ -327,7 +327,7 @@ static int check_refuse_options(char *ref, int opt)
while ((p = strstr(ref,name))) { while ((p = strstr(ref,name))) {
if ((p==ref || p[-1]==' ') && if ((p==ref || p[-1]==' ') &&
(p[len] == ' ' || p[len] == 0)) { (p[len] == ' ' || p[len] == 0)) {
slprintf(err_buf,sizeof(err_buf), snprintf(err_buf,sizeof(err_buf),
"The '%s' option is not supported by this server\n", name); "The '%s' option is not supported by this server\n", name);
return 1; return 1;
} }
...@@ -418,7 +418,7 @@ int parse_arguments(int *argc, const char ***argv, int frommain) ...@@ -418,7 +418,7 @@ int parse_arguments(int *argc, const char ***argv, int frommain)
* rprintf? Everybody who gets this message * rprintf? Everybody who gets this message
* ought to send it to the client and also to * ought to send it to the client and also to
* the logs. */ * the logs. */
slprintf(err_buf,sizeof(err_buf), snprintf(err_buf,sizeof(err_buf),
"hard links are not supported on this %s\n", "hard links are not supported on this %s\n",
am_server ? "server" : "client"); am_server ? "server" : "client");
rprintf(FERROR,"ERROR: hard links not supported on this platform\n"); rprintf(FERROR,"ERROR: hard links not supported on this platform\n");
...@@ -471,7 +471,7 @@ int parse_arguments(int *argc, const char ***argv, int frommain) ...@@ -471,7 +471,7 @@ int parse_arguments(int *argc, const char ***argv, int frommain)
default: default:
/* FIXME: If --daemon is specified, then errors for later /* FIXME: If --daemon is specified, then errors for later
* parameters seem to disappear. */ * parameters seem to disappear. */
slprintf(err_buf, sizeof(err_buf), snprintf(err_buf, sizeof(err_buf),
"%s%s: %s\n", "%s%s: %s\n",
am_server ? "on remote machine: " : "", am_server ? "on remote machine: " : "",
poptBadOption(pc, POPT_BADOPTION_NOALIAS), poptBadOption(pc, POPT_BADOPTION_NOALIAS),
...@@ -568,22 +568,22 @@ void server_options(char **args,int *argc) ...@@ -568,22 +568,22 @@ void server_options(char **args,int *argc)
if (x != 1) args[ac++] = argstr; if (x != 1) args[ac++] = argstr;
if (block_size != BLOCK_SIZE) { if (block_size != BLOCK_SIZE) {
slprintf(bsize,sizeof(bsize),"-B%d",block_size); snprintf(bsize,sizeof(bsize),"-B%d",block_size);
args[ac++] = bsize; args[ac++] = bsize;
} }
if (max_delete && am_sender) { if (max_delete && am_sender) {
slprintf(mdelete,sizeof(mdelete),"--max-delete=%d",max_delete); snprintf(mdelete,sizeof(mdelete),"--max-delete=%d",max_delete);
args[ac++] = mdelete; args[ac++] = mdelete;
} }
if (io_timeout) { if (io_timeout) {
slprintf(iotime,sizeof(iotime),"--timeout=%d",io_timeout); snprintf(iotime,sizeof(iotime),"--timeout=%d",io_timeout);
args[ac++] = iotime; args[ac++] = iotime;
} }
if (bwlimit) { if (bwlimit) {
slprintf(bw,sizeof(bw),"--bwlimit=%d",bwlimit); snprintf(bw,sizeof(bw),"--bwlimit=%d",bwlimit);
args[ac++] = bw; args[ac++] = bw;
} }
...@@ -602,7 +602,7 @@ void server_options(char **args,int *argc) ...@@ -602,7 +602,7 @@ void server_options(char **args,int *argc)
args[ac++] = "--size-only"; args[ac++] = "--size-only";
if (modify_window_set) { if (modify_window_set) {
slprintf(mwindow,sizeof(mwindow),"--modify-window=%d", snprintf(mwindow,sizeof(mwindow),"--modify-window=%d",
modify_window); modify_window);
args[ac++] = mwindow; args[ac++] = mwindow;
} }
......
...@@ -179,7 +179,7 @@ static int get_tmpname(char *fnametmp, char *fname) ...@@ -179,7 +179,7 @@ static int get_tmpname(char *fnametmp, char *fname)
rprintf(FERROR,"filename too long\n"); rprintf(FERROR,"filename too long\n");
return 0; return 0;
} }
slprintf(fnametmp,MAXPATHLEN, "%s/.%s.XXXXXX",tmpdir,f); snprintf(fnametmp,MAXPATHLEN, "%s/.%s.XXXXXX",tmpdir,f);
return 1; return 1;
} }
...@@ -192,11 +192,11 @@ static int get_tmpname(char *fnametmp, char *fname) ...@@ -192,11 +192,11 @@ static int get_tmpname(char *fnametmp, char *fname)
if (f) { if (f) {
*f = 0; *f = 0;
slprintf(fnametmp,MAXPATHLEN,"%s/.%s.XXXXXX", snprintf(fnametmp,MAXPATHLEN,"%s/.%s.XXXXXX",
fname,f+1); fname,f+1);
*f = '/'; *f = '/';
} else { } else {
slprintf(fnametmp,MAXPATHLEN,".%s.XXXXXX",fname); snprintf(fnametmp,MAXPATHLEN,".%s.XXXXXX",fname);
} }
return 1; return 1;
...@@ -372,7 +372,7 @@ int recv_files(int f_in,struct file_list *flist,char *local_name,int f_gen) ...@@ -372,7 +372,7 @@ int recv_files(int f_in,struct file_list *flist,char *local_name,int f_gen)
if ((fd1 == -1) && (compare_dest != NULL)) { if ((fd1 == -1) && (compare_dest != NULL)) {
/* try the file at compare_dest instead */ /* try the file at compare_dest instead */
slprintf(fnamecmpbuf,MAXPATHLEN,"%s/%s", snprintf(fnamecmpbuf,MAXPATHLEN,"%s/%s",
compare_dest,fname); compare_dest,fname);
fnamecmp = fnamecmpbuf; fnamecmp = fnamecmpbuf;
fd1 = do_open(fnamecmp, O_RDONLY, 0); fd1 = do_open(fnamecmp, O_RDONLY, 0);
......
...@@ -91,7 +91,7 @@ int delete_file(char *fname) ...@@ -91,7 +91,7 @@ int delete_file(char *fname)
if (strcmp(dname,".")==0 || if (strcmp(dname,".")==0 ||
strcmp(dname,"..")==0) strcmp(dname,"..")==0)
continue; continue;
slprintf(buf, sizeof(buf), "%s/%s", fname, dname); snprintf(buf, sizeof(buf), "%s/%s", fname, dname);
if (verbose > 0) if (verbose > 0)
rprintf(FINFO,"deleting %s\n", buf); rprintf(FINFO,"deleting %s\n", buf);
if (delete_file(buf) != 0) { if (delete_file(buf) != 0) {
......
...@@ -32,7 +32,7 @@ static int establish_proxy_connection(int fd, char *host, int port) ...@@ -32,7 +32,7 @@ static int establish_proxy_connection(int fd, char *host, int port)
char buffer[1024]; char buffer[1024];
char *cp; char *cp;
slprintf(buffer, sizeof(buffer), "CONNECT %s:%d HTTP/1.0\r\n\r\n", host, port); snprintf(buffer, sizeof(buffer), "CONNECT %s:%d HTTP/1.0\r\n\r\n", host, port);
if (write(fd, buffer, strlen(buffer)) != strlen(buffer)) { if (write(fd, buffer, strlen(buffer)) != strlen(buffer)) {
rprintf(FERROR, "failed to write to proxy: %s\n", rprintf(FERROR, "failed to write to proxy: %s\n",
strerror(errno)); strerror(errno));
......
...@@ -558,10 +558,7 @@ void glob_expand(char *base1, char **argv, int *argc, int maxargs) ...@@ -558,10 +558,7 @@ void glob_expand(char *base1, char **argv, int *argc, int maxargs)
s = strdup(s); s = strdup(s);
if (!s) out_of_memory("glob_expand"); if (!s) out_of_memory("glob_expand");
base = (char *)malloc(strlen(base1)+3); if (asprintf(&base," %s/", base1) <= 0) out_of_memory("glob_expand");
if (!base) out_of_memory("glob_expand");
sprintf(base," %s/", base1);
q = s; q = s;
while ((p = strstr(q,base)) && ((*argc) < maxargs)) { while ((p = strstr(q,base)) && ((*argc) < maxargs)) {
...@@ -588,33 +585,6 @@ void strlower(char *s) ...@@ -588,33 +585,6 @@ void strlower(char *s)
} }
} }
/* this is like vsnprintf but it always null terminates, so you
can fit at most n-1 chars in */
int vslprintf(char *str, int n, const char *format, va_list ap)
{
int ret = vsnprintf(str, n, format, ap);
if (ret >= n || ret < 0) {
str[n-1] = 0;
return -1;
}
str[ret] = 0;
return ret;
}
/* like snprintf but always null terminates */
int slprintf(char *str, int n, char *format, ...)
{
va_list ap;
int ret;
va_start(ap, format);
ret = vslprintf(str,n,format,ap);
va_end(ap);
return ret;
}
void *Realloc(void *p, int size) void *Realloc(void *p, int size)
{ {
if (!p) return (void *)malloc(size); if (!p) return (void *)malloc(size);
...@@ -987,9 +957,9 @@ int _Insure_trap_error(int a1, int a2, int a3, int a4, int a5, int a6) ...@@ -987,9 +957,9 @@ int _Insure_trap_error(int a1, int a2, int a3, int a4, int a5, int a6)
{ {
static int (*fn)(); static int (*fn)();
int ret; int ret;
char cmd[1024]; char *cmd;
sprintf(cmd, "/usr/X11R6/bin/xterm -display :0 -T Panic -n Panic -e /bin/sh -c 'cat /tmp/ierrs.*.%d ; gdb /proc/%d/exe %d'", asprintf(&cmd, "/usr/X11R6/bin/xterm -display :0 -T Panic -n Panic -e /bin/sh -c 'cat /tmp/ierrs.*.%d ; gdb /proc/%d/exe %d'",
getpid(), getpid(), getpid()); getpid(), getpid(), getpid());
if (!fn) { if (!fn) {
...@@ -1002,6 +972,8 @@ int _Insure_trap_error(int a1, int a2, int a3, int a4, int a5, int a6) ...@@ -1002,6 +972,8 @@ int _Insure_trap_error(int a1, int a2, int a3, int a4, int a5, int a6)
system(cmd); system(cmd);
free(cmd);
return ret; return ret;
} }
#endif #endif
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment