If a --delay-update can't use the partial-dir (e.g. if a server
[rsync/rsync.git] / util.c
diff --git a/util.c b/util.c
index 8260897..9bda946 100644 (file)
--- a/util.c
+++ b/util.c
@@ -105,9 +105,9 @@ void print_child_argv(char **cmd)
                           "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
                           "0123456789"
                           ",.-_=+@/") != strlen(*cmd)) {
-                       rprintf(FINFO, "\"%s\" ", *cmd);
+                       rprintf(FINFO, "\"%s\" ", safe_fname(*cmd));
                } else {
-                       rprintf(FINFO, "%s ", *cmd);
+                       rprintf(FINFO, "%s ", safe_fname(*cmd));
                }
        }
        rprintf(FINFO, "\n");
@@ -132,7 +132,7 @@ int set_modtime(char *fname, time_t modtime)
 {
        if (verbose > 2) {
                rprintf(FINFO, "set modtime of %s to (%ld) %s",
-                       fname, (long)modtime,
+                       safe_fname(fname), (long)modtime,
                        asctime(localtime(&modtime)));
        }
 
@@ -140,12 +140,12 @@ int set_modtime(char *fname, time_t modtime)
                return 0;
 
        {
-#ifdef HAVE_UTIMBUF
+#if HAVE_UTIMBUF
                struct utimbuf tbuf;
                tbuf.actime = time(NULL);
                tbuf.modtime = modtime;
                return utime(fname,&tbuf);
-#elif defined(HAVE_UTIME)
+#elif HAVE_UTIME
                time_t t[2];
                t[0] = time(NULL);
                t[1] = modtime;
@@ -350,7 +350,7 @@ int robust_unlink(char *fname)
 
        if (verbose > 0) {
                rprintf(FINFO,"renaming %s to %s because of text busy\n",
-                       fname, path);
+                       safe_fname(fname), safe_fname(path));
        }
 
        /* maybe we should return rename()'s exit status? Nah. */
@@ -502,7 +502,7 @@ static void glob_expand_one(char *s, char ***argv_ptr, int *argc_ptr,
        char **argv = *argv_ptr;
        int argc = *argc_ptr;
        int maxargs = *maxargs_ptr;
-#if !(defined(HAVE_GLOB) && defined(HAVE_GLOB_H))
+#if !(HAVE_GLOB && HAVE_GLOB_H)
        if (argc == maxargs) {
                maxargs += MAX_ARGS;
                if (!(argv = realloc_array(argv, char *, maxargs)))
@@ -883,21 +883,24 @@ int pop_dir(char *dir)
  **/
 const char *safe_fname(const char *fname)
 {
-       static char fbuf1[MAXPATHLEN], fbuf2[MAXPATHLEN];
-       static char *fbuf = fbuf2;
-       char *nl = strchr(fname, '\n');
-
-       if (!nl)
-               return fname;
-
-       fbuf = fbuf == fbuf1 ? fbuf2 : fbuf1;
-       strlcpy(fbuf, fname, MAXPATHLEN);
-       nl = fbuf + (nl - (char *)fname);
-       do {
-               *nl = '?';
-       } while ((nl = strchr(nl+1, '\n')) != NULL);
+#define MAX_SAFE_NAMES 4
+       static char fbuf[MAX_SAFE_NAMES][MAXPATHLEN*2];
+       static int ndx = 0;
+       int limit = sizeof fbuf / MAX_SAFE_NAMES - 1;
+       char *t;
+
+       ndx = (ndx + 1) % MAX_SAFE_NAMES;
+       for (t = fbuf[ndx]; *fname; fname++) {
+               if (!isprint(*fname))
+                       *t++ = '?';
+               else
+                       *t++ = *fname;
+               if (--limit == 0)
+                       break;
+       }
+       *t = '\0';
 
-       return fbuf;
+       return fbuf[ndx];
 }
 
 /**
@@ -1094,7 +1097,7 @@ char *timestring(time_t t)
        static char TimeBuf[200];
        struct tm *tm = localtime(&t);
 
-#ifdef HAVE_STRFTIME
+#if HAVE_STRFTIME
        strftime(TimeBuf, sizeof TimeBuf - 1, "%Y/%m/%d %H:%M:%S", tm);
 #else
        strlcpy(TimeBuf, asctime(tm), sizeof TimeBuf);