diff options
author | Eli Zaretskii <eliz@gnu.org> | 2016-03-06 18:27:16 +0200 |
---|---|---|
committer | Eli Zaretskii <eliz@gnu.org> | 2016-03-06 18:27:16 +0200 |
commit | b71c717f952d57995c54a2d276b10af87529dcd3 (patch) | |
tree | 5b5b2b54a44b84da52f732119c0ed174993395a6 | |
parent | cc057e43130780e566f4b901a59a88edb3f5130d (diff) | |
download | emacs-b71c717f952d57995c54a2d276b10af87529dcd3.tar.gz |
Make the code in movemail_strftime more general
* lib-src/movemail.c (movemail_strftime): Transform the format
string passed by the caller instead of using a separate format
string.
-rw-r--r-- | lib-src/movemail.c | 29 |
1 files changed, 28 insertions, 1 deletions
diff --git a/lib-src/movemail.c b/lib-src/movemail.c index 873d85dfd77..fa4c0294955 100644 --- a/lib-src/movemail.c +++ b/lib-src/movemail.c @@ -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 = ' '; |