X-Authentication-Warning: delorie.com: mail set sender to djgpp-bounces using -f X-Recipient: djgpp AT delorie DOT com Message-ID: <597482DE.2010800@gmx.de> Date: Sun, 23 Jul 2017 13:05:02 +0200 From: "Juan Manuel Guerrero (juan DOT guerrero AT gmx DOT de) [via djgpp AT delorie DOT com]" User-Agent: Mozilla/5.0 (X11; U; Linux x86_64; de; rv:1.9.2.13) Gecko/20101206 SUSE/3.1.7 Thunderbird/3.1.7 MIME-Version: 1.0 To: djgpp AT delorie DOT com Subject: Re: DJGPP doesn't support std::wstring? References: <59728009 DOT 7010801 AT gmx DOT de> <5ba63d08-999c-db29-3e59-5feca8f71c38 AT iki DOT fi> In-Reply-To: <5ba63d08-999c-db29-3e59-5feca8f71c38@iki.fi> Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 7bit X-Provags-ID: V03:K0:ISG8VYWNLbPIhG13W0Kb1VGd6/vPnKWA7VI6QIGieNg0dmvx4KA pAn7OFTDBWePU/j7A6zZuTRaQeKon1unio3Fb7OnVGm41b+6NipHBq9VxbzxCrz0axfO7gV cKZjsGsARpHTYpONPi2wulyXBS2uHUyHI3pi9XoId+iv4NLAhe4s9dw0WPWcj+NGzDY2Qes Md6PKi/7sOOR8NMG2BMeQ== X-UI-Out-Filterresults: notjunk:1;V01:K0:ZrQJyBQT6Zg=:J1dZsA4APmY4NdvYm3rsRx xOAwwCIJsP0Vv3QiwN7AYLbCulPmPPcsNR87nNuFmN7+ky2fGTh+9hxc7PThcC9pzo5qu8LJr SyGoF4GiOyBNyWr8btvgTLYwFa++t1cdesljI8DWvfP0XfrrNhDm2wIrbH2H3EPMSyGyZHqgn zMK8z4KV1mk4i1px8Rh0LUFtvo9Y5Cqxr92emdSN0v7jxcF1ij7HuWv9JXBiSlgLkHWDJR8o3 5tlnAqBzte9KmQgr7Tf3+/TsIKHIBx+DTaQ2N5QE5PZJBxCD2TF4vSgUprGUagS3zES75iq47 y4zorbbLss5pg8PuGgwhMtJqhRgQX0r03d5vljF0rebzAxZznJzBSHcxYHcfIQ0130Dby8bqn 5YixTf4L3BuWjomd5tFiSmCOkfY6olEdG4MWisf70cKAB0ism3SkKFJ59qQRpsKNu0txRDCBX mIfXqNHJLPfRSglEM3y6prw1ba7MUkeV7Jas6p3dNCr+NyxqB3yA9pprAqxnZSRi8DDYA3Hwj eN9tI5XOfMMfRE9FBWsI7qxSHcXCCLw2uIZ1I1zWj9gotRpbMpOKWXvE17mXlYVQtCVcl1NJd pSP7PQhBQzzfgkvUEZqfBxD86cppMlqhfB83eMvAW3vRitX0gp9Xx31claoAA2BIEPT34AA5/ ftO0HbGFCsDelYhLrIf8fUVE21fTmockgRnWKyf3IKElUjZKt5oEJ7rE6MlGg4KguKn4EJS48 vR57LZ7cGlRjz1ym9s8QnDH+pYSxkcnB2KvZBYvlcTTJl2tin1GrH2dMd+0LR7MC9owwN32SM rjqV/+Mp522CtOHyNd+q7Yk34MO7ue0Nfd5bSd+dmUK/5vMaZ4= Reply-To: djgpp AT delorie DOT com Am 22.07.2017 18:16, schrieb Andris Pavenis (andris DOT pavenis AT iki DOT fi) [via djgpp AT delorie DOT com]: > On 07/22/2017 01:28 AM, Juan Manuel Guerrero (juan DOT guerrero AT gmx DOT de) [via djgpp AT delorie DOT com] wrote: >> Am 21.07.2017 14:56, schrieb Andrew Wu (andrewwu DOT tw AT gmail DOT com) [via djgpp AT delorie DOT com]: >> [snip] >>> >>> Any method to support wstring in DJGPP? >> [snip] >> >> No, if no one implements this stuff from scratch. >> DJGPP 2.05 with gcc 7.1.0 has never supported neither wide characters nor multi byte strings. >> This is also true for any previous version of DJGPP no matter what gcc version has been used. >> It is very unlikely that some developer will volunteer to implement this stuff for DJGPP. >> In the very best case you will have to find some auxiliar library that provides the missing >> functionality. But I doubt that that will solve all issues. >> >> Regards, >> Juan M. Guerrero >> > There was actually implementation of wide character support almost 20 years ago. Some of mails at DJGPP workers (not all of them) are > > http://www.delorie.com/djgpp/mail-archives/browse.cgi?p=djgpp-workers/1998/09/10/18:45:06 > > http://www.delorie.com/djgpp/mail-archives/browse.cgi?p=djgpp-workers/1998/09/15/09:53:11 > > http://www.delorie.com/djgpp/mail-archives/browse.cgi?p=djgpp-workers/1998/09/11/13:02:03 > > Original URL from last of these mails do not respond now and it did no more contain the files when I looked last time long ago as far as I remember. > > The problem is that that nobody took the work of actually integrating these additions in DJGPP libc then. Good news is that I still have these files laying around > > http://ap1.pp.fi/djgpp/misc/ > > I raised this topic before releasing DJGPP v2.05. It was then decided to postpone it. > > Andris > Some remarks about the code: 1) All file names shall be renamed to lower case before they are added to the repository. 2) All files shall have unix EOL before they are added to the repository. Currently they have DOS EOL. 3) The stuff of ./DJTYPES.H has already been added /djgpp/include/sys/djtypes.h and ./LIMITS.H is superfluous. It has nothing at all that needs to be added to /djgpp/include/limits.h from at all ./LIMITS.H. 4) The typedef of wctrans_t differ. According to the glibc header it must be an int pointer but ./INCLUDE/WCTYPE.H typdefs it as int. The typedef of wctype_t differ. The one from ./INCLUDE/WCTYPE.H seems to be the right one. For some reason I have not figured out /djgpp/include/wtype.h typedefs it as unsigned short. 5) The second argument of wcsrchr must be wchar_t and not int as it is. This function has been fixed. See patch and http://pubs.opengroup.org/onlinepubs/009695399/functions/wcsrchr.html 6) The third and last argument of wcstok is missing. I assume that the definition of this function has changed since it has been implemented by the author. This function has been fixed. See patch and http://pubs.opengroup.org/onlinepubs/009695399/functions/wcstok.html 7) At least a minimal testsuite must be implemented for this set of functions. 8) I have inspected the files and compiled them with gcc346, gcc494, gcc540, gcc640 and gcc710. The patch below shows the adjustments that were necessary to get this 20 year old code compiled. The code itself seems ok to me because all wide char functions are identical to their char counterparts. Only the character type has been replaced by wide character thus if the char versions were ok then the wide char versions should also be ok. Also the txh files are 20 years old and need to be fixed due to errors and adjusted accordingly. The patch is based on wchar.zip and not on the repository code. 9) It shall be noted that the implemented functions are only a very small part of all functions defined in wchar.h Here a lot of more work needs to be done before it can be claimed that DJGPP supports wide char/multi-byte strings. Regards, Juan M. Guerrero diff -aprNU5 wchar.orig/include/wchar.h wchar/include/wchar.h --- wchar.orig/include/wchar.h 1998-09-10 16:52:28 +0000 +++ wchar/include/wchar.h 2017-07-23 03:34:10 +0000 @@ -36,14 +36,14 @@ size_t wcscspn(const wchar_t *_s1, const size_t wcslen(const wchar_t *_s); wchar_t * wcsncat(wchar_t *_s1, const wchar_t *_s2, size_t _n); int wcsncmp(const wchar_t *_s1, const wchar_t *_s2, size_t _n); wchar_t * wcsncpy(wchar_t *_s1, const wchar_t *_s2, size_t _n); wchar_t * wcspbrk(const wchar_t *_s1, const wchar_t *_s2); -wchar_t * wcsrchr(const wchar_t *_s, int _c); +wchar_t * wcsrchr(const wchar_t *_s, wchar_t _c); size_t wcsspn(const wchar_t *_s1, const wchar_t *_s2); wchar_t * wcsstr(const wchar_t *_s1, const wchar_t *_s2); -wchar_t * wcstok(wchar_t *_s1, const wchar_t *_s2); +wchar_t * wcstok(wchar_t *_s1, const wchar_t *_s2, wchar_t **last); size_t wcsxfrm(wchar_t *_s1, const wchar_t *_s2, size_t _n); #ifdef __cplusplus } #endif diff -aprNU5 wchar.orig/src/libc/ansi/wchar/makefile wchar/src/libc/ansi/wchar/makefile --- wchar.orig/src/libc/ansi/wchar/makefile 1970-01-01 00:00:00 +0000 +++ wchar/src/libc/ansi/wchar/makefile 2017-07-23 02:33:22 +0000 @@ -0,0 +1,47 @@ +# Copyright (C) 2017 DJ Delorie, see COPYING.DJ for details +TOP=../.. + +SRC += wcscat.c +SRC += wcscat.txh +SRC += wcschr.c +SRC += wcschr.txh +SRC += wcscmp.c +SRC += wcscmp.txh +SRC += wcscoll.c +SRC += wcscoll.txh +SRC += wcscpy.c +SRC += wcscpy.txh +SRC += wcscspn.c +SRC += wcscspn.txh +SRC += wcslen.c +SRC += wcslen.txh +SRC += wcsncat.c +SRC += wcsncat.txh +SRC += wcsncmp.c +SRC += wcsncmp.txh +SRC += wcsncpy.c +SRC += wcsncpy.txh +SRC += wcspbrk.c +SRC += wcspbrk.txh +SRC += wcsrchr.c +SRC += wcsrchr.txh +SRC += wcsspn.c +SRC += wcsspn.txh +SRC += wcsstr.c +SRC += wcsstr.txh +SRC += wcstok.c +SRC += wcstok.txh +SRC += wcsxfrm.c +SRC += wcsxfrm.txh +SRC += wmemchr.c +SRC += wmemchr.txh +SRC += wmemcmp.c +SRC += wmemcmp.txh +SRC += wmemcpy.c +SRC += wmemcpy.txh +SRC += wmemmove.c +SRC += wmemmove.txh +SRC += wmemset.c +SRC += wmemset.txh + +include $(TOP)/../makefile.inc diff -aprNU5 wchar.orig/src/libc/ansi/wchar/wcscat.txh wchar/src/libc/ansi/wchar/wcscat.txh --- wchar.orig/src/libc/ansi/wchar/wcscat.txh 1998-09-11 08:54:34 +0000 +++ wchar/src/libc/ansi/wchar/wcscat.txh 2017-07-23 04:38:12 +0000 @@ -2,21 +2,25 @@ @subheading Syntax @example #include -wchar_t *strcat(wchar_t *s1, const wchar_t *s2); +wchar_t *wcscat(wchar_t *s1, const wchar_t *s2); @end example @subheading Description This function concatenates @var{s2} to the end of @var{s1}. @subheading Return Value @var{s1} +@subheading Portability + +@portability ansi, posix + @subheading Example @example wchar_t buf[100] = L"hello"; wcscat(buf, L" there"); diff -aprNU5 wchar.orig/src/libc/ansi/wchar/wcschr.txh wchar/src/libc/ansi/wchar/wcschr.txh --- wchar.orig/src/libc/ansi/wchar/wcschr.txh 1998-09-11 08:59:18 +0000 +++ wchar/src/libc/ansi/wchar/wcschr.txh 2017-07-23 04:38:08 +0000 @@ -15,10 +15,14 @@ pointer to the end of the wide string. @subheading Return Value A pointer to the wide character, or @code{NULL} if it wasn't found. +@subheading Portability + +@portability ansi, posix + @subheading Example @example wchar_t *tag_start = wcschr(document, L'<'); @end example diff -aprNU5 wchar.orig/src/libc/ansi/wchar/wcscmp.txh wchar/src/libc/ansi/wchar/wcscmp.txh --- wchar.orig/src/libc/ansi/wchar/wcscmp.txh 1998-09-11 09:02:46 +0000 +++ wchar/src/libc/ansi/wchar/wcscmp.txh 2017-07-23 04:38:04 +0000 @@ -14,10 +14,14 @@ This function compares @var{s1} and @var @subheading Return Value Zero if the wide strings are equal, a positive number if @var{s1} comes after @var{s2} in the collating sequense, else a negative number. +@subheading Portability + +@portability ansi, posix + @subheading Example @example if (wcscmp(arg, L"-i") == 0) do_include(); diff -aprNU5 wchar.orig/src/libc/ansi/wchar/wcscoll.txh wchar/src/libc/ansi/wchar/wcscoll.txh --- wchar.orig/src/libc/ansi/wchar/wcscoll.txh 1998-09-11 09:02:32 +0000 +++ wchar/src/libc/ansi/wchar/wcscoll.txh 2017-07-23 04:38:02 +0000 @@ -15,10 +15,14 @@ sequences from the current locale. @subheading Return Value Zero if the wide strings are equal, a positive number if @var{s1} comes after @var{s2} in the collating sequense, else a negative number. +@subheading Portability + +@portability ansi, posix + @subheading Example @example while (wcscoll(var, list[i]) < 0) i++; diff -aprNU5 wchar.orig/src/libc/ansi/wchar/wcscpy.txh wchar/src/libc/ansi/wchar/wcscpy.txh --- wchar.orig/src/libc/ansi/wchar/wcscpy.txh 1998-09-11 09:03:42 +0000 +++ wchar/src/libc/ansi/wchar/wcscpy.txh 2017-07-23 04:37:58 +0000 @@ -2,21 +2,25 @@ @subheading Syntax @example #include -wchar_t *strcpy(wchar_t *s1, const wchar_t *s2); +wchar_t *wcscpy(wchar_t *s1, const wchar_t *s2); @end example @subheading Description This function copies @var{s2} into @var{s1}. @subheading Return Value @var{s1} +@subheading Portability + +@portability ansi, posix + @subheading Example @example wchar_t buf[100]; wcscpy(buf, arg); diff -aprNU5 wchar.orig/src/libc/ansi/wchar/wcscspn.txh wchar/src/libc/ansi/wchar/wcscspn.txh --- wchar.orig/src/libc/ansi/wchar/wcscspn.txh 1998-09-11 09:04:58 +0000 +++ wchar/src/libc/ansi/wchar/wcscspn.txh 2017-07-23 04:50:28 +0000 @@ -18,10 +18,14 @@ wide string if nothing else. The index of the found character. @subheading Example +@subheading Portability + +@portability ansi, posix + @example int i = wcscspn(command, "<>|"); if (command[i]) do_redirection(); @end example diff -aprNU5 wchar.orig/src/libc/ansi/wchar/wcslen.txh wchar/src/libc/ansi/wchar/wcslen.txh --- wchar.orig/src/libc/ansi/wchar/wcslen.txh 1998-09-11 00:10:30 +0000 +++ wchar/src/libc/ansi/wchar/wcslen.txh 2017-07-23 04:50:32 +0000 @@ -13,10 +13,14 @@ This function returns the number of wide @subheading Return Value The length of the wide string. +@subheading Portability + +@portability ansi, posix + @subheading Example @example if (wcslen(buffer) <= BUFFER_MAX) copy_buffer(buffer); diff -aprNU5 wchar.orig/src/libc/ansi/wchar/wcsncat.txh wchar/src/libc/ansi/wchar/wcsncat.txh --- wchar.orig/src/libc/ansi/wchar/wcsncat.txh 1998-09-11 00:08:02 +0000 +++ wchar/src/libc/ansi/wchar/wcsncat.txh 2017-07-23 04:50:34 +0000 @@ -14,10 +14,14 @@ end of @var{s1}. @subheading Return Value @var{s1} +@subheading Portability + +@portability ansi, posix + @subheading Example @example wcsncat(fname, extension, 4); @end example diff -aprNU5 wchar.orig/src/libc/ansi/wchar/wcsncmp.txh wchar/src/libc/ansi/wchar/wcsncmp.txh --- wchar.orig/src/libc/ansi/wchar/wcsncmp.txh 1998-09-11 00:06:54 +0000 +++ wchar/src/libc/ansi/wchar/wcsncmp.txh 2017-07-23 04:50:38 +0000 @@ -14,10 +14,14 @@ This function compares up to @var{max} w @subheading Return Value Zero if the wide strings are equal, a positive number if @var{s1} comes after @var{s2} in the ASCII collating sequense, else a negative number. +@subheading Portability + +@portability ansi, posix + @subheading Example @example if (wcsncmp(arg, "-i", 2) == 0) do_include(); diff -aprNU5 wchar.orig/src/libc/ansi/wchar/wcsncpy.txh wchar/src/libc/ansi/wchar/wcsncpy.txh --- wchar.orig/src/libc/ansi/wchar/wcsncpy.txh 1998-09-11 00:05:22 +0000 +++ wchar/src/libc/ansi/wchar/wcsncpy.txh 2017-07-23 04:51:08 +0000 @@ -13,10 +13,14 @@ This function copies up to @var{max} cha @subheading Return Value @var{s1} +@subheading Portability + +@portability ansi, posix + @subheading Example @example wchar_t buf[100]; wcsncpy(buf, arg, 99); diff -aprNU5 wchar.orig/src/libc/ansi/wchar/wcspbrk.txh wchar/src/libc/ansi/wchar/wcspbrk.txh --- wchar.orig/src/libc/ansi/wchar/wcspbrk.txh 1998-09-11 00:04:12 +0000 +++ wchar/src/libc/ansi/wchar/wcspbrk.txh 2017-07-23 12:37:24 +0000 @@ -14,10 +14,14 @@ wide character in @var{set}. @subheading Return Value A pointer to the first match, or @code{NULL} if none are found. +@subheading Portability + +@portability ansi, posix + @subheading Example @example if (wcspbrk(command, L"<>|")) do_redirection(); diff -aprNU5 wchar.orig/src/libc/ansi/wchar/wcsrchr.c wchar/src/libc/ansi/wchar/wcsrchr.c --- wchar.orig/src/libc/ansi/wchar/wcsrchr.c 1998-09-09 20:36:34 +0000 +++ wchar/src/libc/ansi/wchar/wcsrchr.c 2017-07-23 02:24:42 +0000 @@ -2,20 +2,19 @@ #include #include wchar_t * -wcsrchr(const wchar_t *s, int c) +wcsrchr(const wchar_t *s, wchar_t c) { - wchar_t cc = c; - const wchar_t *sp=(wchar_t *)0; + const wchar_t *sp = (wchar_t *)0; while (*s) { - if (*s == cc) + if (*s == c) sp = s; s++; } - if (cc == 0) + if (c == 0) sp = s; return unconst(sp, wchar_t *); } diff -aprNU5 wchar.orig/src/libc/ansi/wchar/wcsrchr.txh wchar/src/libc/ansi/wchar/wcsrchr.txh --- wchar.orig/src/libc/ansi/wchar/wcsrchr.txh 1998-09-13 11:10:24 +0000 +++ wchar/src/libc/ansi/wchar/wcsrchr.txh 2017-07-23 12:37:36 +0000 @@ -14,10 +14,14 @@ This function finds the last occurrence @subheading Return Value A pointer to the last match, or @code{NULL} if the wide character isn't in the wide string. +@subheading Portability + +@portability ansi, posix + @subheading Example @example wchar_t *last_slash = wcschr(filename, L'/'); @end example diff -aprNU5 wchar.orig/src/libc/ansi/wchar/wcsspn.txh wchar/src/libc/ansi/wchar/wcsspn.txh --- wchar.orig/src/libc/ansi/wchar/wcsspn.txh 1998-09-11 00:01:36 +0000 +++ wchar/src/libc/ansi/wchar/wcsspn.txh 2017-07-23 12:38:18 +0000 @@ -16,10 +16,14 @@ wide string if nothing else. @subheading Return Value The index of the found character. +@subheading Portability + +@portability ansi, posix + @subheading Example @example int i = wcsspn(entry, L" \t\b"); if (entry[i]) diff -aprNU5 wchar.orig/src/libc/ansi/wchar/wcsstr.txh wchar/src/libc/ansi/wchar/wcsstr.txh --- wchar.orig/src/libc/ansi/wchar/wcsstr.txh 1998-09-10 23:59:56 +0000 +++ wchar/src/libc/ansi/wchar/wcsstr.txh 2017-07-23 12:38:38 +0000 @@ -13,10 +13,14 @@ This function finds the first occurrence @subheading Return Value A pointer within @var{s1}, or @code{NULL} if @var{s2} wasn't found. +@subheading Portability + +@portability ansi, posix + @subheading Example @example if (wcsstr(command, L".exe")) do_exe(); diff -aprNU5 wchar.orig/src/libc/ansi/wchar/wcstok.c wchar/src/libc/ansi/wchar/wcstok.c --- wchar.orig/src/libc/ansi/wchar/wcstok.c 1998-09-09 20:37:38 +0000 +++ wchar/src/libc/ansi/wchar/wcstok.c 2017-07-23 03:56:54 +0000 @@ -1,18 +1,16 @@ /* Copyright (C) 1998 DJ Delorie, see COPYING.DJ for details */ #include wchar_t * -wcstok(wchar_t *s, const wchar_t *delim) +wcstok(wchar_t *s, const wchar_t *delim, wchar_t **last) { const wchar_t *spanp; int c, sc; wchar_t *tok; - static wchar_t *last; - - if (s == NULL && (s = last) == NULL) + if (s == NULL && (s = *last) == NULL) return (NULL); /* * Skip (span) leading delimiters (s += strspn(s, delim), sort of). */ @@ -40,11 +38,11 @@ wcstok(wchar_t *s, const wchar_t *delim) if ((sc = *spanp++) == c) { if (c == 0) s = NULL; else s[-1] = 0; - last = s; + *last = s; return (tok); } } while (sc != 0); } /* NOTREACHED */ diff -aprNU5 wchar.orig/src/libc/ansi/wchar/wcstok.txh wchar/src/libc/ansi/wchar/wcstok.txh --- wchar.orig/src/libc/ansi/wchar/wcstok.txh 1998-09-11 00:18:48 +0000 +++ wchar/src/libc/ansi/wchar/wcstok.txh 2017-07-23 03:39:56 +0000 @@ -2,39 +2,49 @@ @subheading Syntax @example #include -char *wcstok(wchar_t *s1, const wchar_t *s2); +char *wcstok(wchar_t *s1, const wchar_t *s2, char **s3); @end example @subheading Description This function retrieves tokens from @var{s1} which are delimited by -wide characters from @var{s2}. +characters from @var{s2}. It uses @var{s3} to track how far in +@var{s1} the search has progressed. To initiate the search, pass the string to be searched as @var{s1}. For -the remaining tokens, pass @code{NULL} instead. +the remaining tokens, pass @code{NULL} instead. @subheading Return Value A pointer to the token, or @code{NULL} if no more are found. +@subheading Portability + +@portability posix + @subheading Example @example +#include +#include + main() @{ wchar_t *buf = L"Hello there, stranger"; - wchar_t *tok; + wchar_t *tok, *where; size_t word_count = 0; - for (tok = wcstok(buf, L" "); + for (tok = wcstok(buf, L" ,", &where); tok; - tok=wcstok(0, L" ")) - ++word_count; + tok=wcstok(NULL, L" ,", &where)) + printf("tok = `%s'\n", tok); - ++word_count; + return 0; @} -word_count = 3 +tok = `Hello' +tok = `there' +tok = `stranger' @end example diff -aprNU5 wchar.orig/src/libc/ansi/wchar/wcsxfrm.txh wchar/src/libc/ansi/wchar/wcsxfrm.txh --- wchar.orig/src/libc/ansi/wchar/wcsxfrm.txh 1998-09-10 23:55:38 +0000 +++ wchar/src/libc/ansi/wchar/wcsxfrm.txh 2017-07-23 12:38:50 +0000 @@ -16,6 +16,11 @@ the locale such that @code{wcscmp(s1b, s transforms of @code{s1} and @code{s2}. @subheading Return Value The actual number of bytes required to transform @var{s2}, including the -@code{NULL}. +@code{NULL}. + +@subheading Portability + +@portability ansi, posix + diff -aprNU5 wchar.orig/src/libc/ansi/wchar/wmemcmp.c wchar/src/libc/ansi/wchar/wmemcmp.c --- wchar.orig/src/libc/ansi/wchar/wmemcmp.c 1998-09-09 20:51:50 +0000 +++ wchar/src/libc/ansi/wchar/wmemcmp.c 2017-07-23 02:33:22 +0000 @@ -1,7 +1,9 @@ +/* Copyright (C) 2017 DJ Delorie, see COPYING.DJ for details */ /* Copyright (C) 1998 DJ Delorie, see COPYING.DJ for details */ #include +#include int wmemcmp(const wchar_t *s1, const wchar_t *s2, size_t n) { return memcmp(s1, s2, n * sizeof(wchar_t)); diff -aprNU5 wchar.orig/src/libc/ansi/wchar/wmemset.c wchar/src/libc/ansi/wchar/wmemset.c --- wchar.orig/src/libc/ansi/wchar/wmemset.c 1998-09-11 10:01:16 +0000 +++ wchar/src/libc/ansi/wchar/wmemset.c 2017-07-23 02:29:42 +0000 @@ -5,11 +5,11 @@ wchar_t * wmemset(wchar_t *_str, wchar_t c, size_t n) { /* Since wchar_t is a long, there isn't much to be gained with assembly */ /* like this function's parallel memset, except with some loop unrolling */ - int i; - for (i=0; i