# HG changeset patch # User Paul Eggert # Date 1110934969 0 # Node ID ea764738a776774f4438bb58632bfb8214a0ae86 # Parent 6f94ca68f80033fd4e427d928110b151b328b6ae (my_strftime): Prepend space to format so that we can reliably distinguish strftime failure from empty output on POSIX hosts. diff --git a/lib/strftime.c b/lib/strftime.c --- a/lib/strftime.c +++ b/lib/strftime.c @@ -386,7 +386,7 @@ (including the terminating '\0') and returning number of characters written. If S is NULL, nothing will be written anywhere, so to determine how many characters would be - written, use NULL for S and (size_t) UINT_MAX for MAXSIZE. */ + written, use NULL for S and (size_t) -1 for MAXSIZE. */ size_t my_strftime (CHAR_T *s, size_t maxsize, const CHAR_T *format, const struct tm *tp extra_args_spec LOCALE_PARAM_PROTO) @@ -759,7 +759,7 @@ { /* The relevant information is available only via the underlying strftime implementation, so use that. */ - char ufmt[4]; + char ufmt[5]; char *u = ufmt; char ubuf[1024]; /* enough for any single format in practice */ size_t len; @@ -771,16 +771,18 @@ size_t strftime (); # endif + /* The space helps distinguish strftime failure from empty + output. */ + *u++ = ' '; *u++ = '%'; if (modifier != 0) *u++ = modifier; *u++ = format_char; *u = '\0'; - ubuf[0] = '\1'; len = strftime (ubuf, sizeof ubuf, ufmt, tp); - if (len == 0 && ubuf[0] != '\0') + if (len == 0) return 0; - cpy (len, ubuf); + cpy (len - 1, ubuf + 1); } break; #endif