Got rid of type-casting into isFOO() and toFOO() functions by
[rsync/rsync.git] / log.c
diff --git a/log.c b/log.c
index 20132c3..f7ccc00 100644 (file)
--- a/log.c
+++ b/log.c
@@ -49,6 +49,8 @@ extern char *logfile_name;
 #if defined HAVE_ICONV_OPEN && defined HAVE_ICONV_H
 extern iconv_t ic_chck;
 #endif
+extern char curr_dir[];
+extern unsigned int module_dirlen;
 
 static int log_initialised;
 static int logfile_was_closed;
@@ -88,7 +90,6 @@ struct {
        { 0, NULL }
 };
 
-
 /*
  * Map from rsync error code to name, or return NULL.
  */
@@ -213,11 +214,11 @@ static void filtered_fwrite(FILE *f, const char *buf, int len, int use_isprint)
        for (s = buf; s < end; s++) {
                if ((s < end - 4
                  && *s == '\\' && s[1] == '#'
-                 && isdigit(*(uchar*)(s+2))
-                 && isdigit(*(uchar*)(s+3))
-                 && isdigit(*(uchar*)(s+4)))
+                 && isDigit(s + 2)
+                 && isDigit(s + 3)
+                 && isDigit(s + 4))
                 || (*s != '\t'
-                 && ((use_isprint && !isprint(*(uchar*)s))
+                 && ((use_isprint && !isPrint(s))
                   || *(uchar*)s < ' '))) {
                        if (s != buf && fwrite(buf, s - buf, 1, f) != 1)
                                exit_cleanup(RERR_MESSAGEIO);
@@ -384,7 +385,7 @@ void rsyserr(enum logcode code, int errcode, const char *format, ...)
        char buf[BIGPATHBUFLEN];
        size_t len;
 
-       strcpy(buf, RSYNC_NAME ": ");
+       strlcpy(buf, RSYNC_NAME ": ", sizeof buf);
        len = (sizeof RSYNC_NAME ": ") - 1;
 
        va_start(ap, format);
@@ -444,7 +445,7 @@ static void log_formatted(enum logcode code, char *format, char *op,
                n = fmt + 1;
                if (*p == '-')
                        *n++ = *p++;
-               while (isdigit(*(uchar*)p) && n - fmt < (int)(sizeof fmt) - 8)
+               while (isDigit(p) && n - fmt < (int)(sizeof fmt) - 8)
                        *n++ = *p++;
                if (!*p)
                        break;
@@ -513,6 +514,14 @@ static void log_formatted(enum logcode code, char *format, char *op,
                                        strlcpy(n, buf2, MAXPATHLEN);
                                else
                                        n = buf2;
+                       } else if (*n != '/') {
+                               pathjoin(buf2, sizeof buf2,
+                                        curr_dir + module_dirlen, n);
+                               clean_fname(buf2, 0);
+                               if (fmt[1])
+                                       strlcpy(n, buf2, MAXPATHLEN);
+                               else
+                                       n = buf2;
                        } else
                                clean_fname(n, 0);
                        if (*n == '/')
@@ -526,15 +535,15 @@ static void log_formatted(enum logcode code, char *format, char *op,
                case 'L':
                        if (hlink && *hlink) {
                                n = hlink;
-                               strcpy(buf2, " => ");
+                               strlcpy(buf2, " => ", sizeof buf2);
                        } else if (S_ISLNK(file->mode) && file->u.link) {
                                n = file->u.link;
-                               strcpy(buf2, " -> ");
+                               strlcpy(buf2, " -> ", sizeof buf2);
                        } else {
                                n = "";
                                if (!fmt[1])
                                        break;
-                               strcpy(buf2, "    ");
+                               strlcpy(buf2, "    ", sizeof buf2);
                        }
                        strlcat(fmt, "s", sizeof fmt);
                        snprintf(buf2 + 4, sizeof buf2 - 4, fmt, n);
@@ -668,7 +677,7 @@ int log_format_has(const char *format, char esc)
        for (p = format; (p = strchr(p, '%')) != NULL; ) {
                if (*++p == '-')
                        p++;
-               while (isdigit(*(uchar*)p))
+               while (isDigit(p))
                        p++;
                if (!*p)
                        break;