X-Git-Url: https://mattmccutchen.net/rsync/rsync.git/blobdiff_plain/7842418b7b87c4c78ad8ad06fec44150c8aa0956..f8cd88dbd1ad9e86ea86b8f16cb5718a0af49bbb:/util.c diff --git a/util.c b/util.c index 8260897d..9bda946b 100644 --- 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);