]> code.delx.au - gnu-emacs/commitdiff
Make the code in movemail_strftime more general
authorEli Zaretskii <eliz@gnu.org>
Sun, 6 Mar 2016 16:27:16 +0000 (18:27 +0200)
committerEli Zaretskii <eliz@gnu.org>
Sun, 6 Mar 2016 16:27:16 +0000 (18:27 +0200)
* lib-src/movemail.c (movemail_strftime): Transform the format
string passed by the caller instead of using a separate format
string.

lib-src/movemail.c

index 873d85dfd77dbce81c036c2c6280b95693eeffea..fa4c0294955c07a20876767c0d51e5618a1bfe66 100644 (file)
@@ -807,7 +807,34 @@ static size_t
 movemail_strftime (char *s, size_t size, char const *format,
                   struct tm const *tm)
 {
-  size_t n = strftime (s, size, "From movemail %a %b %d %H:%M:%S %Y\n", tm);
+  char fmt[size + 6], *q;
+  const char *p;
+
+  for (p = format, q = &fmt[0]; *p; )
+    {
+      if (*p == '%' && p[1] == 'e')
+       {
+         memcpy (q, "%d", 2);
+         q += 2;
+         p += 2;
+       }
+      else if (*p == '%' && p[1] == 'T')
+       {
+         memcpy (q, "%H:%M:%S", 8);
+         q += 8;
+         p += 2;
+       }
+      else if (*p == '%' && p[1] == '%')
+       {
+         memcpy (q, p, 2);
+         q += 2;
+         p += 2;
+       }
+      else
+       *q++ = *p++;
+    }
+
+  size_t n = strftime (s, size, fmt, tm);
   char *mday = s + sizeof "From movemail Sun Jan " - 1;
   if (*mday == '0')
     *mday = ' ';