summaryrefslogtreecommitdiff
path: root/src/wchar
diff options
context:
space:
mode:
Diffstat (limited to 'src/wchar')
-rw-r--r--src/wchar/vfwprintf.c20
-rw-r--r--src/wchar/vfwscanf.c7
-rw-r--r--src/wchar/vswscanf.c7
-rw-r--r--src/wchar/wcstof.c2
-rw-r--r--src/wchar/wcstold.c2
-rw-r--r--src/wchar/wmemmove.c23
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;
}