diff options
Diffstat (limited to 'src/wchar')
| -rw-r--r-- | src/wchar/vfwprintf.c | 20 | ||||
| -rw-r--r-- | src/wchar/vfwscanf.c | 7 | ||||
| -rw-r--r-- | src/wchar/vswscanf.c | 7 | ||||
| -rw-r--r-- | src/wchar/wcstof.c | 2 | ||||
| -rw-r--r-- | src/wchar/wcstold.c | 2 | ||||
| -rw-r--r-- | src/wchar/wmemmove.c | 23 |
6 files changed, 44 insertions, 17 deletions
diff --git a/src/wchar/vfwprintf.c b/src/wchar/vfwprintf.c index fbff917f..df9ab381 100644 --- a/src/wchar/vfwprintf.c +++ b/src/wchar/vfwprintf.c @@ -2,22 +2,16 @@ #include "stdio.h" #include "stdarg.h" #include "stdlib.h" +#include "nonstd/io.h" int vfwprintf(FILE * restrict stream, const wchar_t * restrict format, va_list arg) { - /* - va_list ap; - va_copy(ap, arg); - int len = vsnwprintf(NULL, 0, format, arg); - wchar_t *buf = malloc((len + 1) * sizeof(wchar_t)); - len = vsnwprintf(buf, len, format, ap); - va_end(ap); - len = (int)fwrite(buf, sizeof(*buf), len, stream); - free(buf); - return len; - */ - (void)stream; (void)format; (void)arg; - return 0; + int ret = 0; + struct io_options opt = {0}; + opt.fnname = "vfwprintf"; + opt.stream = stream; + ret = __printf(&opt, (const char*)format, arg); + return ret; } /* diff --git a/src/wchar/vfwscanf.c b/src/wchar/vfwscanf.c index 75451ac6..d2e90c5f 100644 --- a/src/wchar/vfwscanf.c +++ b/src/wchar/vfwscanf.c @@ -1,8 +1,15 @@ #include "stdio.h" #include <wchar.h> +#include "nonstd/io.h" int vfwscanf(FILE * restrict stream, const wchar_t * restrict format, va_list arg) { + int ret = 0; + struct io_options opt = {0}; + opt.fnname = __func__; + opt.stream = stream; + ret = __scanf(&opt, (const char*)format, arg); + return ret; } /* diff --git a/src/wchar/vswscanf.c b/src/wchar/vswscanf.c index b0896b75..b0f1271a 100644 --- a/src/wchar/vswscanf.c +++ b/src/wchar/vswscanf.c @@ -1,7 +1,14 @@ #include <wchar.h> +#include "nonstd/io.h" int vswscanf(const wchar_t * restrict s, const wchar_t * restrict format, va_list arg) { + int ret = 0; + struct io_options opt = {0}; + opt.fnname = __func__; + opt.string = (char*)s; + ret = __scanf(&opt, (const char*)format, arg); + return ret; } /* diff --git a/src/wchar/wcstof.c b/src/wchar/wcstof.c index c9de199b..75aafbbf 100644 --- a/src/wchar/wcstof.c +++ b/src/wchar/wcstof.c @@ -2,6 +2,8 @@ float wcstof(const wchar_t * restrict nptr, wchar_t ** restrict endptr) { + (void)nptr; (void)endptr; + return 0; } /* diff --git a/src/wchar/wcstold.c b/src/wchar/wcstold.c index 32001008..b105606f 100644 --- a/src/wchar/wcstold.c +++ b/src/wchar/wcstold.c @@ -2,6 +2,8 @@ long double wcstold(const wchar_t * restrict nptr, wchar_t ** restrict endptr) { + (void)nptr; (void)endptr; + return 0; } /* diff --git a/src/wchar/wmemmove.c b/src/wchar/wmemmove.c index 11fd35dc..75b58f87 100644 --- a/src/wchar/wmemmove.c +++ b/src/wchar/wmemmove.c @@ -1,12 +1,27 @@ #include <wchar.h> #include "stdlib.h" +#include "nonstd/assert.h" wchar_t * wmemmove(wchar_t * s1, const wchar_t * s2, size_t n) { - wchar_t *tmp = malloc(n * sizeof(wchar_t)); - wmemcpy(tmp, s2, n); - wmemcpy(s1, tmp, n); - free(tmp); + ASSERT_NONNULL(s1); + ASSERT_NONNULL(s2); + + if (s1 < s2) { + return wmemcpy(s1, s2, n); + } + + /* reverse memcpy() */ + while (n > 0) { + s1[n] = s2[n]; + n--; + } + /* last byte */ + s1[n] = s2[n]; + + /* + RETURN_ALWAYS(ARGUMENT(s1)); + */ return s1; } |
