diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/time/wcsftime.c | 32 | 
1 files changed, 32 insertions, 0 deletions
| diff --git a/src/time/wcsftime.c b/src/time/wcsftime.c new file mode 100644 index 00000000..7db76922 --- /dev/null +++ b/src/time/wcsftime.c @@ -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; +} + + | 
