Enhance log_format_has() to understand the "'" modifier.
[rsync/rsync.git] / log.c
diff --git a/log.c b/log.c
index 0aa5b25..889a318 100644 (file)
--- a/log.c
+++ b/log.c
@@ -359,7 +359,7 @@ output_msg:
                INIT_XBUF(inbuf, (char*)buf, len, (size_t)-1);
 
                while (inbuf.len) {
-                       iconvbufs(ic, &inbuf, &outbuf, 0);
+                       iconvbufs(ic, &inbuf, &outbuf, inbuf.pos ? 0 : ICB_INIT);
                        ierrno = errno;
                        if (outbuf.len) {
                                filtered_fwrite(f, convbuf, outbuf.len, 0);
@@ -785,10 +785,12 @@ int log_format_has(const char *format, char esc)
                return 0;
 
        for (p = format; (p = strchr(p, '%')) != NULL; ) {
-               if (*++p == '-')
+               for (p++; *p == '\''; p++) {}
+               if (*p == '-')
                        p++;
                while (isDigit(p))
                        p++;
+               while (*p == '\'') p++;
                if (!*p)
                        break;
                if (*p == esc)