diff --git a/include/wchar.h b/include/wchar.h new file mode 100644 index 0000000..80dcd81 --- /dev/null +++ b/include/wchar.h @@ -0,0 +1,18 @@ +#ifndef __WCHAR_H +#define __WCHAR_H + +#include + +typedef u16 wchar_t; + +char *strcpy_wchar_to_char(char *dst, const wchar_t *src); + +wchar_t *strcpy_char_to_wchar(wchar_t *dst, const char *src); + +wchar_t *strdup_char_to_wchar(const char *src); + +char *strdup_wchar_to_char(const wchar_t *src); + +size_t wcslen(const wchar_t *s); + +#endif /* __WCHAR_H */ diff --git a/lib/Makefile b/lib/Makefile index e8769a9..48c953d 100644 --- a/lib/Makefile +++ b/lib/Makefile @@ -44,3 +44,4 @@ obj-$(CONFIG_XYMODEM) += xymodem.o obj-y += unlink-recursive.o obj-$(CONFIG_STMP_DEVICE) += stmp-device.o +obj-y += wchar.o diff --git a/lib/misc.c b/lib/misc.c index 9f2067c..87626c1 100644 --- a/lib/misc.c +++ b/lib/misc.c @@ -21,6 +21,7 @@ #include #include #include +#include #include /* diff --git a/lib/wchar.c b/lib/wchar.c new file mode 100644 index 0000000..6368a01 --- /dev/null +++ b/lib/wchar.c @@ -0,0 +1,80 @@ +/* + * wchar.c - wide character support + * + * Copyright (c) 2014 Sascha Hauer , Pengutronix + * + * See file CREDITS for list of people who contributed to this + * project. + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License version 2 + * as published by the Free Software Foundation. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + */ + +#include +#include +#include + +size_t wcslen(const wchar_t *s) +{ + size_t len = 0; + + while (*s++) + len++; + + return len; +} + +char *strcpy_wchar_to_char(char *dst, const wchar_t *src) +{ + char *ret = dst; + + while (*src) + *dst++ = *src++ & 0xff; + + *dst = 0; + + return ret; +} + +wchar_t *strcpy_char_to_wchar(wchar_t *dst, const char *src) +{ + wchar_t *ret = dst; + + while (*src) + *dst++ = *src++; + + *dst = 0; + + return ret; +} + +wchar_t *strdup_char_to_wchar(const char *src) +{ + wchar_t *dst = malloc((strlen(src) + 1) * sizeof(wchar_t)); + + if (!dst) + return NULL; + + strcpy_char_to_wchar(dst, src); + + return dst; +} + +char *strdup_wchar_to_char(const wchar_t *src) +{ + char *dst = malloc((wcslen(src) + 1)); + + if (!dst) + return NULL; + + strcpy_wchar_to_char(dst, src); + + return dst; +}