summaryrefslogtreecommitdiff
path: root/src/date.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/date.c')
-rw-r--r--src/date.c18
1 files changed, 13 insertions, 5 deletions
diff --git a/src/date.c b/src/date.c
index 3e75899d1..380c749fa 100644
--- a/src/date.c
+++ b/src/date.c
@@ -488,11 +488,9 @@ show_date (const char *format, time_t when)
return;
}
- if (rfc_format)
- setlocale (LC_TIME, "C");
-
- do
+ while (1)
{
+ int done;
out_length += 200;
out = (char *) xrealloc (out, out_length);
@@ -501,8 +499,18 @@ show_date (const char *format, time_t when)
would not terminate when date was invoked like this
`LANG=de date +%p' on a system with good language support. */
out[0] = '\1';
+
+ if (rfc_format)
+ setlocale (LC_ALL, "C");
+
+ done = (strftime (out, out_length, format, tm) || out[0] == '\0');
+
+ if (rfc_format)
+ setlocale (LC_ALL, "");
+
+ if (done)
+ break;
}
- while (strftime (out, out_length, format, tm) == 0 && out[0] != '\0');
printf ("%s\n", out);
free (out);