implement wcsftime function
authorRich Felker <dalias@aerifal.cx>
Tue, 28 Feb 2012 20:59:01 +0000 (15:59 -0500)
committerRich Felker <dalias@aerifal.cx>
Tue, 28 Feb 2012 20:59:01 +0000 (15:59 -0500)
src/time/wcsftime.c [new file with mode: 0644]

diff --git a/src/time/wcsftime.c b/src/time/wcsftime.c
new file mode 100644 (file)
index 0000000..7db7692
--- /dev/null
@@ -0,0 +1,32 @@
+#include <wchar.h>
+#include <time.h>
+#include <string.h>
+
+size_t wcsftime(wchar_t *wcs, size_t n, const wchar_t *f, const struct tm *tm)
+{
+       size_t k, n0=n;
+       char out[100], in[4];
+       while (*f) {
+               if (!n) return 0;
+               if (*f != '%') {
+                       *wcs++ = *f++;
+                       n--;
+                       continue;
+               }
+               in[2] = in[3] = 0;
+               in[0] = *f++;
+               if (strchr("EO", (in[1]=*f++)))
+                       in[2] = *f++;
+               k = strftime(out, sizeof out, in, tm);
+               if (!k) return 0;
+               k = mbsrtowcs(wcs, (const char *[]){out}, n, 0);
+               if (k==(size_t)-1) return 0;
+               wcs += k;
+               n -= k;
+       }
+       if (!n) return 0;
+       *wcs++ = 0;
+       return n0-n;
+}
+
+