[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[tyndur-devel] [PATCH 3/3] libc: Ein paar wchar.h-Stringfunktionen
+ libc: Ein paar Stringfunktionen in der wchar.h aus freebsd portiert
+ libc: Noch ein bisschen wctype.h damit die BSD-Funktionen kompilieren
Signed-off-by: Antoine Kaufmann <toni@xxxxxxxxxx>
---
src/include/wctype.h | 46 +++
src/modules/include/wchar.h | 422 +++++++++++++++++++++++++
src/modules/lib/stdlibc/wstring/wcpcpy.c | 55 ++++
src/modules/lib/stdlibc/wstring/wcpncpy.c | 60 ++++
src/modules/lib/stdlibc/wstring/wcscasecmp.c | 59 ++++
src/modules/lib/stdlibc/wstring/wcscat.c | 57 ++++
src/modules/lib/stdlibc/wstring/wcschr.c | 53 +++
src/modules/lib/stdlibc/wstring/wcscmp.c | 57 ++++
src/modules/lib/stdlibc/wstring/wcscoll.c | 37 +++
src/modules/lib/stdlibc/wstring/wcscpy.c | 55 ++++
src/modules/lib/stdlibc/wstring/wcscspn.c | 64 ++++
src/modules/lib/stdlibc/wstring/wcsdup.c | 52 +++
src/modules/lib/stdlibc/wstring/wcslcat.c | 74 +++++
src/modules/lib/stdlibc/wstring/wcslcpy.c | 72 +++++
src/modules/lib/stdlibc/wstring/wcslen.c | 53 +++
src/modules/lib/stdlibc/wstring/wcsncasecmp.c | 70 ++++
src/modules/lib/stdlibc/wstring/wcsncat.c | 68 ++++
src/modules/lib/stdlibc/wstring/wcsncmp.c | 67 ++++
src/modules/lib/stdlibc/wstring/wcsncpy.c | 70 ++++
src/modules/lib/stdlibc/wstring/wcsnlen.c | 53 +++
src/modules/lib/stdlibc/wstring/wcspbrk.c | 64 ++++
src/modules/lib/stdlibc/wstring/wcsrchr.c | 60 ++++
src/modules/lib/stdlibc/wstring/wcsspn.c | 67 ++++
src/modules/lib/stdlibc/wstring/wcsstr.c | 66 ++++
src/modules/lib/stdlibc/wstring/wcstok.c | 108 +++++++
src/modules/lib/stdlibc/wstring/wmemchr.c | 59 ++++
src/modules/lib/stdlibc/wstring/wmemcmp.c | 62 ++++
src/modules/lib/stdlibc/wstring/wmemcpy.c | 50 +++
src/modules/lib/stdlibc/wstring/wmemmove.c | 49 +++
src/modules/lib/stdlibc/wstring/wmemset.c | 56 ++++
30 files changed, 2185 insertions(+), 0 deletions(-)
create mode 100644 src/modules/lib/stdlibc/wstring/wcpcpy.c
create mode 100644 src/modules/lib/stdlibc/wstring/wcpncpy.c
create mode 100644 src/modules/lib/stdlibc/wstring/wcscasecmp.c
create mode 100644 src/modules/lib/stdlibc/wstring/wcscat.c
create mode 100644 src/modules/lib/stdlibc/wstring/wcschr.c
create mode 100644 src/modules/lib/stdlibc/wstring/wcscmp.c
create mode 100644 src/modules/lib/stdlibc/wstring/wcscoll.c
create mode 100644 src/modules/lib/stdlibc/wstring/wcscpy.c
create mode 100644 src/modules/lib/stdlibc/wstring/wcscspn.c
create mode 100644 src/modules/lib/stdlibc/wstring/wcsdup.c
create mode 100644 src/modules/lib/stdlibc/wstring/wcslcat.c
create mode 100644 src/modules/lib/stdlibc/wstring/wcslcpy.c
create mode 100644 src/modules/lib/stdlibc/wstring/wcslen.c
create mode 100644 src/modules/lib/stdlibc/wstring/wcsncasecmp.c
create mode 100644 src/modules/lib/stdlibc/wstring/wcsncat.c
create mode 100644 src/modules/lib/stdlibc/wstring/wcsncmp.c
create mode 100644 src/modules/lib/stdlibc/wstring/wcsncpy.c
create mode 100644 src/modules/lib/stdlibc/wstring/wcsnlen.c
create mode 100644 src/modules/lib/stdlibc/wstring/wcspbrk.c
create mode 100644 src/modules/lib/stdlibc/wstring/wcsrchr.c
create mode 100644 src/modules/lib/stdlibc/wstring/wcsspn.c
create mode 100644 src/modules/lib/stdlibc/wstring/wcsstr.c
create mode 100644 src/modules/lib/stdlibc/wstring/wcstok.c
create mode 100644 src/modules/lib/stdlibc/wstring/wmemchr.c
create mode 100644 src/modules/lib/stdlibc/wstring/wmemcmp.c
create mode 100644 src/modules/lib/stdlibc/wstring/wmemcpy.c
create mode 100644 src/modules/lib/stdlibc/wstring/wmemmove.c
create mode 100644 src/modules/lib/stdlibc/wstring/wmemset.c
diff --git a/src/include/wctype.h b/src/include/wctype.h
index e69de29..8f21b94 100644
--- a/src/include/wctype.h
+++ b/src/include/wctype.h
@@ -0,0 +1,46 @@
+/*
+ * Copyright (c) 2009 The tyndur Project. All rights reserved.
+ *
+ * This code is derived from software contributed to the tyndur Project
+ * by Antoine Kaufmann.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
+ * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
+ * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+ * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
+ * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
+ * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#ifndef _WCTYPE_H_
+#define _WCTYPE_H_
+
+#define iswupper(c) ((c) >= L'A' && (c) <= L'Z')
+#define iswlower(c) ((c) >= L'a' && (c) <= L'z')
+
+static inline wint_t towlower(wint_t c)
+{
+ return iswupper(c) ? c + (L'a' - L'A') : c;
+}
+
+static inline wint_t towupper(wint_t c)
+{
+ return iswlower(c) ? c - (L'a' - L'A') : c;
+}
+
+#endif /* ndef WCTYPE_H */
+
diff --git a/src/modules/include/wchar.h b/src/modules/include/wchar.h
index 6ed1d51..d664741 100644
--- a/src/modules/include/wchar.h
+++ b/src/modules/include/wchar.h
@@ -87,6 +87,428 @@ int wcwidth(wchar_t wc);
int wcswidth(const wchar_t* wcs, size_t len);
+/**
+ * Einen String aus breiten Zeichen kopieren, das ist das Pendant zu stpcpy. Die
+ * beiden Strings duerfen sich nicht ueberlappen. Das abschliessende L'0' wird
+ * mitkopiert.
+ *
+ * @see stpcpy
+ * @see wcscpy
+ * @see wcpncpy
+ * @param dst Zeiger auf die Speicherstelle in die der Kopiertestring abgelegt
+ * werden soll. Dabei muss vom Aufrufer sichergestellt werden, dass
+ * dort mindestens speicher fuer wcslen(src) + 1 breite Zeichen ist.
+ * @param src
+ *
+ * @return Zeiger auf das Ende (L'0') des Zielstrings.
+ */
+wchar_t* wcpcpy(wchar_t* dst, const wchar_t* src);
+
+/**
+ * String aus breiten Zeichen kopieren. Dabei werden hoechstens len Zeichen
+ * kopiert. Sind in src weniger als len Zeichen wird dst mit L'\0' aufgefuellt.
+ * Ist src laenger als oder gleich lang wie len wird der String in dst nich
+ * nullterminiert, der Rueckgabewert zeigt also nich auf ein L'\0'. Die beiden
+ * Speicherbereiche duerfen sich nicht ueberlappen. Diese Funktion ist das
+ * Pendant zu strncpy.
+ *
+ * @see strncpy
+ * @see wcpncpy
+ * @param dst Zeiger auf den Speicherbereich der len breite Zeichen aufnehmen
+ * kann. Es werden genau len Zeichen hineingeschrieben.
+ * @param src Quellstring
+ * @param len Anzahl der Zeichen, die in dst geschrieben werden sollen.
+ *
+ * @return Zeiger auf das letzte geschriebene Byte, also immer dst + len - 1
+ */
+wchar_t* wcpncpy(wchar_t* dst, const wchar_t* src, size_t len);
+
+/**
+ * Zwei Strings aus breiten Zeichen ohne Unterscheidung von
+ * Gross-/Kleinschreibung vergleichen inklusive abschliessendes L'\0'. Diese
+ * Funktion ist das Pendant zu strcasecmp.
+ *
+ * @see strcasecmp
+ * @see wcscmp
+ * @see towlower
+ * @param wcs1 Erster String
+ * @param wcs2 Zweiter String
+ *
+ * @return 0 wenn die Strings gleich sind, oder <0 wenn das erste
+ * ungleiche Zeichen in wcs1 kleiner ist als das in wcs2, ist es
+ * groesser >0.
+ */
+int wcscasecmp(const wchar_t* wcs1, const wchar_t* wcs2);
+
+/**
+ * Zwei Strings aus breiten Zeichen aneinanderhaengen. Dabei wird der Inhalt von
+ * src inklusive dem abschliessenden L'\0' ans Ende von dst kopiert. Der
+ * Aufrufer muss sicherstellen, dass nach dst genug Speicher frei ist. Diese
+ * Funktion ist das Pendant zu strcat.
+ *
+ * @see strcat
+ * @see wcsncat
+ * @param dst Zeiger auf den String an dessen Ende src angehaengt werden soll.
+ * @param src Zeiger auf den String der an dst angehaengt werden soll.
+ *
+ * @return dst
+ */
+wchar_t* wcscat(wchar_t* dst, const wchar_t* src);
+
+/**
+ * Erstes Vorkommen eines breiten Zeichens aus einem String aus breiten Zeichen
+ * heraussuchen. Diese Funktion ist das Pendant zu strchr.
+ *
+ * @see strchr
+ * @param wcs Zeiger auf den String in dem gesucht werden soll.
+ * @param wc Zeichen das gesucht werden soll.
+ *
+ * @return Zeiger auf das erste gefundene Zeichen oder NULL wenn keines gefunden
+ * wurde.
+ */
+wchar_t* wcschr(const wchar_t* wcs, wchar_t wc);
+
+/**
+ * Zwei Strings aus breiten Zeichen inklusive dem abschliessenden L'\0'
+ * vergleichen. Diese Funktion ist das Pendant zu strcmp.
+ *
+ * @param wcs1 Erster String
+ * @param wcs2 Zweiter String
+ *
+ * @return 0 wenn die Strings gleich sind, oder <0 wenn das erste
+ * ungleiche Zeichen in wcs1 kleiner ist als das in wcs2, ist es
+ * groesser >0.
+ */
+int wcscmp(const wchar_t* wcs1, const wchar_t* wcs2);
+
+/**
+ * TODO
+ */
+int wcscoll(const wchar_t* wcs1, const wchar_t* wcs2);
+
+/**
+ * String aus Breiten Zeichen inklusive abschliessendem L'\0' kopieren. Der
+ * Aufrufer hat sicherzustellen, dass dst genug Platz bietet. Die beiden Strings
+ * duerfen sich nicht uberlappen. Diese Funktion ist das Pendant zu strcpy.
+ *
+ * @see strcpy
+ * @see wcsncpy
+ * @see wcpcpy
+ * @param dst Zeiger auf den Speicherbereich in dem die Kopie abgelegt werden
+ * soll.
+ * @param src Zeiger auf den String der kopiert werden soll.
+ *
+ * @return dst
+ */
+wchar_t* wcscpy(wchar_t* dst, const wchar_t* src);
+
+/**
+ * String aus breiten Zeichen nach einem Vorkommen eines Zeichens aus set
+ * durchsuchen. Diese Funktion ist das Pendant zu strcspn.
+ *
+ * @see strcspn
+ * @see wcsspn
+ * @param wcs Zeiger auf den String, dar durchsucht werden soll
+ * @param set Zeiger auf den String mit den zu suchenden Zeichen.
+ *
+ * @return Offset vom Anfang des Strings oder wcslen(wcs) wenn kein Vorkommen
+ * gefunden wurde.
+ */
+size_t wcscspn(const wchar_t* wcs, const wchar_t* set);
+
+/**
+ * String aus breiten Zeichen in einen neu allozierten Speicherbereich kopieren.
+ * Diese Funktion ist das Pendant zu strdup.
+ *
+ * @see strdup
+ * @param wcs Zeiger auf den zu kopierenden String
+ *
+ * @return Zeiger auf die Kopie. Muss vom Aufrufer freigegeben werden. Im
+ * Fehlerfall NULL.
+ */
+wchar_t* wcsdup(const wchar_t* wcs);
+
+/**
+ * Kopiert src an das Ende des Strings dst. Dabei wird der String dst auf
+ * maximal len - 1 Zeichen und L'\0' verlaengert, ausser wenn len == 0.
+ *
+ * @see wcsncat
+ * @param dst Zeiger auf String an den src angehaengt werden soll
+ * @param src Zeiger auf String der an dst angehaengt werden soll
+ * @param len Anzahl Zeichen auf die dst Maximal verlaengert werden darf
+ * inklusiv L'\0.'
+ *
+ * @return wcslen(urspruengliches dst) + wcslen(src); Wenn der Rueckgabewert >=
+ * len ist, wurde src nich vollstaendig kopiert.
+ */
+size_t wcslcat(wchar_t* dst, const wchar_t* src, size_t len);
+
+/**
+ * Kopiert einen String aus breiten Zeichen. Dabei werden maximal len - 1
+ * Zeichen kopiert, und dst wird immer mit L'\0' terminiert, wenn len != 0 ist.
+ *
+ * @see wcscpy
+ * @param dst Zeiger auf den Speicherbereich in dem die Kopie abgelegt werden
+ * soll.
+ * @param src Zeiger auf den Quellstring
+ * @param len Anzahl der Zeichen inklusiv abschliessendes L'\0', die maximal in
+ * dst geschrieben werden sollen.
+ *
+ * @return wcslen(src); Wenn der Rueckgabewert <= len ist, wurde src nicht
+ * vollstaendig kopiert.
+ */
+size_t wcslcpy(wchar_t* dst, const wchar_t* src, size_t len);
+
+/**
+ * Laenge eines Strings aus breiten Zeichen bestimmen. Dabei werden die Zeichen
+ * gezaehlt, bis ein abschliessendes L'\0' gefunden wird. Das L'\0' wird nicht
+ * mitgezaehlt. Diese Funktion ist das Pendant zu strlen.
+ *
+ * @see strlen
+ * @param wcs Zeiger auf den String
+ *
+ * @return Laenge des Strings in Zeichen
+ */
+size_t wcslen(const wchar_t* wcs);
+
+/**
+ * Zwei Strings aus breiten Zeichen ohne Unterscheidung von
+ * Gross-/Kleinschreibung vergleichen. Dabei werden maximal die ersten len
+ * Zeichen von Beiden Strings verglichen. Diese Funktion ist das Pendant zu
+ * strncasecmp.
+ *
+ * @see strncasecmp
+ * @see wcscasecmp
+ * @param wcs1 Erster String
+ * @param wcs2 Zweiter String
+ * @param len Anzahl der Zeichen, die maximal verglichen werden sollen, wenn
+ * vorher kein L'\0' gefunden wird.
+ *
+ * @return 0 wenn die beiden Strings gleich sind, < 0 wenn das Zeichen in wcs2
+ * groesser ist als das in wcs1 und > 0 wenn das Zeichen in wcs1
+ * groesser ist als das in wcs2.
+ */
+int wcsncasecmp(const wchar_t* wcs1, const wchar_t* wcs2, size_t len);
+
+/**
+ * Zwei Strings aus breiten Zeichen aneinanderhaengen. Dabei werden maximal len
+ * Zeichen aus src kopiert. Der Aufrufer muss sicherstellen, dass nach dem
+ * String, auf den dst zeigt, noch mindestens len + 1 Zeichen platz haben. dst
+ * wird in jedem Fall mit L'\0' terminiert. Diese Funktion ist das Pendant zu
+ * strncat.
+ *
+ * @see strncat
+ * @see wcscat
+ * @param dst String an den src angehaengt werden soll
+ * @param src String der an dst angehaengt werden soll
+ * @param len Anzahl der Zeichen, die maximal kopiert werden aus src
+ *
+ * @return dst
+ */
+wchar_t* wcsncat(wchar_t* dst, const wchar_t* src, size_t len);
+
+/**
+ * Zwei Strings aus breiten Zeichen vergleichen. Dabei werden maximal len
+ * Zeichen verglichen. Diese Funktion ist das Pendant zu strncmp.
+ *
+ * @see strncmp
+ * @see wcscmp
+ * @param wcs1 Erster String
+ * @param wcs2 Zweiter String
+ * @param len Anzahl der Zeichen, die maximal verglichen werden sollen, wenn
+ * vorher kein abschliessendes L'\0' angetroffen wurde.
+ *
+ * @return 0 wenn die Strings gleich sind, oder <0 wenn das erste
+ * ungleiche Zeichen in wcs1 kleiner ist als das in wcs2, ist es
+ * groesser >0.
+ */
+int wcsncmp(const wchar_t* wcs1, const wchar_t* wcs2, size_t len);
+
+/**
+ * String aus breiten Zeichen kopieren. Dabei werden maximal len Zeichen
+ * kopiert. Die restlichen Zeichen im Puffer werden mit L'\0' gefuellt. Ist src
+ * gleich lang wie oder laenger als len, wird dst nicht mit L'\0' terminiert.
+ * Die beiden Strings duerfen sich nicht ueberlappen. Diese Funktion ist das
+ * Pendant zu strncpy.
+ *
+ * @see strncpy
+ * @see wcscpy
+ * @param src String der kopiert werden soll
+ * @param dst Zeiger auf den Speicherbereich in den src kopiert werden soll
+ * @param len Anzahl der Zeichen, die maximal kopiert werden sollen
+ *
+ * @return dst
+ */
+wchar_t* wcsncpy(wchar_t* dst, const wchar_t* src, size_t len);
+
+/**
+ * Laenge eines Strings aus breiten Zeichen errechnen. Dabei werden maximal max
+ * Zeichen gezaehlt. Diese Funktion ist das Pendant zu strnlen.
+ *
+ * @see strnlen
+ * @see wcslen
+ * @param wcs String
+ * @param max Anzahl der Zeichen, die maximal gezaehlt werden sollen
+ *
+ * @return Anzahl der Zeichen ohne abschliessendes L'\0'
+ */
+size_t wcsnlen(const wchar_t* wcs, size_t max);
+
+/**
+ * Erstes vorkommen eines breiten Zeichens aus set im String aus breiten Zeichen
+ * wcs suchen. Diese Funktion ist das Pendant zu strpbrk.
+ *
+ * @see strpbrk
+ * @see wcschr
+ * @param wcs String der durchsucht werden soll
+ * @param set String aus Zeichen nach denen gesucht werden soll
+ *
+ * @return Zeiger auf die Position an der ein Zeichen gefunden wurde oder NULL
+ * falls keines gefunden wurde.
+ */
+wchar_t* wcspbrk(const wchar_t* wcs, const wchar_t* set);
+
+/**
+ * Letztes Vorkommen eines breiten Zeichens in einem String aus breiten Zeichen
+ * suchen. Diese Funktion ist das Pendant zu strrchr.
+ *
+ * @see strrchr
+ * @see wcschr
+ * @param wcs String der durchsucht werden soll
+ * @param wc Zeichen das gesucht werden soll
+ *
+ * @return Zeiger auf das letzte gefundene Vorkommen, oder NULL falls das
+ * Zeichen nicht gefunden wurde.
+ */
+wchar_t* wcsrchr(const wchar_t* wcs, wchar_t wc);
+
+/**
+ * Durchsucht einen String aus breiten Zeichen nach dem ersten Zeichen das nicht
+ * in set vorkommt. Diese Funktion ist das Pendant zu strspn.
+ *
+ * @see strspn
+ * @see wcschr
+ * @param wcs String der durchsucht werden soll
+ * @param set Zeichen die zugelassen sind
+ *
+ * @return Offset des ersten Zeichens das nicht in set vorkommt, oder
+ * wcslen(wcs) falls alle Zeichen in set enthalten sind.
+ */
+size_t wcsspn(const wchar_t* wcs, const wchar_t* set);
+
+/**
+ * Erstes Vorkommen des Breiten Strings find in wcs suchen. Diese Funktion ist
+ * das Pendant zu strstr.
+ *
+ * @see strstr
+ * @see wcschr
+ * @param wcs String der durchsucht werden soll
+ * @param find String der gesucht werden soll
+ *
+ * @return Zeiger auf das erste Vorkommen in wcs oder NULL falls keines gefunden
+ * wurde.
+ */
+wchar_t* wcsstr(const wchar_t* wcs, const wchar_t* find);
+
+/**
+ * String aus breiten Zeichen in Tokens aufspalten, die durch die in delim
+ * angegebenen Zeichen getrennt werden. wcs wird dabei veraendert. Ist wcs !=
+ * NULL beginnt die suche dort, sonst wird bei *last begonnen. *last wird
+ * jeweils auf den Anfang des naechsten Token gesetzt, oder auf NULL, wenn das
+ * Ende erreicht wurde.
+ * Diese Funktion ist das Pendant zu strtok.
+ *
+ * @see strtok
+ * @param wcs Zeiger auf das Zeichen bei dem die Zerlegung in Tokens begonnen
+ * werden soll, oder NULL, wenn der Wert von *last genommen werden
+ * soll.
+ * @param delim Zeichen die zwei Tokens voneinander trennen koennen
+ * @param last Zeiger auf die Speicherstelle an der die Funktion die Position
+ * des naechsten token speichern kann fuer den internen Gebrauch,
+ * um beim Naechsten Aufruf mit wcs == NULL das naechste Token
+ * zurueck geben zu koennen.
+ *
+ * @return Zeiger auf das aktuelle Token, oder NULL wenn keine Tokens mehr
+ * vorhanden sind.
+ */
+wchar_t* wcstok(wchar_t* wcs, const wchar_t* delim, wchar_t** last);
+
+/**
+ * Speicherbereich aus breiten Zeichen nach einem bestimmten Zeichen
+ * durchsuchen. Diese Funktion ist das Pendant zu memchr.
+ *
+ * @see memchr
+ * @see wcschr
+ * @param wcs Zeiger auf den Speicherbereich
+ * @param wc Zu suchendes Zeichen
+ * @param len Laenge des Speicherbereichs
+ *
+ * @return Zeiger auf das gefundene Zeichen oder NULL falls keines gefunden
+ * wurde.
+ */
+wchar_t* wmemchr(const wchar_t* wcs, wchar_t wc, size_t len);
+
+/**
+ * Zwei Speicherbereiche aus breiten Zeichen vergleichen. Diese Funktion ist das
+ * Pendant zu memcmp.
+ *
+ * @see memcmp
+ * @see wcscpm
+ * @see wcsncmp
+ * @param wcs1 Zeiger auf den ersten Speicherbereich
+ * @param wcs2 Zeiger auf den zweiten Speicherbereich
+ * @param len Laenge der beiden Speicherbereiche
+ *
+ * @return 0 wenn die beiden Speicherbereiche gleich sind, < 0 wenn das erste
+ * unterschiedliche Zeichen in wcs1 kleiner ist als das
+ * Korrespondierende in wcs2 oder > 0 wenn es groesser ist.
+ */
+int wmemcmp(const wchar_t* wcs1, const wchar_t* wcs2, size_t len);
+
+/**
+ * Speicherbereich aus breiten Zeichen kopieren. Die beiden Speicherbereiche
+ * duerfen sich nicht ueberlappen. Diese Funktion ist das Pendant zu memcpy.
+ *
+ * @see memcpy
+ * @see wcsncpy
+ * @see wcscpy
+ * @param dst Speicherbereich in den kopiert werden soll
+ * @param src Speicherbereich der kopiert werden soll
+ * @param len Laenge der Speicherbereiche
+ *
+ * @return dst
+ */
+wchar_t* wmemcpy(wchar_t* dst, const wchar_t* src, size_t len);
+
+/**
+ * Speicherbereich aus breiten Zeichen kopieren. Die beiden Speicherbereiche
+ * duerfen sich ueberlappen. Diese Funktion ist das Pendant zu memcpy.
+ *
+ * @see memmove
+ * @see wmemcpy
+ * @param dst Speicherbereich in den kopiert werden soll
+ * @param src Speicherbereich der kopiert werden soll
+ * @param len Laenge der Speicherbereiche
+ *
+ * @return dst
+ */
+wchar_t* wmemmove(wchar_t* dst, const wchar_t* src, size_t len);
+
+/**
+ * Speicherbereich aus breiten Zeichen mit einem bestimmten Zeichen ausfuellen.
+ * Diese Funktion ist das pendant zu memset.
+ *
+ * @see memset
+ * @param wcs Zeiger auf den Speicherbereich
+ * @param wc Zeichen mit dem der Speicherbereich gefuellt werden soll
+ * @param len Laenge des Speicherbereichs
+ *
+ * @return wcs
+ */
+wchar_t* wmemset(wchar_t* wcs, wchar_t wc, size_t len);
+
+
+
/* WSTDIO */
diff --git a/src/modules/lib/stdlibc/wstring/wcpcpy.c b/src/modules/lib/stdlibc/wstring/wcpcpy.c
new file mode 100644
index 0000000..5d71596
--- /dev/null
+++ b/src/modules/lib/stdlibc/wstring/wcpcpy.c
@@ -0,0 +1,55 @@
+/*
+ * Copyright (c) 1999
+ * David E. O'Brien
+ * Copyright (c) 1988, 1993
+ * The Regents of the University of California. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ * 3. Neither the name of the University nor the names of its contributors
+ * may be used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ */
+
+#include <wchar.h>
+
+/**
+ * Einen String aus breiten Zeichen kopieren, das ist das Pendant zu stpcpy. Die
+ * beiden Strings duerfen sich nicht ueberlappen. Das abschliessende L'0' wird
+ * mitkopiert.
+ *
+ * @see stpcpy
+ * @see wcscpy
+ * @see wcpncpy
+ * @param dst Zeiger auf die Speicherstelle in die der Kopiertestring abgelegt
+ * werden soll. Dabei muss vom Aufrufer sichergestellt werden, dass
+ * dort mindestens speicher fuer wcslen(src) + 1 breite Zeichen ist.
+ * @param src
+ *
+ * @return Zeiger auf das Ende (L'0') des Zielstrings.
+ */
+wchar_t* wcpcpy(wchar_t* dst, const wchar_t* src)
+{
+ for (; (*dst = *src); ++src, ++dst) { }
+
+ return dst;
+}
+
diff --git a/src/modules/lib/stdlibc/wstring/wcpncpy.c b/src/modules/lib/stdlibc/wstring/wcpncpy.c
new file mode 100644
index 0000000..b04be05
--- /dev/null
+++ b/src/modules/lib/stdlibc/wstring/wcpncpy.c
@@ -0,0 +1,60 @@
+/*-
+ * Copyright (c) 2009 David Schultz <das@xxxxxxxxxxx>
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ */
+
+#include <wchar.h>
+
+/**
+ * String aus breiten Zeichen kopieren. Dabei werden hoechstens len Zeichen
+ * kopiert. Sind in src weniger als len Zeichen wird dst mit L'\0' aufgefuellt.
+ * Ist src laenger als oder gleich lang wie len wird der String in dst nich
+ * nullterminiert, der Rueckgabewert zeigt also nich auf ein L'\0'. Die beiden
+ * Speicherbereiche duerfen sich nicht ueberlappen. Diese Funktion ist das
+ * Pendant zu strncpy.
+ *
+ * @see strncpy
+ * @see wcpncpy
+ * @param dst Zeiger auf den Speicherbereich der len breite Zeichen aufnehmen
+ * kann. Es werden genau len Zeichen hineingeschrieben.
+ * @param src Quellstring
+ * @param len Anzahl der Zeichen, die in dst geschrieben werden sollen.
+ *
+ * @return Zeiger auf das letzte geschriebene Byte, also immer dst + len - 1
+ */
+wchar_t* wcpncpy(wchar_t* dst, const wchar_t* src, size_t len)
+{
+ for (; len--; dst++, src++) {
+ if (!(*dst = *src)) {
+ wchar_t *ret = dst;
+ while (len--) {
+ *++dst = L'\0';
+ }
+ return ret;
+ }
+ }
+
+ return dst;
+}
+
diff --git a/src/modules/lib/stdlibc/wstring/wcscasecmp.c b/src/modules/lib/stdlibc/wstring/wcscasecmp.c
new file mode 100644
index 0000000..32bc3a5
--- /dev/null
+++ b/src/modules/lib/stdlibc/wstring/wcscasecmp.c
@@ -0,0 +1,59 @@
+/*-
+ * Copyright (c) 2009 David Schultz <das@xxxxxxxxxxx>
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ */
+
+#include <wchar.h>
+#include <wctype.h>
+
+/**
+ * Zwei Strings aus breiten Zeichen ohne Unterscheidung von
+ * Gross-/Kleinschreibung vergleichen inklusive abschliessendes L'\0'. Diese
+ * Funktion ist das Pendant zu strcasecmp.
+ *
+ * @see strcasecmp
+ * @see wcscmp
+ * @see towlower
+ * @param wcs1 Erster String
+ * @param wcs2 Zweiter String
+ *
+ * @return 0 wenn die Strings gleich sind, oder <0 wenn das erste
+ * ungleiche Zeichen in wcs1 kleiner ist als das in wcs2, ist es
+ * groesser >0.
+ */
+int wcscasecmp(const wchar_t* wcs1, const wchar_t* wcs2)
+{
+ wchar_t wc1, wc2;
+
+ for (; *wcs1; wcs1++, wcs2++) {
+ wc1 = towlower(*wcs1);
+ wc2 = towlower(*wcs2);
+ if (wc1 != wc2) {
+ return (int) (wc1 - wc2);
+ }
+ }
+
+ return -*wcs2;
+}
+
diff --git a/src/modules/lib/stdlibc/wstring/wcscat.c b/src/modules/lib/stdlibc/wstring/wcscat.c
new file mode 100644
index 0000000..a6e3917
--- /dev/null
+++ b/src/modules/lib/stdlibc/wstring/wcscat.c
@@ -0,0 +1,57 @@
+/*-
+ * Copyright (c)1999 Citrus Project,
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ *
+ * citrus Id: wcscat.c,v 1.1 1999/12/29 21:47:45 tshiozak Exp
+ */
+
+#include <wchar.h>
+
+
+/**
+ * Zwei Strings aus breiten Zeichen aneinanderhaengen. Dabei wird der Inhalt von
+ * src inklusive dem abschliessenden L'\0' ans Ende von dst kopiert. Der
+ * Aufrufer muss sicherstellen, dass nach dst genug Speicher frei ist. Diese
+ * Funktion ist das Pendant zu strcat.
+ *
+ * @see strcat
+ * @see wcsncat
+ * @param dst Zeiger auf den String an dessen Ende src angehaengt werden soll.
+ * @param src Zeiger auf den String der an dst angehaengt werden soll.
+ *
+ * @return dst
+ */
+wchar_t* wcscat(wchar_t* dst, const wchar_t* src)
+{
+ wchar_t* wcp;
+
+ wcp = dst;
+ while (*wcp != L'\0') {
+ wcp++;
+ }
+ while ((*wcp++ = *src++) != L'\0') { }
+
+ return dst;
+}
+
diff --git a/src/modules/lib/stdlibc/wstring/wcschr.c b/src/modules/lib/stdlibc/wstring/wcschr.c
new file mode 100644
index 0000000..d5a49c9
--- /dev/null
+++ b/src/modules/lib/stdlibc/wstring/wcschr.c
@@ -0,0 +1,53 @@
+/*-
+ * Copyright (c) 2002 Tim J. Robbins
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ */
+
+#include <wchar.h>
+
+
+/**
+ * Erstes Vorkommen eines breiten Zeichens aus einem String aus breiten Zeichen
+ * heraussuchen. Diese Funktion ist das Pendant zu strchr.
+ *
+ * @see strchr
+ * @param wcs Zeiger auf den String in dem gesucht werden soll.
+ * @param wc Zeichen das gesucht werden soll.
+ *
+ * @return Zeiger auf das erste gefundene Zeichen oder NULL wenn keines gefunden
+ * wurde.
+ */
+wchar_t* wcschr(const wchar_t* wcs, wchar_t wc)
+{
+ while (*wcs != wc && *wcs != L'\0') {
+ wcs++;
+ }
+
+ if (*wcs == wc) {
+ return (wchar_t*) wcs;
+ }
+
+ return NULL;
+}
+
diff --git a/src/modules/lib/stdlibc/wstring/wcscmp.c b/src/modules/lib/stdlibc/wstring/wcscmp.c
new file mode 100644
index 0000000..a156009
--- /dev/null
+++ b/src/modules/lib/stdlibc/wstring/wcscmp.c
@@ -0,0 +1,57 @@
+/*-
+ * Copyright (c) 1990, 1993
+ * The Regents of the University of California. All rights reserved.
+ *
+ * This code is derived from software contributed to Berkeley by
+ * Chris Torek.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ * 4. Neither the name of the University nor the names of its contributors
+ * may be used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ */
+
+#include <wchar.h>
+
+
+/**
+ * Zwei Strings aus breiten Zeichen inklusive dem abschliessenden L'\0'
+ * vergleichen. Diese Funktion ist das Pendant zu strcmp.
+ *
+ * @param wcs1 Erster String
+ * @param wcs2 Zweiter String
+ *
+ * @return 0 wenn die Strings gleich sind, oder <0 wenn das erste
+ * ungleiche Zeichen in wcs1 kleiner ist als das in wcs2, ist es
+ * groesser >0.
+ */
+int wcscmp(const wchar_t* wcs1, const wchar_t* wcs2)
+{
+ while (*wcs1 == *wcs2++) {
+ if (*wcs1++ == L'\0') {
+ return 0;
+ }
+ }
+
+ return (*(unsigned int *)wcs1 - *(unsigned int *)--wcs2);
+}
+
diff --git a/src/modules/lib/stdlibc/wstring/wcscoll.c b/src/modules/lib/stdlibc/wstring/wcscoll.c
new file mode 100644
index 0000000..8f0ce49
--- /dev/null
+++ b/src/modules/lib/stdlibc/wstring/wcscoll.c
@@ -0,0 +1,37 @@
+/*-
+ * Copyright (c) 2002 Tim J. Robbins
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ */
+
+#include <wchar.h>
+
+
+/**
+ * TODO
+ */
+int wcscoll(const wchar_t* wcs1, const wchar_t* wcs2)
+{
+ return wcscmp(wcs1, wcs2);
+}
+
diff --git a/src/modules/lib/stdlibc/wstring/wcscpy.c b/src/modules/lib/stdlibc/wstring/wcscpy.c
new file mode 100644
index 0000000..c25fb53
--- /dev/null
+++ b/src/modules/lib/stdlibc/wstring/wcscpy.c
@@ -0,0 +1,55 @@
+/*-
+ * Copyright (c)1999 Citrus Project,
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ *
+ * citrus Id: wcscpy.c,v 1.2 2000/12/21 04:51:09 itojun Exp
+ */
+
+#include <wchar.h>
+
+
+/**
+ * String aus Breiten Zeichen inklusive abschliessendem L'\0' kopieren. Der
+ * Aufrufer hat sicherzustellen, dass dst genug Platz bietet. Die beiden Strings
+ * duerfen sich nicht uberlappen. Diese Funktion ist das Pendant zu strcpy.
+ *
+ * @see strcpy
+ * @see wcsncpy
+ * @see wcpcpy
+ * @param dst Zeiger auf den Speicherbereich in dem die Kopie abgelegt werden
+ * soll.
+ * @param src Zeiger auf den String der kopiert werden soll.
+ *
+ * @return dst
+ */
+wchar_t* wcscpy(wchar_t* dst, const wchar_t* src)
+{
+ wchar_t* wcp;
+
+ wcp = dst;
+ while ((*wcp++ = *src++) != L'\0') { }
+
+ return dst;
+}
+
diff --git a/src/modules/lib/stdlibc/wstring/wcscspn.c b/src/modules/lib/stdlibc/wstring/wcscspn.c
new file mode 100644
index 0000000..45f8023
--- /dev/null
+++ b/src/modules/lib/stdlibc/wstring/wcscspn.c
@@ -0,0 +1,64 @@
+/*-
+ * Copyright (c)1999 Citrus Project,
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ *
+ * citrus Id: wcscspn.c,v 1.1 1999/12/29 21:47:45 tshiozak Exp
+ */
+
+#include <wchar.h>
+
+
+/**
+ * String aus breiten Zeichen nach einem Vorkommen eines Zeichens aus set
+ * durchsuchen. Diese Funktion ist das Pendant zu strcspn.
+ *
+ * @see strcspn
+ * @see wcsspn
+ * @param wcs Zeiger auf den String, dar durchsucht werden soll
+ * @param set Zeiger auf den String mit den zu suchenden Zeichen.
+ *
+ * @return Offset vom Anfang des Strings oder wcslen(wcs) wenn kein Vorkommen
+ * gefunden wurde.
+ */
+size_t wcscspn(const wchar_t* wcs, const wchar_t* set)
+{
+ const wchar_t* p;
+ const wchar_t* q;
+
+ p = wcs;
+ while (*p) {
+ q = set;
+ while (*q) {
+ if (*p == *q) {
+ goto done;
+ }
+ q++;
+ }
+ p++;
+ }
+
+done:
+ return (p - wcs);
+}
+
diff --git a/src/modules/lib/stdlibc/wstring/wcsdup.c b/src/modules/lib/stdlibc/wstring/wcsdup.c
new file mode 100644
index 0000000..2f94511
--- /dev/null
+++ b/src/modules/lib/stdlibc/wstring/wcsdup.c
@@ -0,0 +1,52 @@
+/*-
+ * Copyright (c) 2005 Tim J. Robbins.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ */
+
+#include <stdlib.h>
+#include <wchar.h>
+
+/**
+ * String aus breiten Zeichen in einen neu allozierten Speicherbereich kopieren.
+ * Diese Funktion ist das Pendant zu strdup.
+ *
+ * @see strdup
+ * @param wcs Zeiger auf den zu kopierenden String
+ *
+ * @return Zeiger auf die Kopie. Muss vom Aufrufer freigegeben werden. Im
+ * Fehlerfall NULL.
+ */
+wchar_t* wcsdup(const wchar_t* wcs)
+{
+ wchar_t* copy;
+ size_t len;
+
+ len = wcslen(wcs) + 1;
+ if ((copy = malloc(len * sizeof(wchar_t))) == NULL) {
+ return NULL;
+ }
+
+ return wmemcpy(copy, wcs, len);
+}
+
diff --git a/src/modules/lib/stdlibc/wstring/wcslcat.c b/src/modules/lib/stdlibc/wstring/wcslcat.c
new file mode 100644
index 0000000..85bc8e4
--- /dev/null
+++ b/src/modules/lib/stdlibc/wstring/wcslcat.c
@@ -0,0 +1,74 @@
+/*
+ * Copyright (c) 1998 Todd C. Miller <Todd.Miller@xxxxxxxxxxxxx>
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ * 3. The name of the author may not be used to endorse or promote products
+ * derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES,
+ * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
+ * AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL
+ * THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
+ * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+ * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
+ * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
+ * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * from OpenBSD: strlcat.c,v 1.3 2000/11/24 11:10:02 itojun Exp
+ */
+
+#include <wchar.h>
+
+
+/**
+ * Kopiert src an das Ende des Strings dst. Dabei wird der String dst auf
+ * maximal len - 1 Zeichen und L'\0' verlaengert, ausser wenn len == 0.
+ *
+ * @see wcsncat
+ * @param dst Zeiger auf String an den src angehaengt werden soll
+ * @param src Zeiger auf String der an dst angehaengt werden soll
+ * @param len Anzahl Zeichen auf die dst Maximal verlaengert werden darf
+ * inklusiv L'\0.'
+ *
+ * @return wcslen(urspruengliches dst) + wcslen(src); Wenn der Rueckgabewert >=
+ * len ist, wurde src nich vollstaendig kopiert.
+ */
+size_t wcslcat(wchar_t* dst, const wchar_t* src, size_t len)
+{
+ wchar_t* d = dst;
+ const wchar_t* s = src;
+ size_t n = len;
+ size_t dlen;
+
+ /* Find the end of dst and adjust bytes left but don't go past end */
+ while (*d != L'\0' && n-- != 0) {
+ d++;
+ }
+ dlen = d - dst;
+ n = len - dlen;
+
+ if (n == 0) {
+ return(dlen + wcslen(s));
+ }
+ while (*s != L'\0') {
+ if (n != 1) {
+ *d++ = *s;
+ n--;
+ }
+ s++;
+ }
+ *d = L'\0';
+
+ return(dlen + (s - src)); /* count does not include NUL */
+}
+
diff --git a/src/modules/lib/stdlibc/wstring/wcslcpy.c b/src/modules/lib/stdlibc/wstring/wcslcpy.c
new file mode 100644
index 0000000..a172f96
--- /dev/null
+++ b/src/modules/lib/stdlibc/wstring/wcslcpy.c
@@ -0,0 +1,72 @@
+/*
+ * Copyright (c) 1998 Todd C. Miller <Todd.Miller@xxxxxxxxxxxxx>
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ * 3. The name of the author may not be used to endorse or promote products
+ * derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES,
+ * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
+ * AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL
+ * THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
+ * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+ * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
+ * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
+ * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * from OpenBSD: strlcpy.c,v 1.4 1999/05/01 18:56:41 millert Exp
+ */
+
+#include <wchar.h>
+
+
+/**
+ * Kopiert einen String aus breiten Zeichen. Dabei werden maximal len - 1
+ * Zeichen kopiert, und dst wird immer mit L'\0' terminiert, wenn len != 0 ist.
+ *
+ * @see wcscpy
+ * @param dst Zeiger auf den Speicherbereich in dem die Kopie abgelegt werden
+ * soll.
+ * @param src Zeiger auf den Quellstring
+ * @param len Anzahl der Zeichen inklusiv abschliessendes L'\0', die maximal in
+ * dst geschrieben werden sollen.
+ *
+ * @return wcslen(src); Wenn der Rueckgabewert <= len ist, wurde src nicht
+ * vollstaendig kopiert.
+ */
+size_t wcslcpy(wchar_t* dst, const wchar_t* src, size_t len)
+{
+ wchar_t* d = dst;
+ const wchar_t* s = src;
+ size_t n = len;
+
+ /* Copy as many bytes as will fit */
+ if (n != 0 && --n != 0) {
+ do {
+ if ((*d++ = *s++) == 0) {
+ break;
+ }
+ } while (--n != 0);
+ }
+
+ /* Not enough room in dst, add NUL and traverse rest of src */
+ if (n == 0) {
+ if (len != 0) {
+ *d = '\0'; /* NUL-terminate dst */
+ }
+ while (*s++) { }
+ }
+
+ return(s - src - 1); /* count does not include NUL */
+}
+
diff --git a/src/modules/lib/stdlibc/wstring/wcslen.c b/src/modules/lib/stdlibc/wstring/wcslen.c
new file mode 100644
index 0000000..1d80076
--- /dev/null
+++ b/src/modules/lib/stdlibc/wstring/wcslen.c
@@ -0,0 +1,53 @@
+/*-
+ * Copyright (c)1999 Citrus Project,
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ *
+ * citrus Id: wcslen.c,v 1.1 1999/12/29 21:47:45 tshiozak Exp
+ */
+
+#include <wchar.h>
+
+
+/**
+ * Laenge eines Strings aus breiten Zeichen bestimmen. Dabei werden die Zeichen
+ * gezaehlt, bis ein abschliessendes L'\0' gefunden wird. Das L'\0' wird nicht
+ * mitgezaehlt. Diese Funktion ist das Pendant zu strlen.
+ *
+ * @see strlen
+ * @param wcs Zeiger auf den String
+ *
+ * @return Laenge des Strings in Zeichen
+ */
+size_t wcslen(const wchar_t* wcs)
+{
+ const wchar_t* p;
+
+ p = wcs;
+ while (*p) {
+ p++;
+ }
+
+ return p - wcs;
+}
+
diff --git a/src/modules/lib/stdlibc/wstring/wcsncasecmp.c b/src/modules/lib/stdlibc/wstring/wcsncasecmp.c
new file mode 100644
index 0000000..05ecb5b
--- /dev/null
+++ b/src/modules/lib/stdlibc/wstring/wcsncasecmp.c
@@ -0,0 +1,70 @@
+/*-
+ * Copyright (c) 2009 David Schultz <das@xxxxxxxxxxx>
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ */
+
+#include <wchar.h>
+#include <wctype.h>
+
+
+/**
+ * Zwei Strings aus breiten Zeichen ohne Unterscheidung von
+ * Gross-/Kleinschreibung vergleichen. Dabei werden maximal die ersten len
+ * Zeichen von Beiden Strings verglichen. Diese Funktion ist das Pendant zu
+ * strncasecmp.
+ *
+ * @see strncasecmp
+ * @see wcscasecmp
+ * @param wcs1 Erster String
+ * @param wcs2 Zweiter String
+ * @param len Anzahl der Zeichen, die maximal verglichen werden sollen, wenn
+ * vorher kein L'\0' gefunden wird.
+ *
+ * @return 0 wenn die beiden Strings gleich sind, < 0 wenn das Zeichen in wcs2
+ * groesser ist als das in wcs1 und > 0 wenn das Zeichen in wcs1
+ * groesser ist als das in wcs2.
+ */
+int wcsncasecmp(const wchar_t* wcs1, const wchar_t* wcs2, size_t len)
+{
+ wchar_t wc1, wc2;
+
+ if (len == 0) {
+ return 0;
+ }
+
+ for (; *wcs1; wcs1++, wcs2++) {
+ wc1 = towlower(*wcs1);
+ wc2 = towlower(*wcs2);
+ if (wc1 != wc2) {
+ return ((int) wc1 - wc2);
+ }
+
+ if (--len == 0) {
+ return 0;
+ }
+ }
+
+ return -*wcs2;
+}
+
diff --git a/src/modules/lib/stdlibc/wstring/wcsncat.c b/src/modules/lib/stdlibc/wstring/wcsncat.c
new file mode 100644
index 0000000..874866e
--- /dev/null
+++ b/src/modules/lib/stdlibc/wstring/wcsncat.c
@@ -0,0 +1,68 @@
+/*-
+ * Copyright (c)1999 Citrus Project,
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ *
+ * citrus Id: wcsncat.c,v 1.1 1999/12/29 21:47:45 tshiozak Exp
+ */
+
+#include <wchar.h>
+
+
+/**
+ * Zwei Strings aus breiten Zeichen aneinanderhaengen. Dabei werden maximal len
+ * Zeichen aus src kopiert. Der Aufrufer muss sicherstellen, dass nach dem
+ * String, auf den dst zeigt, noch mindestens len + 1 Zeichen platz haben. dst
+ * wird in jedem Fall mit L'\0' terminiert. Diese Funktion ist das Pendant zu
+ * strncat.
+ *
+ * @see strncat
+ * @see wcscat
+ * @param dst String an den src angehaengt werden soll
+ * @param src String der an dst angehaengt werden soll
+ * @param len Anzahl der Zeichen, die maximal kopiert werden aus src
+ *
+ * @return dst
+ */
+wchar_t* wcsncat(wchar_t* dst, const wchar_t* src, size_t len)
+{
+ wchar_t* p;
+ wchar_t* q;
+ const wchar_t* r;
+
+ p = dst;
+ while (*p) {
+ p++;
+ }
+
+ q = p;
+ r = src;
+ while (*r && len) {
+ *q++ = *r++;
+ len--;
+ }
+ *q = '\0';
+
+ return dst;
+}
+
diff --git a/src/modules/lib/stdlibc/wstring/wcsncmp.c b/src/modules/lib/stdlibc/wstring/wcsncmp.c
new file mode 100644
index 0000000..bc37bab
--- /dev/null
+++ b/src/modules/lib/stdlibc/wstring/wcsncmp.c
@@ -0,0 +1,67 @@
+/*
+ * Copyright (c) 1989, 1993
+ * The Regents of the University of California. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ * 4. Neither the name of the University nor the names of its contributors
+ * may be used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ */
+
+#include <wchar.h>
+
+
+/**
+ * Zwei Strings aus breiten Zeichen vergleichen. Dabei werden maximal len
+ * Zeichen verglichen. Diese Funktion ist das Pendant zu strncmp.
+ *
+ * @see strncmp
+ * @see wcscmp
+ * @param wcs1 Erster String
+ * @param wcs2 Zweiter String
+ * @param len Anzahl der Zeichen, die maximal verglichen werden sollen, wenn
+ * vorher kein abschliessendes L'\0' angetroffen wurde.
+ *
+ * @return 0 wenn die Strings gleich sind, oder <0 wenn das erste
+ * ungleiche Zeichen in wcs1 kleiner ist als das in wcs2, ist es
+ * groesser >0.
+ */
+int wcsncmp(const wchar_t* wcs1, const wchar_t* wcs2, size_t len)
+{
+
+ if (len == 0) {
+ return 0;
+ }
+
+ do {
+ if (*wcs1 != *wcs2++) {
+ /* XXX assumes wchar_t = int */
+ return (*(unsigned int*)wcs1 - *(unsigned int*)--wcs2);
+ }
+
+ if (*wcs1++ == 0) {
+ break;
+ }
+ } while (--len != 0);
+ return 0;
+}
+
diff --git a/src/modules/lib/stdlibc/wstring/wcsncpy.c b/src/modules/lib/stdlibc/wstring/wcsncpy.c
new file mode 100644
index 0000000..9bad4dc
--- /dev/null
+++ b/src/modules/lib/stdlibc/wstring/wcsncpy.c
@@ -0,0 +1,70 @@
+/*-
+ * Copyright (c) 1990, 1993
+ * The Regents of the University of California. All rights reserved.
+ *
+ * This code is derived from software contributed to Berkeley by
+ * Chris Torek.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ * 4. Neither the name of the University nor the names of its contributors
+ * may be used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ */
+
+#include <wchar.h>
+
+
+/**
+ * String aus breiten Zeichen kopieren. Dabei werden maximal len Zeichen
+ * kopiert. Die restlichen Zeichen im Puffer werden mit L'\0' gefuellt. Ist src
+ * gleich lang wie oder laenger als len, wird dst nicht mit L'\0' terminiert.
+ * Die beiden Strings duerfen sich nicht ueberlappen. Diese Funktion ist das
+ * Pendant zu strncpy.
+ *
+ * @see strncpy
+ * @see wcscpy
+ * @param src String der kopiert werden soll
+ * @param dst Zeiger auf den Speicherbereich in den src kopiert werden soll
+ * @param len Anzahl der Zeichen, die maximal kopiert werden sollen
+ *
+ * @return dst
+ */
+wchar_t* wcsncpy(wchar_t* dst, const wchar_t* src, size_t len)
+{
+ if (len != 0) {
+ wchar_t* d = dst;
+ const wchar_t* s = src;
+
+ do {
+ if ((*d++ = *s++) == L'\0') {
+ /* NUL pad the remaining n-1 bytes */
+ while (--len != 0) {
+ *d++ = L'\0';
+ }
+ break;
+ }
+ } while (--len != 0);
+ }
+
+ return dst;
+}
+
diff --git a/src/modules/lib/stdlibc/wstring/wcsnlen.c b/src/modules/lib/stdlibc/wstring/wcsnlen.c
new file mode 100644
index 0000000..07c09a9
--- /dev/null
+++ b/src/modules/lib/stdlibc/wstring/wcsnlen.c
@@ -0,0 +1,53 @@
+/*-
+ * Copyright (c) 2009 David Schultz <das@xxxxxxxxxxx>
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ */
+
+#include <wchar.h>
+
+
+/**
+ * Laenge eines Strings aus breiten Zeichen errechnen. Dabei werden maximal max
+ * Zeichen gezaehlt. Diese Funktion ist das Pendant zu strnlen.
+ *
+ * @see strnlen
+ * @see wcslen
+ * @param wcs String
+ * @param max Anzahl der Zeichen, die maximal gezaehlt werden sollen
+ *
+ * @return Anzahl der Zeichen ohne abschliessendes L'\0'
+ */
+size_t wcsnlen(const wchar_t* wcs, size_t max)
+{
+ size_t len;
+
+ for (len = 0; len < max; len++, wcs++) {
+ if (!*wcs) {
+ break;
+ }
+ }
+
+ return len;
+}
+
diff --git a/src/modules/lib/stdlibc/wstring/wcspbrk.c b/src/modules/lib/stdlibc/wstring/wcspbrk.c
new file mode 100644
index 0000000..bc9c594
--- /dev/null
+++ b/src/modules/lib/stdlibc/wstring/wcspbrk.c
@@ -0,0 +1,64 @@
+/*-
+ * Copyright (c)1999 Citrus Project,
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ *
+ * citrus Id: wcspbrk.c,v 1.2 2000/12/21 05:07:25 itojun Exp
+ */
+
+#include <wchar.h>
+
+
+/**
+ * Erstes vorkommen eines breiten Zeichens aus set im String aus breiten Zeichen
+ * wcs suchen. Diese Funktion ist das Pendant zu strpbrk.
+ *
+ * @see strpbrk
+ * @see wcschr
+ * @param wcs String der durchsucht werden soll
+ * @param set String aus Zeichen nach denen gesucht werden soll
+ *
+ * @return Zeiger auf die Position an der ein Zeichen gefunden wurde oder NULL
+ * falls keines gefunden wurde.
+ */
+wchar_t* wcspbrk(const wchar_t* wcs, const wchar_t* set)
+{
+ const wchar_t* p;
+ const wchar_t* q;
+
+ p = wcs;
+ while (*p) {
+ q = set;
+ while (*q) {
+ if (*p == *q) {
+ /* LINTED interface specification */
+ return (wchar_t*) p;
+ }
+ q++;
+ }
+ p++;
+ }
+
+ return NULL;
+}
+
diff --git a/src/modules/lib/stdlibc/wstring/wcsrchr.c b/src/modules/lib/stdlibc/wstring/wcsrchr.c
new file mode 100644
index 0000000..23d3a65
--- /dev/null
+++ b/src/modules/lib/stdlibc/wstring/wcsrchr.c
@@ -0,0 +1,60 @@
+/*-
+ * Copyright (c) 2002 Tim J. Robbins
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ */
+
+#include <wchar.h>
+
+
+/**
+ * Letztes Vorkommen eines breiten Zeichens in einem String aus breiten Zeichen
+ * suchen. Diese Funktion ist das Pendant zu strrchr.
+ *
+ * @see strrchr
+ * @see wcschr
+ * @param wcs String der durchsucht werden soll
+ * @param wc Zeichen das gesucht werden soll
+ *
+ * @return Zeiger auf das letzte gefundene Vorkommen, oder NULL falls das
+ * Zeichen nicht gefunden wurde.
+ */
+wchar_t* wcsrchr(const wchar_t* wcs, wchar_t wc)
+{
+ const wchar_t* last;
+
+ last = NULL;
+ for (;;) {
+ if (*wcs == wc) {
+ last = wcs;
+ }
+
+ if (*wcs == L'\0') {
+ break;
+ }
+ wcs++;
+ }
+
+ return ((wchar_t*) last);
+}
+
diff --git a/src/modules/lib/stdlibc/wstring/wcsspn.c b/src/modules/lib/stdlibc/wstring/wcsspn.c
new file mode 100644
index 0000000..398af6f
--- /dev/null
+++ b/src/modules/lib/stdlibc/wstring/wcsspn.c
@@ -0,0 +1,67 @@
+/*-
+ * Copyright (c)1999 Citrus Project,
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ *
+ * citrus Id: wcsspn.c,v 1.1 1999/12/29 21:47:45 tshiozak Exp
+ */
+
+#include <wchar.h>
+
+
+/**
+ * Durchsucht einen String aus breiten Zeichen nach dem ersten Zeichen das nicht
+ * in set vorkommt. Diese Funktion ist das Pendant zu strspn.
+ *
+ * @see strspn
+ * @see wcschr
+ * @param wcs String der durchsucht werden soll
+ * @param set Zeichen die zugelassen sind
+ *
+ * @return Offset des ersten Zeichens das nicht in set vorkommt, oder
+ * wcslen(wcs) falls alle Zeichen in set enthalten sind.
+ */
+size_t wcsspn(const wchar_t* wcs, const wchar_t* set)
+{
+ const wchar_t* p;
+ const wchar_t* q;
+
+ p = wcs;
+ while (*p) {
+ q = set;
+ while (*q) {
+ if (*p == *q) {
+ break;
+ }
+ q++;
+ }
+ if (!*q) {
+ goto done;
+ }
+ p++;
+ }
+
+done:
+ return (p - wcs);
+}
+
diff --git a/src/modules/lib/stdlibc/wstring/wcsstr.c b/src/modules/lib/stdlibc/wstring/wcsstr.c
new file mode 100644
index 0000000..5e8357c
--- /dev/null
+++ b/src/modules/lib/stdlibc/wstring/wcsstr.c
@@ -0,0 +1,66 @@
+/*-
+ * Copyright (c) 1990, 1993
+ * The Regents of the University of California. All rights reserved.
+ *
+ * This code is derived from software contributed to Berkeley by
+ * Chris Torek.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ * 4. Neither the name of the University nor the names of its contributors
+ * may be used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ */
+
+#include <wchar.h>
+
+/**
+ * Erstes Vorkommen des Breiten Strings find in wcs suchen. Diese Funktion ist
+ * das Pendant zu strstr.
+ *
+ * @see strstr
+ * @see wcschr
+ * @param wcs String der durchsucht werden soll
+ * @param find String der gesucht werden soll
+ *
+ * @return Zeiger auf das erste Vorkommen in wcs oder NULL falls keines gefunden
+ * wurde.
+ */
+wchar_t* wcsstr(const wchar_t* wcs, const wchar_t* find)
+{
+ wchar_t c, sc;
+ size_t len;
+
+ if ((c = *find++) != L'\0') {
+ len = wcslen(find);
+ do {
+ do {
+ if ((sc = *wcs++) == L'\0') {
+ return NULL;
+ }
+ } while (sc != c);
+ } while (wcsncmp(wcs, find, len) != 0);
+ wcs--;
+ }
+
+ return ((wchar_t*) wcs);
+}
+
diff --git a/src/modules/lib/stdlibc/wstring/wcstok.c b/src/modules/lib/stdlibc/wstring/wcstok.c
new file mode 100644
index 0000000..e067ee9
--- /dev/null
+++ b/src/modules/lib/stdlibc/wstring/wcstok.c
@@ -0,0 +1,108 @@
+/*-
+ * Copyright (c) 1998 Softweyr LLC. All rights reserved.
+ *
+ * strtok_r, from Berkeley strtok
+ * Oct 13, 1998 by Wes Peters <wes@xxxxxxxxxxxx>
+ *
+ * Copyright (c) 1988, 1993
+ * The Regents of the University of California. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notices, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notices, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ * 4. Neither the name of the University nor the names of its contributors
+ * may be used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY SOFTWEYR LLC, THE REGENTS AND CONTRIBUTORS
+ * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
+ * PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SOFTWEYR LLC, THE
+ * REGENTS, OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED
+ * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include <wchar.h>
+
+
+/**
+ * String aus breiten Zeichen in Tokens aufspalten, die durch die in delim
+ * angegebenen Zeichen getrennt werden. wcs wird dabei veraendert. Ist wcs !=
+ * NULL beginnt die suche dort, sonst wird bei *last begonnen. *last wird
+ * jeweils auf den Anfang des naechsten Token gesetzt, oder auf NULL, wenn das
+ * Ende erreicht wurde.
+ * Diese Funktion ist das Pendant zu strtok.
+ *
+ * @see strtok
+ * @param wcs Zeiger auf das Zeichen bei dem die Zerlegung in Tokens begonnen
+ * werden soll, oder NULL, wenn der Wert von *last genommen werden
+ * soll.
+ * @param delim Zeichen die zwei Tokens voneinander trennen koennen
+ * @param last Zeiger auf die Speicherstelle an der die Funktion die Position
+ * des naechsten token speichern kann fuer den internen Gebrauch,
+ * um beim Naechsten Aufruf mit wcs == NULL das naechste Token
+ * zurueck geben zu koennen.
+ *
+ * @return Zeiger auf das aktuelle Token, oder NULL wenn keine Tokens mehr
+ * vorhanden sind.
+ */
+wchar_t* wcstok(wchar_t* wcs, const wchar_t* delim, wchar_t** last)
+{
+ const wchar_t* spanp;
+ wchar_t* tok;
+ wchar_t c, sc;
+
+ if (wcs == NULL && (wcs = *last) == NULL) {
+ return NULL;
+ }
+
+ /*
+ * Skip (span) leading delimiters (wcs += wcsspn(wcs, delim), sort of).
+ */
+cont:
+ c = *wcs++;
+ for (spanp = delim; (sc = *spanp++) != L'\0';) {
+ if (c == sc) {
+ goto cont;
+ }
+ }
+
+ if (c == L'\0') { /* no non-delimiter characters */
+ *last = NULL;
+ return NULL;
+ }
+ tok = wcs - 1;
+
+ /*
+ * Scan token (scan for delimiters: s += wcscspn(s, delim), sort of).
+ * Note that delim must have one NUL; we stop if we see that, too.
+ */
+ for (;;) {
+ c = *wcs++;
+ spanp = delim;
+ do {
+ if ((sc = *spanp++) == c) {
+ if (c == L'\0') {
+ wcs = NULL;
+ } else {
+ wcs[-1] = L'\0';
+ }
+ *last = wcs;
+
+ return tok;
+ }
+ } while (sc != L'\0');
+ }
+ /* NOTREACHED */
+}
+
diff --git a/src/modules/lib/stdlibc/wstring/wmemchr.c b/src/modules/lib/stdlibc/wstring/wmemchr.c
new file mode 100644
index 0000000..481ccdc
--- /dev/null
+++ b/src/modules/lib/stdlibc/wstring/wmemchr.c
@@ -0,0 +1,59 @@
+/*-
+ * Copyright (c)1999 Citrus Project,
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ *
+ * citrus Id: wmemchr.c,v 1.2 2000/12/20 14:08:31 itojun Exp
+ */
+
+#include <wchar.h>
+
+
+/**
+ * Speicherbereich aus breiten Zeichen nach einem bestimmten Zeichen
+ * durchsuchen. Diese Funktion ist das Pendant zu memchr.
+ *
+ * @see memchr
+ * @see wcschr
+ * @param wcs Zeiger auf den Speicherbereich
+ * @param wc Zu suchendes Zeichen
+ * @param len Laenge des Speicherbereichs
+ *
+ * @return Zeiger auf das gefundene Zeichen oder NULL falls keines gefunden
+ * wurde.
+ */
+wchar_t* wmemchr(const wchar_t* wcs, wchar_t wc, size_t len)
+{
+ size_t i;
+
+ for (i = 0; i < len; i++) {
+ if (*wcs == wc) {
+ /* LINTED const castaway */
+ return (wchar_t*) wcs;
+ }
+ wcs++;
+ }
+
+ return NULL;
+}
+
diff --git a/src/modules/lib/stdlibc/wstring/wmemcmp.c b/src/modules/lib/stdlibc/wstring/wmemcmp.c
new file mode 100644
index 0000000..c8412e7
--- /dev/null
+++ b/src/modules/lib/stdlibc/wstring/wmemcmp.c
@@ -0,0 +1,62 @@
+/*-
+ * Copyright (c)1999 Citrus Project,
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ *
+ * citrus Id: wmemcmp.c,v 1.2 2000/12/20 14:08:31 itojun Exp
+ */
+
+#include <wchar.h>
+
+
+/**
+ * Zwei Speicherbereiche aus breiten Zeichen vergleichen. Diese Funktion ist das
+ * Pendant zu memcmp.
+ *
+ * @see memcmp
+ * @see wcscpm
+ * @see wcsncmp
+ * @param wcs1 Zeiger auf den ersten Speicherbereich
+ * @param wcs2 Zeiger auf den zweiten Speicherbereich
+ * @param len Laenge der beiden Speicherbereiche
+ *
+ * @return 0 wenn die beiden Speicherbereiche gleich sind, < 0 wenn das erste
+ * unterschiedliche Zeichen in wcs1 kleiner ist als das
+ * Korrespondierende in wcs2 oder > 0 wenn es groesser ist.
+ */
+int wmemcmp(const wchar_t* wcs1, const wchar_t* wcs2, size_t len)
+{
+ size_t i;
+
+ for (i = 0; i < len; i++) {
+ if (*wcs1 != *wcs2) {
+ /* wchar might be unsigned */
+ return *wcs1 > *wcs2 ? 1 : -1;
+ }
+
+ wcs1++;
+ wcs2++;
+ }
+ return 0;
+}
+
diff --git a/src/modules/lib/stdlibc/wstring/wmemcpy.c b/src/modules/lib/stdlibc/wstring/wmemcpy.c
new file mode 100644
index 0000000..072c5f4
--- /dev/null
+++ b/src/modules/lib/stdlibc/wstring/wmemcpy.c
@@ -0,0 +1,50 @@
+/*-
+ * Copyright (c)1999 Citrus Project,
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ *
+ * citrus Id: wmemcpy.c,v 1.2 2000/12/20 14:08:31 itojun Exp
+ */
+
+#include <string.h>
+#include <wchar.h>
+
+
+/**
+ * Speicherbereich aus breiten Zeichen kopieren. Die beiden Speicherbereiche
+ * duerfen sich nicht ueberlappen. Diese Funktion ist das Pendant zu memcpy.
+ *
+ * @see memcpy
+ * @see wcsncpy
+ * @see wcscpy
+ * @param dst Speicherbereich in den kopiert werden soll
+ * @param src Speicherbereich der kopiert werden soll
+ * @param len Laenge der Speicherbereiche
+ *
+ * @return dst
+ */
+wchar_t* wmemcpy(wchar_t* dst, const wchar_t* src, size_t len)
+{
+ return (wchar_t*) memcpy(dst, src, len * sizeof(wchar_t));
+}
+
diff --git a/src/modules/lib/stdlibc/wstring/wmemmove.c b/src/modules/lib/stdlibc/wstring/wmemmove.c
new file mode 100644
index 0000000..8da074d
--- /dev/null
+++ b/src/modules/lib/stdlibc/wstring/wmemmove.c
@@ -0,0 +1,49 @@
+/*-
+ * Copyright (c)1999 Citrus Project,
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ *
+ * citrus Id: wmemmove.c,v 1.2 2000/12/20 14:08:31 itojun Exp
+ */
+
+#include <string.h>
+#include <wchar.h>
+
+
+/**
+ * Speicherbereich aus breiten Zeichen kopieren. Die beiden Speicherbereiche
+ * duerfen sich ueberlappen. Diese Funktion ist das Pendant zu memcpy.
+ *
+ * @see memmove
+ * @see wmemcpy
+ * @param dst Speicherbereich in den kopiert werden soll
+ * @param src Speicherbereich der kopiert werden soll
+ * @param len Laenge der Speicherbereiche
+ *
+ * @return dst
+ */
+wchar_t* wmemmove(wchar_t* dst, const wchar_t* src, size_t len)
+{
+ return (wchar_t*) memmove(dst, src, len * sizeof(wchar_t));
+}
+
diff --git a/src/modules/lib/stdlibc/wstring/wmemset.c b/src/modules/lib/stdlibc/wstring/wmemset.c
new file mode 100644
index 0000000..e45ab60
--- /dev/null
+++ b/src/modules/lib/stdlibc/wstring/wmemset.c
@@ -0,0 +1,56 @@
+/*-
+ * Copyright (c)1999 Citrus Project,
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ *
+ * citrus Id: wmemset.c,v 1.2 2000/12/20 14:08:31 itojun Exp
+ */
+
+#include <wchar.h>
+
+
+/**
+ * Speicherbereich aus breiten Zeichen mit einem bestimmten Zeichen ausfuellen.
+ * Diese Funktion ist das pendant zu memset.
+ *
+ * @see memset
+ * @param wcs Zeiger auf den Speicherbereich
+ * @param wc Zeichen mit dem der Speicherbereich gefuellt werden soll
+ * @param len Laenge des Speicherbereichs
+ *
+ * @return wcs
+ */
+wchar_t* wmemset(wchar_t* wcs, wchar_t wc, size_t len)
+{
+ size_t i;
+ wchar_t* p;
+
+ p = wcs;
+ for (i = 0; i < len; i++) {
+ *p = wc;
+ p++;
+ }
+
+ return wcs;
+}
+
--
1.6.0.6