From ef38266d2b0f567219bd9358cd4c2bfc931b8c52 Mon Sep 17 00:00:00 2001 From: Paul Eggert Date: Wed, 16 Mar 2005 01:02:49 +0000 Subject: [PATCH] (my_strftime): Prepend space to format so that we can reliably distinguish strftime failure from empty output on POSIX hosts. --- lib/strftime.c | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/lib/strftime.c b/lib/strftime.c index 78a963b421..3be18a2b63 100644 --- a/lib/strftime.c +++ b/lib/strftime.c @@ -386,7 +386,7 @@ static CHAR_T const month_name[][10] = (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 @@ my_strftime (CHAR_T *s, size_t maxsize, const CHAR_T *format, { /* 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 @@ my_strftime (CHAR_T *s, size_t maxsize, const CHAR_T *format, 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 -- 2.30.2