changeset 5711:ea764738a776

(my_strftime): Prepend space to format so that we can reliably distinguish strftime failure from empty output on POSIX hosts.
author Paul Eggert <eggert@cs.ucla.edu>
date Wed, 16 Mar 2005 01:02:49 +0000
parents 6f94ca68f800
children 949b55c4668c
files lib/strftime.c
diffstat 1 files changed, 7 insertions(+), 5 deletions(-) [+]
line wrap: on
line diff
--- 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