Commit f8cd88db authored by Wayne Davison's avatar Wayne Davison

- Added more calls to safe_fname().

- Improved safe_fname() so that it changes all non-printable chars
  into '?'s, and accomodates more simultaneous (and longer) names.
parent 71903f60
...@@ -105,9 +105,9 @@ void print_child_argv(char **cmd) ...@@ -105,9 +105,9 @@ void print_child_argv(char **cmd)
"ABCDEFGHIJKLMNOPQRSTUVWXYZ" "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
"0123456789" "0123456789"
",.-_=+@/") != strlen(*cmd)) { ",.-_=+@/") != strlen(*cmd)) {
rprintf(FINFO, "\"%s\" ", *cmd); rprintf(FINFO, "\"%s\" ", safe_fname(*cmd));
} else { } else {
rprintf(FINFO, "%s ", *cmd); rprintf(FINFO, "%s ", safe_fname(*cmd));
} }
} }
rprintf(FINFO, "\n"); rprintf(FINFO, "\n");
...@@ -132,7 +132,7 @@ int set_modtime(char *fname, time_t modtime) ...@@ -132,7 +132,7 @@ int set_modtime(char *fname, time_t modtime)
{ {
if (verbose > 2) { if (verbose > 2) {
rprintf(FINFO, "set modtime of %s to (%ld) %s", rprintf(FINFO, "set modtime of %s to (%ld) %s",
fname, (long)modtime, safe_fname(fname), (long)modtime,
asctime(localtime(&modtime))); asctime(localtime(&modtime)));
} }
...@@ -350,7 +350,7 @@ int robust_unlink(char *fname) ...@@ -350,7 +350,7 @@ int robust_unlink(char *fname)
if (verbose > 0) { if (verbose > 0) {
rprintf(FINFO,"renaming %s to %s because of text busy\n", 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. */ /* maybe we should return rename()'s exit status? Nah. */
...@@ -883,21 +883,24 @@ int pop_dir(char *dir) ...@@ -883,21 +883,24 @@ int pop_dir(char *dir)
**/ **/
const char *safe_fname(const char *fname) const char *safe_fname(const char *fname)
{ {
static char fbuf1[MAXPATHLEN], fbuf2[MAXPATHLEN]; #define MAX_SAFE_NAMES 4
static char *fbuf = fbuf2; static char fbuf[MAX_SAFE_NAMES][MAXPATHLEN*2];
char *nl = strchr(fname, '\n'); static int ndx = 0;
int limit = sizeof fbuf / MAX_SAFE_NAMES - 1;
if (!nl) char *t;
return fname;
ndx = (ndx + 1) % MAX_SAFE_NAMES;
fbuf = fbuf == fbuf1 ? fbuf2 : fbuf1; for (t = fbuf[ndx]; *fname; fname++) {
strlcpy(fbuf, fname, MAXPATHLEN); if (!isprint(*fname))
nl = fbuf + (nl - (char *)fname); *t++ = '?';
do { else
*nl = '?'; *t++ = *fname;
} while ((nl = strchr(nl+1, '\n')) != NULL); if (--limit == 0)
break;
}
*t = '\0';
return fbuf; return fbuf[ndx];
} }
/** /**
......
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