strbuf: let strbuf_addftime handle %z and %Z itself
There is no portable way to pass timezone information to strftime. Add parameters for timezone offset and name to strbuf_addftime and let it handle the timezone-related format specifiers %z and %Z internally. Callers can opt out for %Z by passing NULL as timezone name. %z is always handled internally -- this helps on Windows, where strftime would expand it to a timezone name (same as %Z), in violation of POSIX. Modifiers are not handled, e.g. %Ez is still passed to strftime. Use an empty string as timezone name in show_date (the only current caller) for now because we only have the timezone offset in non-local mode. POSIX allows %Z to resolve to an empty string in case of missing information. Helped-by: Ulrich Mueller <ulm@gentoo.org> Helped-by: Jeff King <peff@peff.net> Signed-off-by: Rene Scharfe <l.s.r@web.de> Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:

committed by
Junio C Hamano

parent
b06d364310
commit
c3fbf81a85
8
strbuf.h
8
strbuf.h
@ -340,8 +340,14 @@ extern void strbuf_vaddf(struct strbuf *sb, const char *fmt, va_list ap);
|
||||
|
||||
/**
|
||||
* Add the time specified by `tm`, as formatted by `strftime`.
|
||||
* `tz_name` is used to expand %Z internally unless it's NULL.
|
||||
* `tz_offset` is in decimal hhmm format, e.g. -600 means six hours west
|
||||
* of Greenwich, and it's used to expand %z internally. However, tokens
|
||||
* with modifiers (e.g. %Ez) are passed to `strftime`.
|
||||
*/
|
||||
extern void strbuf_addftime(struct strbuf *sb, const char *fmt, const struct tm *tm);
|
||||
extern void strbuf_addftime(struct strbuf *sb, const char *fmt,
|
||||
const struct tm *tm, int tz_offset,
|
||||
const char *tz_name);
|
||||
|
||||
/**
|
||||
* Read a given size of data from a FILE* pointer to the buffer.
|
||||
|
Reference in New Issue
Block a user