da6c1f8a5e90f42b7ab2e10b8e1cdc11cd5f3088
[musl] / src / time / wcsftime.c
1 #include <wchar.h>
2 #include <time.h>
3 #include <string.h>
4
5 size_t wcsftime(wchar_t *restrict wcs, size_t n, const wchar_t *restrict f, const struct tm *restrict tm)
6 {
7         size_t k, n0=n;
8         char out[100], in[4];
9         while (*f) {
10                 if (!n) return 0;
11                 if (*f != '%') {
12                         *wcs++ = *f++;
13                         n--;
14                         continue;
15                 }
16                 in[2] = in[3] = 0;
17                 in[0] = *f++;
18                 if (strchr("EO", (in[1]=*f++)))
19                         in[2] = *f++;
20                 k = strftime(out, sizeof out, in, tm);
21                 if (!k) return 0;
22                 k = mbsrtowcs(wcs, (const char *[]){out}, n, 0);
23                 if (k==(size_t)-1) return 0;
24                 wcs += k;
25                 n -= k;
26         }
27         if (!n) return 0;
28         *wcs++ = 0;
29         return n0-n;
30 }
31
32