aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ChangeLog95
-rw-r--r--sysdeps/libm-ieee754/s_signgam.c3
-rw-r--r--sysdeps/libm-ieee754/w_gamma.c10
-rw-r--r--wchar.h1
-rw-r--r--wcsmbs/btowc.c36
-rw-r--r--wcsmbs/mbrlen.c35
-rw-r--r--wcsmbs/mbrtowc.c61
-rw-r--r--wcsmbs/mbsinit.c33
-rw-r--r--wcsmbs/mbsrtowcs.c57
-rw-r--r--wcsmbs/wchar.h168
-rw-r--r--wcsmbs/wcrtomb.c60
-rw-r--r--wcsmbs/wcsrtombs.c64
-rw-r--r--wcsmbs/wcsstr.c97
-rw-r--r--wcsmbs/wctob.c34
-rw-r--r--wcsmbs/wmemchr.c62
-rw-r--r--wcsmbs/wmemcmp.c84
-rw-r--r--wcsmbs/wmemcpy.c31
-rw-r--r--wcsmbs/wmemmove.c31
-rw-r--r--wcsmbs/wmemset.c55
19 files changed, 1010 insertions, 7 deletions
diff --git a/ChangeLog b/ChangeLog
index 42f7e4be81..f8c952fa76 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,98 @@
+Mon Apr 1 13:34:55 1996 Roland McGrath <roland@whiz-bang.gnu.ai.mit.edu>
+
+ * stdio-common/tst-printf.c (main): Add new test case.
+
+ * sysdeps/generic/setenv.c (unsetenv): Use old-style definition.
+
+Mon Apr 1 11:39:10 Ulrich Drepper <drepper@gnu.ai.mit.edu>
+
+ * stdlib/strtod.c (STRTOD): Fix handling of American style FP
+ numbers.
+
+ * stdio-common/vfprintf.c (vfprintf): Don't increment format
+ string pointer twice after seeing `*'.
+
+Sun Mar 31 17:31:54 1996 Roland McGrath <roland@whiz-bang.gnu.ai.mit.edu>
+
+ * MakeTAGS (po/SYS_libc.pot): Prepend header processed from
+ po/header.pot.
+
+Sun Mar 31 18:07:32 1996 Ulrich Drepper <drepper@gnu.ai.mit.edu>
+
+ * locale/Makefile (others, install-bin): Compiling locale works
+ again.
+ (locale-modules): locale has no --dump option anymore. Remove
+ ctypedump.
+
+ * locale/programs/config.h: Don't declare euidaccess.
+ Use #include_next to get libc's config.h.
+
+ * locale/programs/ctypedump.c: Not needed anymore. Dump option
+ of locale is removed.
+
+ * locale/programs/locale.c: Adapt for new locale implementation.
+
+ * stdio-common/_itoa.h (_itoa_word): Define as inline function.
+ * stdio-common/_itoa.c (_itoa_lower_digits, _itoa_upper_digits):
+ Don't declare static because used in _itoa_word inline function.
+
+ * stdio-common/printf-parse.h: Prepare for use in wide-char
+ stdio implementation.
+ (find_spec): Take additional argument to work with mbrlen instead
+ of mblen.
+ (parse_one_spec): Ditto.
+
+ * stdio-common/printf-prs.c: Prepare for use in wide-char
+ stdio implementation.
+
+ * stdio-common/printf.h: Mark change for wide-char handling.
+ Changing it now would result in incompatibilities.
+
+ * stdio-common/vfprintf.c: New and fast implementation.
+
+ * wcsmbs/Makefile (routines): Remove pre-ISO C multibyte functions
+ mbsadvance, mbscat, mbschr, mbscmp, mbscpy, mbsdup, mbslen,
+ mbsncat, mbsncmp, mbsncpy, mbsrchr, mbstomb.
+ Change wcswcs to wcsstr.
+ Add wmemchr, wmemcmp, wmemcpy, wmemmove, wmemset, btowc, wctob,
+ mbsinit, mbrlen, mbrtowc, wcrtomb, mbsrtowcs, wcsrtombs.
+
+ * wcsmbs/btowc.c, wcsmbs/mbrlen.c, wcsmbs/mbrtowc.c,
+ wcsmbs/mbsinit.c, wcsmbs/mbsrtowcs.c, wcsmbs/wchar.h,
+ wcsmbs/wcrtomb.c, wcsmbs/wcsrtombs.c, wcsmbs/wcsstr.c,
+ wcsmbs/wctob.c, wcsmbs/wmemchr.c, wcsmbs/wmemcmp.c,
+ wcsmbs/wmemcpy.c, wcsmbs/wmemmove.c, wcsmbs/wmemset.c: New
+ function according to ISO C amendment 1.
+ * wchar.h: Wrapper around "wcsmbs/wchar.h".
+
+ * wcsmbs/wcscat.c, wcsmbs/wcschr.c, wcsmbs/wcscmp.c,
+ wcsmbs/wcscpy.c, wcsmbs/wcscspn.c, wcsmbs/wcsdup.c,
+ wcsmbs/wcslen.c, wcsmbs/wcsncat.c, wcsmbs/wcsncmp.c,
+ wcsmbs/wcsncpy.c, wcsmbs/wcspbrk.c, wcsmbs/wcsrchr.c,
+ wcsmbs/wcsspn.c, wcsmbs/wcstok.c: Changed to conform with ISO C
+ amendment 1.
+
+ * wcsmbs/mbsadvance.c, wcsmbs/mbscat.c, wcsmbs/mbschr.c,
+ wcsmbs/mbscmp.c, wcsmbs/mbscpy.c, wcsmbs/mbsdup.c,
+ wcsmbs/mbslen.c, wcsmbs/mbsncat.c, wcsmbs/mbsncmp.c,
+ wcsmbs/mbsncpy.c, wcsmbs/mbsrchr.c, wcsmbs/mbstomb.c,
+ wcsmbs/mbstr.h, wcsmbs/wcstr.h, wcsmbs/wcswcs.c: Removed.
+ Implement functions from early drafts, not part of final standard.
+
+Sun Mar 31 16:50:41 1996 Roland McGrath <roland@whiz-bang.gnu.ai.mit.edu>
+
+ * setjmp/setjmp.h (jmp_buf): Change gratuitous struct tag name to
+ __jmp_bug_tag so its C++ implicit typedef does not conflict with the
+ __jmp_buf typedef.
+
+ * Makerules (BUILD_CFLAGS) [! objdir]: Use $(..)config.h when
+ compiling in the source directories.
+
+Fri Mar 29 16:26:35 1996 Roland McGrath <roland@whiz-bang.gnu.ai.mit.edu>
+
+ * sysdeps/libm-ieee754/w_gamma.c: Use signgam instead of __signgam.
+ * sysdeps/libm-ieee754/s_signgam.c: Undo last change.
+
Fri Mar 29 11:29:46 1996 Roland McGrath <roland@charlie-brown.gnu.ai.mit.edu>
* sysdeps/libm-ieee754/s_signgam.c (signgam): Renamed to __signgam,
diff --git a/sysdeps/libm-ieee754/s_signgam.c b/sysdeps/libm-ieee754/s_signgam.c
index 2ab5924a2a..d67d5918ec 100644
--- a/sysdeps/libm-ieee754/s_signgam.c
+++ b/sysdeps/libm-ieee754/s_signgam.c
@@ -1,4 +1,3 @@
#include "math.h"
#include "math_private.h"
-int __signgam = 0;
-weak_alias (__signgam, signgam)
+int signgam = 0;
diff --git a/sysdeps/libm-ieee754/w_gamma.c b/sysdeps/libm-ieee754/w_gamma.c
index de618b38ed..8a0a18079a 100644
--- a/sysdeps/libm-ieee754/w_gamma.c
+++ b/sysdeps/libm-ieee754/w_gamma.c
@@ -5,7 +5,7 @@
*
* Developed at SunPro, a Sun Microsystems, Inc. business.
* Permission to use, copy, modify, and distribute this
- * software is freely granted, provided that this notice
+ * software is freely granted, provided that this notice
* is preserved.
* ====================================================
*/
@@ -23,7 +23,7 @@ static char rcsid[] = "$NetBSD: w_gamma.c,v 1.7 1995/11/20 22:06:43 jtc Exp $";
#include "math.h"
#include "math_private.h"
-extern int __signgam;
+extern int signgam;
#ifdef __STDC__
double __gamma(double x)
@@ -33,10 +33,10 @@ extern int __signgam;
#endif
{
#ifdef _IEEE_LIBM
- return __ieee754_lgamma_r(x,&__signgam);
+ return __ieee754_lgamma_r(x,&signgam);
#else
double y;
- y = __ieee754_lgamma_r(x,&__signgam);
+ y = __ieee754_lgamma_r(x,&signgam);
if(_LIB_VERSION == _IEEE_) return y;
if(!__finite(y)&&__finite(x)) {
if(__floor(x)==x&&x<=0.0)
@@ -46,5 +46,5 @@ extern int __signgam;
} else
return y;
#endif
-}
+}
weak_alias (__gamma, gamma)
diff --git a/wchar.h b/wchar.h
new file mode 100644
index 0000000000..c87ffb851b
--- /dev/null
+++ b/wchar.h
@@ -0,0 +1 @@
+#include <wcsmbs/wchar.h>
diff --git a/wcsmbs/btowc.c b/wcsmbs/btowc.c
new file mode 100644
index 0000000000..062be7ec02
--- /dev/null
+++ b/wcsmbs/btowc.c
@@ -0,0 +1,36 @@
+/* Copyright (C) 1996 Free Software Foundation, Inc.
+This file is part of the GNU C Library.
+Contributed by Ulrich Drepper, <drepper@gnu.ai.mit.edu>
+
+The GNU C Library is free software; you can redistribute it and/or
+modify it under the terms of the GNU Library General Public License as
+published by the Free Software Foundation; either version 2 of the
+License, or (at your option) any later version.
+
+The GNU C Library is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+Library General Public License for more details.
+
+You should have received a copy of the GNU Library General Public
+License along with the GNU C Library; see the file COPYING.LIB. If
+not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+Boston, MA 02111-1307, USA. */
+
+#include <stdio.h>
+#include <wchar.h>
+
+
+wint_t
+btowc (c)
+ int c;
+{
+ /*************************************************************\
+ |* This is no complete implementation. While the multi-byte *|
+ |* character handling is not finished this will do. *|
+ \*************************************************************/
+ if (WEOF != (wint_t) EOF)
+ return WEOF;
+ else
+ return c;
+}
diff --git a/wcsmbs/mbrlen.c b/wcsmbs/mbrlen.c
new file mode 100644
index 0000000000..a50631e8d1
--- /dev/null
+++ b/wcsmbs/mbrlen.c
@@ -0,0 +1,35 @@
+/* Copyright (C) 1996 Free Software Foundation, Inc.
+This file is part of the GNU C Library.
+Contributed by Ulrich Drepper, <drepper@gnu.ai.mit.edu>
+
+The GNU C Library is free software; you can redistribute it and/or
+modify it under the terms of the GNU Library General Public License as
+published by the Free Software Foundation; either version 2 of the
+License, or (at your option) any later version.
+
+The GNU C Library is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+Library General Public License for more details.
+
+You should have received a copy of the GNU Library General Public
+License along with the GNU C Library; see the file COPYING.LIB. If
+not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+Boston, MA 02111-1307, USA. */
+
+#include <wchar.h>
+
+
+/* The mbrlen function has an internal shift state which gets used if
+ the PS parameter is NULL. */
+static mbstate_t internal;
+
+
+size_t
+mbrlen (s, n, ps)
+ const char *s;
+ size_t n;
+ mbstate_t *ps;
+{
+ return mbrtowc (NULL, s, n, ps ?: &internal);
+}
diff --git a/wcsmbs/mbrtowc.c b/wcsmbs/mbrtowc.c
new file mode 100644
index 0000000000..17083196bd
--- /dev/null
+++ b/wcsmbs/mbrtowc.c
@@ -0,0 +1,61 @@
+/* Copyright (C) 1996 Free Software Foundation, Inc.
+This file is part of the GNU C Library.
+Contributed by Ulrich Drepper, <drepper@gnu.ai.mit.edu>
+
+The GNU C Library is free software; you can redistribute it and/or
+modify it under the terms of the GNU Library General Public License as
+published by the Free Software Foundation; either version 2 of the
+License, or (at your option) any later version.
+
+The GNU C Library is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+Library General Public License for more details.
+
+You should have received a copy of the GNU Library General Public
+License along with the GNU C Library; see the file COPYING.LIB. If
+not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+Boston, MA 02111-1307, USA. */
+
+#include <wchar.h>
+
+
+size_t
+mbrtowc (pwc, s, n, ps)
+ wchar_t *pwc;
+ const char *s;
+ size_t n;
+ mbstate_t *ps;
+{
+ wchar_t to_wide;
+
+ /*************************************************************\
+ |* This is no complete implementation. While the multi-byte *|
+ |* character handling is not finished this will do. *|
+ \*************************************************************/
+
+ if (s == NULL)
+ {
+ pwc = NULL;
+ s = "";
+ n = 1;
+ }
+
+ if (n == 0)
+ return (size_t) -2;
+
+ /* For now. */
+ to_wide = (wchar_t) *s;
+
+ if (pwc != NULL)
+ *pwc = to_wide;
+
+ if (pwc == L'\0')
+ {
+ *ps = 0; /* This is required. */
+ return 0;
+ }
+
+ /* Return code (size_t)-1 cannot happend for now. */
+ return 1;
+}
diff --git a/wcsmbs/mbsinit.c b/wcsmbs/mbsinit.c
new file mode 100644
index 0000000000..d9f01256d5
--- /dev/null
+++ b/wcsmbs/mbsinit.c
@@ -0,0 +1,33 @@
+/* Copyright (C) 1996 Free Software Foundation, Inc.
+This file is part of the GNU C Library.
+Contributed by Ulrich Drepper, <drepper@gnu.ai.mit.edu>
+
+The GNU C Library is free software; you can redistribute it and/or
+modify it under the terms of the GNU Library General Public License as
+published by the Free Software Foundation; either version 2 of the
+License, or (at your option) any later version.
+
+The GNU C Library is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+Library General Public License for more details.
+
+You should have received a copy of the GNU Library General Public
+License along with the GNU C Library; see the file COPYING.LIB. If
+not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+Boston, MA 02111-1307, USA. */
+
+#include <wchar.h>
+
+
+int
+mbsinit (ps)
+ const mbstate_t *ps;
+{
+ /*************************************************************\
+ |* This is no complete implementation. While the multi-byte *|
+ |* character handling is not finished this will do. *|
+ \*************************************************************/
+
+ return *ps == 0;
+}
diff --git a/wcsmbs/mbsrtowcs.c b/wcsmbs/mbsrtowcs.c
new file mode 100644
index 0000000000..cb87938e5d
--- /dev/null
+++ b/wcsmbs/mbsrtowcs.c
@@ -0,0 +1,57 @@
+/* Copyright (C) 1996 Free Software Foundation, Inc.
+This file is part of the GNU C Library.
+Contributed by Ulrich Drepper, <drepper@gnu.ai.mit.edu>
+
+The GNU C Library is free software; you can redistribute it and/or
+modify it under the terms of the GNU Library General Public License as
+published by the Free Software Foundation; either version 2 of the
+License, or (at your option) any later version.
+
+The GNU C Library is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+Library General Public License for more details.
+
+You should have received a copy of the GNU Library General Public
+License along with the GNU C Library; see the file COPYING.LIB. If
+not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+Boston, MA 02111-1307, USA. */
+
+#include <wchar.h>
+
+
+size_t
+mbsrtowcs (dst, src, len, ps)
+ wchar_t *dst;
+ const char **src;
+ size_t len;
+ mbstate_t *ps;
+{
+ size_t result = 0;
+ /*************************************************************\
+ |* This is no complete implementation. While the multi-byte *|
+ |* character handling is not finished this will do. *|
+ \*************************************************************/
+
+ while (len > 0 && **src != '\0')
+ {
+ /* For now there is no possibly illegal MB char sequence. */
+ if (dst != NULL)
+ dst[result] = (wchar_t) **src;
+ ++result;
+ ++(*src);
+ --len;
+ }
+
+ if (len > 0)
+ {
+ if (dst != NULL)
+ {
+ dst[result] = L'\0';
+ *ps = 0;
+ }
+ *src = NULL;
+ }
+
+ return result;
+}
diff --git a/wcsmbs/wchar.h b/wcsmbs/wchar.h
new file mode 100644
index 0000000000..69ad2d3c67
--- /dev/null
+++ b/wcsmbs/wchar.h
@@ -0,0 +1,168 @@
+/* Copyright (C) 1995, 1996 Free Software Foundation, Inc.
+This file is part of the GNU C Library.
+
+The GNU C Library is free software; you can redistribute it and/or
+modify it under the terms of the GNU Library General Public License as
+published by the Free Software Foundation; either version 2 of the
+License, or (at your option) any later version.
+
+The GNU C Library is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+Library General Public License for more details.
+
+You should have received a copy of the GNU Library General Public
+License along with the GNU C Library; see the file COPYING.LIB. If
+not, write to the Free Software Foundation, Inc., 675 Mass Ave,
+Cambridge, MA 02139, USA. */
+
+/*
+ * ISO Standard: 7.16.4 General wide-string utilities <wchar.h>
+ */
+
+#ifndef _WCHAR_H
+
+#define _WCHAR_H 1
+#include <features.h>
+
+__BEGIN_DECLS
+
+/* Get size_t, wchar_t, uwchar_t and NULL from <stddef.h>. */
+#define __need_size_t
+#define __need_wchar_t
+/* #define __need_uwchar_t */
+#define __need_NULL
+/* __need_WCHAR_MAX */
+/* __need_WCHAR_MIN */
+#include <stddef.h>
+
+/* FIXME: Should go with this or another name in stddef.h. */
+typedef unsigned int uwchar_t;
+
+/* Conversion state information. */
+typedef int mbstate_t; /* FIXME */
+
+/* Should come from <stddef.h> */
+#define WCHAR_MIN ((wchar_t) 0) /* FIXME */
+#define WCHAR_MAX (~WCHAR_MIN) /* FIXME */
+
+#ifndef WEOF
+# define WEOF (0xffffffffu)
+#endif
+
+/* FIXME: should this go into <stddef.h>??? */
+#if 0
+#define __need_wint_t
+#include <stddef.h>
+#else
+/* Integral type unchanged by default argument promotions that can
+ hold any value corresponding to members of the extended character
+ set, as well as at least one value that does not correspond to any
+ member of the extended character set. */
+typedef unsigned int wint_t;
+#endif
+
+
+/* Copy SRC to DEST. */
+extern wchar_t *wcscpy __P ((wchar_t *__dest, __const wchar_t *__src));
+/* Copy no more than N wide-characters of SRC to DEST. */
+extern wchar_t *wcsncpy __P ((wchar_t *__dest, __const wchar_t *__src,
+ size_t __n));
+
+/* Append SRC onto DEST. */
+extern wchar_t *wcscat __P ((wchar_t *__dest, __const wchar_t *__src));
+/* Append no more than N wide-characters of SRC onto DEST. */
+extern wchar_t *wcsncat __P ((wchar_t *__dest, __const wchar_t *__src,
+ size_t __n));
+
+/* Compare S1 and S2. */
+extern int wcscmp __P ((__const wchar_t *__s1, __const wchar_t *__s2));
+/* Compare N wide-characters of S1 and S2. */
+extern int wcsncmp __P ((__const wchar_t *__s1, __const wchar_t *__s2,
+ size_t __n));
+
+/* Duplicate S, returning an identical malloc'd string. */
+extern wchar_t *wcsdup __P ((__const wchar_t *__s));
+
+/* Find the first occurence of WC in WCS. */
+extern wchar_t *wcschr __P ((__const wchar_t *__wcs, wchar_t __wc));
+/* Find the last occurence of WC in WCS. */
+extern wchar_t *wcsrchr __P ((__const wchar_t *__wcs, wchar_t __wc));
+
+/* Return the length of the initial segmet of WCS which
+ consists entirely of wide-characters not in REJECT. */
+extern size_t wcscspn __P ((__const wchar_t *__wcs,
+ __const wchar_t *__reject));
+/* Return the length of the initial segmet of WCS which
+ consists entirely of wide-characters in ACCEPT. */
+extern size_t wcsspn __P ((__const wchar_t *__wcs, __const wchar_t *__accept));
+/* Find the first occurence in WCS of any character in ACCEPT. */
+extern wchar_t *wcspbrk __P ((__const wchar_t *__wcs,
+ __const wchar_t *__accept));
+/* Find the first occurence of NEEDLE in HAYSTACK. */
+extern wchar_t *wcsstr __P ((__const wchar_t *__haystack,
+ __const wchar_t *__needle));
+/* Divide WCS into tokens separated by characters in DELIM. */
+extern wchar_t *wcstok __P ((wchar_t *__s, __const wchar_t *__delim,
+ wchar_t **ptr));
+
+/* Return the number of wide-characters in S. */
+extern size_t wcslen __P ((__const wchar_t *__s));
+
+
+/* Search N bytes of S for C. */
+extern wchar_t *wmemchr __P ((__const wchar_t *__s, wchar_t __c, size_t __n));
+
+/* Compare N bytes of S1 and S2. */
+extern int wmemcmp __P ((__const wchar_t *__s1, __const wchar_t *__s2,
+ size_t __n));
+
+/* Copy N bytes of SRC to DEST. */
+extern wchar_t *wmemcpy __P ((wchar_t *__s1, __const wchar_t *__s2,
+ size_t __n));
+
+/* Copy N bytes of SRC to DEST, guaranteeing
+ correct behavior for overlapping strings. */
+extern wchar_t *wmemmove __P ((wchar_t *__s1, __const wchar_t *__s2,
+ size_t __N));
+
+/* Set N bytes of S to C. */
+extern wchar_t *wmemset __P ((wchar_t *__s, wchar_t __c, size_t __n));
+
+
+/* Determine whether C constitutes a valid (one-byte) multibyte
+ character. */
+extern wint_t btowc __P ((int __c));
+
+/* Determine whether C corresponds to a member of the extended
+ character set whose multibyte representation is a single byte. */
+extern int wctob __P ((wint_t __c));
+
+/* Determine whether PS points to an object representing the initial
+ state. */
+extern int mbsinit __P ((__const mbstate_t *__ps));
+
+/* Return number of bytes in multibyte character pointed to by S. */
+extern size_t mbrlen __P ((__const char *__s, size_t __n, mbstate_t *ps));
+
+/* Write wide character representation of multibyte character pointed
+ to by S to PWC. */
+extern size_t mbrtowc __P ((wchar_t *__pwc, __const char *__s, size_t __n,
+ mbstate_t *__p));
+
+/* Write multibyte representation of wide character WC to S. */
+extern size_t wcrtomb __P ((char *__s, wchar_t __wc, mbstate_t *__ps));
+
+/* Write wide character representation of multibyte chracter string SRC
+ to DST. */
+extern size_t mbsrtowcs __P ((wchar_t *__dst, __const char **__src,
+ size_t __len, mbstate_t *__ps));
+
+/* Write multibyte character representation of wide character string
+ SRC to DST. */
+extern size_t wcsrtombs __P ((char *__dst, __const wchar_t **__src,
+ size_t __len, mbstate_t *__ps));
+
+__END_DECLS
+
+#endif /* wchar.h */
diff --git a/wcsmbs/wcrtomb.c b/wcsmbs/wcrtomb.c
new file mode 100644
index 0000000000..493e08f77d
--- /dev/null
+++ b/wcsmbs/wcrtomb.c
@@ -0,0 +1,60 @@
+/* Copyright (C) 1996 Free Software Foundation, Inc.
+This file is part of the GNU C Library.
+Contributed by Ulrich Drepper, <drepper@gnu.ai.mit.edu>
+
+The GNU C Library is free software; you can redistribute it and/or
+modify it under the terms of the GNU Library General Public License as
+published by the Free Software Foundation; either version 2 of the
+License, or (at your option) any later version.
+
+The GNU C Library is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+Library General Public License for more details.
+
+You should have received a copy of the GNU Library General Public
+License along with the GNU C Library; see the file COPYING.LIB. If
+not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+Boston, MA 02111-1307, USA. */
+
+#include <errno.h>
+#include <wchar.h>
+
+
+size_t
+wcrtomb (s, wc, ps)
+ char *s;
+ wchar_t wc;
+ mbstate_t *ps;
+{
+ /*************************************************************\
+ |* This is no complete implementation. While the multi-byte *|
+ |* character handling is not finished this will do. *|
+ \*************************************************************/
+
+ char fake[1];
+
+ if (s == NULL)
+ {
+ s = fake;
+ wc = L'\0';
+ }
+
+ if (wc == L'\0')
+ {
+ /* FIXME Write any shift sequence to get to *PS == NULL. */
+ *ps = 0;
+ *s = '\0';
+ return 1;
+ }
+
+ /* FIXME For now we don't handle real multi-byte encodings. */
+ if ((wc & ~0xff) != 0)
+ {
+ errno = EILSEQ;
+ return (size_t) -1;
+ }
+
+ *s = (char) wc;
+ return 1;
+}
diff --git a/wcsmbs/wcsrtombs.c b/wcsmbs/wcsrtombs.c
new file mode 100644
index 0000000000..612a86d437
--- /dev/null
+++ b/wcsmbs/wcsrtombs.c
@@ -0,0 +1,64 @@
+/* Copyright (C) 1996 Free Software Foundation, Inc.
+This file is part of the GNU C Library.
+Contributed by Ulrich Drepper, <drepper@gnu.ai.mit.edu>
+
+The GNU C Library is free software; you can redistribute it and/or
+modify it under the terms of the GNU Library General Public License as
+published by the Free Software Foundation; either version 2 of the
+License, or (at your option) any later version.
+
+The GNU C Library is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+Library General Public License for more details.
+
+You should have received a copy of the GNU Library General Public
+License along with the GNU C Library; see the file COPYING.LIB. If
+not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+Boston, MA 02111-1307, USA. */
+
+#include <errno.h>
+#include <wchar.h>
+
+
+size_t
+wcsrtombs (dst, src, len, ps)
+ char *dst;
+ const wchar_t **src;
+ size_t len;
+ mbstate_t *ps;
+{
+ size_t result = 0;
+
+ /*************************************************************\
+ |* This is no complete implementation. While the multi-byte *|
+ |* character handling is not finished this will do. *|
+ \*************************************************************/
+
+ while (len > 0 && **src != L'\0')
+ {
+ if ((**src & ~0xff) != 0)
+ {
+ errno = EILSEQ;
+ return (size_t) -1;
+ }
+
+ if (dst != NULL)
+ dst[result] = (char) **src;
+ ++result;
+ ++(*src);
+ --len;
+ }
+
+ if (len > 0)
+ {
+ if (dst != NULL)
+ {
+ dst[result] = '\0';
+ *ps = 0;
+ }
+ *src = NULL;
+ }
+
+ return result;
+}
diff --git a/wcsmbs/wcsstr.c b/wcsmbs/wcsstr.c
new file mode 100644
index 0000000000..d2c863fff3
--- /dev/null
+++ b/wcsmbs/wcsstr.c
@@ -0,0 +1,97 @@
+/* Copyright (C) 1995, 1996 Free Software Foundation, Inc.
+This file is part of the GNU C Library.
+
+The GNU C Library is free software; you can redistribute it and/or
+modify it under the terms of the GNU Library General Public License as
+published by the Free Software Foundation; either version 2 of the
+License, or (at your option) any later version.
+
+The GNU C Library is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+Library General Public License for more details.
+
+You should have received a copy of the GNU Library General Public
+License along with the GNU C Library; see the file COPYING.LIB. If
+not, write to the Free Software Foundation, Inc., 675 Mass Ave,
+Cambridge, MA 02139, USA. */
+
+/*
+ * The original strstr() file contains the following comment:
+ *
+ * My personal strstr() implementation that beats most other algorithms.
+ * Until someone tells me otherwise, I assume that this is the
+ * fastest implementation of strstr() in C.
+ * I deliberately chose not to comment it. You should have at least
+ * as much fun trying to understand it, as I had to write it :-).
+ *
+ * Stephen R. van den Berg, berg@pool.informatik.rwth-aachen.de */
+
+#include <wchar.h>
+
+wchar_t *
+wcsstr (haystack, needle)
+ const wchar_t *haystack;
+ const wchar_t *needle;
+{
+ register wchar_t b, c;
+
+ if ((b = *needle) != L'\0')
+ {
+ haystack--; /* possible ANSI violation */
+ do
+ if ((c = *++haystack) == L'\0')
+ goto ret0;
+ while (c != b);
+
+ if (!(c = *++needle))
+ goto foundneedle;
+ ++needle;
+ goto jin;
+
+ for (;;)
+ {
+ register wchar_t a;
+ register const wchar_t *rhaystack, *rneedle;
+
+ do
+ {
+ if (!(a = *++haystack))
+ goto ret0;
+ if (a == b)
+ break;
+ if ((a = *++haystack) == L'\0')
+ goto ret0;
+shloop: ;
+ }
+ while (a != b);
+
+jin: if (!(a = *++haystack))
+ goto ret0;
+
+ if (a != c)
+ goto shloop;
+
+ if (*(rhaystack = haystack-- + 1) == (a = *(rneedle = needle)))
+ do
+ {
+ if (a == L'\0')
+ goto foundneedle;
+ if (*++rhaystack != (a = *++needle))
+ break;
+ if (a == L'\0')
+ goto foundneedle;
+ }
+ while (*++rhaystack == (a = *++needle));
+
+ needle = rneedle; /* took the register-poor approach */
+
+ if (a == L'\0')
+ break;
+ }
+ }
+foundneedle:
+ return (wchar_t*) haystack;
+ret0:
+ return NULL;
+}
diff --git a/wcsmbs/wctob.c b/wcsmbs/wctob.c
new file mode 100644
index 0000000000..c27bd6baba
--- /dev/null
+++ b/wcsmbs/wctob.c
@@ -0,0 +1,34 @@
+/* Copyright (C) 1996 Free Software Foundation, Inc.
+This file is part of the GNU C Library.
+Contributed by Ulrich Drepper, <drepper@gnu.ai.mit.edu>
+
+The GNU C Library is free software; you can redistribute it and/or
+modify it under the terms of the GNU Library General Public License as
+published by the Free Software Foundation; either version 2 of the
+License, or (at your option) any later version.
+
+The GNU C Library is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+Library General Public License for more details.
+
+You should have received a copy of the GNU Library General Public
+License along with the GNU C Library; see the file COPYING.LIB. If
+not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+Boston, MA 02111-1307, USA. */
+
+#include <stdio.h>
+#include <wchar.h>
+
+
+int
+wctob (c)
+ wint_t c;
+{
+ /*************************************************************\
+ |* This is no complete implementation. While the multi-byte *|
+ |* character handling is not finished this will do. *|
+ \*************************************************************/
+
+ return (c & ~0xff) == 0 ? c : EOF;
+}
diff --git a/wcsmbs/wmemchr.c b/wcsmbs/wmemchr.c
new file mode 100644
index 0000000000..67c407836d
--- /dev/null
+++ b/wcsmbs/wmemchr.c
@@ -0,0 +1,62 @@
+/* Copyright (C) 1996 Free Software Foundation, Inc.
+This file is part of the GNU C Library.
+Contributed by Ulrich Drepper, <drepper@gnu.ai.mit.edu>.
+
+The GNU C Library is free software; you can redistribute it and/or
+modify it under the terms of the GNU Library General Public License as
+published by the Free Software Foundation; either version 2 of the
+License, or (at your option) any later version.
+
+The GNU C Library is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+Library General Public License for more details.
+
+You should have received a copy of the GNU Library General Public
+License along with the GNU C Library; see the file COPYING.LIB. If
+not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+Boston, MA 02111-1307, USA. */
+
+#include <wchar.h>
+
+wchar_t *
+wmemchr (s, c, n)
+ register const wchar_t *s;
+ register wchar_t c;
+ register size_t n;
+{
+ /* For performance reasons unfold the loop four times. */
+ while (n >= 4)
+ {
+ if (s[0] == c)
+ return (wchar_t *) s;
+ if (s[1] == c)
+ return (wchar_t *) &s[1];
+ if (s[2] == c)
+ return (wchar_t *) &s[2];
+ if (s[3] == c)
+ return (wchar_t *) &s[3];
+ s += 4;
+ n -= 4;
+ }
+
+ if (n > 0)
+ {
+ if (*s == c)
+ return (wchar_t *) s;
+ ++s;
+ --n;
+ }
+ if (n > 0)
+ {
+ if (*s == c)
+ return (wchar_t *) s;
+ ++s;
+ --n;
+ }
+ if (n > 0)
+ if (*s == c)
+ return (wchar_t *) s;
+
+ return NULL;
+}
diff --git a/wcsmbs/wmemcmp.c b/wcsmbs/wmemcmp.c
new file mode 100644
index 0000000000..f96cad9c0e
--- /dev/null
+++ b/wcsmbs/wmemcmp.c
@@ -0,0 +1,84 @@
+/* Copyright (C) 1996 Free Software Foundation, Inc.
+This file is part of the GNU C Library.
+Contributed by Ulrich Drepper, <drepper@gnu.ai.mit.edu>
+
+The GNU C Library is free software; you can redistribute it and/or
+modify it under the terms of the GNU Library General Public License as
+published by the Free Software Foundation; either version 2 of the
+License, or (at your option) any later version.
+
+The GNU C Library is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+Library General Public License for more details.
+
+You should have received a copy of the GNU Library General Public
+License along with the GNU C Library; see the file COPYING.LIB. If
+not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+Boston, MA 02111-1307, USA. */
+
+#include <wchar.h>
+
+
+int
+wmemcmp (s1, s2, n)
+ const wchar_t *s1;
+ const wchar_t *s2;
+ size_t n;
+{
+ register uwchar_t c1;
+ register uwchar_t c2;
+
+ while (n >= 4)
+ {
+ c1 = (uwchar_t) s1[0];
+ c2 = (uwchar_t) s2[0];
+ if (c1 - c2 != 0)
+ return c1 - c2;
+ c1 = (uwchar_t) s1[1];
+ c2 = (uwchar_t) s2[1];
+ if (c1 - c2 != 0)
+ return c1 - c2;
+ c1 = (uwchar_t) s1[2];
+ c2 = (uwchar_t) s2[2];
+ if (c1 - c2 != 0)
+ return c1 - c2;
+ c1 = (uwchar_t) s1[3];
+ c2 = (uwchar_t) s2[3];
+ if (c1 - c2 != 0)
+ return c1 - c2;
+ s1 += 4;
+ s2 += 4;
+ n -= 4;
+ }
+
+ if (n > 0)
+ {
+ c1 = (uwchar_t) s1[0];
+ c2 = (uwchar_t) s2[0];
+ if (c1 - c2 != 0)
+ return c1 - c2;
+ ++s1;
+ ++s2;
+ --n;
+ }
+ if (n > 0)
+ {
+ c1 = (uwchar_t) s1[0];
+ c2 = (uwchar_t) s2[0];
+ if (c1 - c2 != 0)
+ return c1 - c2;
+ ++s1;
+ ++s2;
+ --n;
+ }
+ if (n > 0)
+ {
+ c1 = (uwchar_t) s1[0];
+ c2 = (uwchar_t) s2[0];
+ if (c1 - c2 != 0)
+ return c1 - c2;
+ }
+
+ return 0;
+}
diff --git a/wcsmbs/wmemcpy.c b/wcsmbs/wmemcpy.c
new file mode 100644
index 0000000000..e469122197
--- /dev/null
+++ b/wcsmbs/wmemcpy.c
@@ -0,0 +1,31 @@
+/* Copyright (C) 1996 Free Software Foundation, Inc.
+This file is part of the GNU C Library.
+Contributed by Ulrich Drepper, <drepper@gnu.ai.mit.edu>
+
+The GNU C Library is free software; you can redistribute it and/or
+modify it under the terms of the GNU Library General Public License as
+published by the Free Software Foundation; either version 2 of the
+License, or (at your option) any later version.
+
+The GNU C Library is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+Library General Public License for more details.
+
+You should have received a copy of the GNU Library General Public
+License along with the GNU C Library; see the file COPYING.LIB. If
+not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+Boston, MA 02111-1307, USA. */
+
+#include <wchar.h>
+#include <string.h>
+
+
+wchar_t *
+wmemcpy (s1, s2, n)
+ wchar_t *s1;
+ const wchar_t *s2;
+ size_t n;
+{
+ return (wchar_t *) memcpy ((char *) s1, (char *) s2, n * sizeof (wchar_t));
+}
diff --git a/wcsmbs/wmemmove.c b/wcsmbs/wmemmove.c
new file mode 100644
index 0000000000..60d60338cb
--- /dev/null
+++ b/wcsmbs/wmemmove.c
@@ -0,0 +1,31 @@
+/* Copyright (C) 1996 Free Software Foundation, Inc.
+This file is part of the GNU C Library.
+Contributed by Ulrich Drepper, <drepper@gnu.ai.mit.edu>
+
+The GNU C Library is free software; you can redistribute it and/or
+modify it under the terms of the GNU Library General Public License as
+published by the Free Software Foundation; either version 2 of the
+License, or (at your option) any later version.
+
+The GNU C Library is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+Library General Public License for more details.
+
+You should have received a copy of the GNU Library General Public
+License along with the GNU C Library; see the file COPYING.LIB. If
+not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+Boston, MA 02111-1307, USA. */
+
+#include <wchar.h>
+#include <string.h>
+
+
+wchar_t *
+wmemmove (s1, s2, n)
+ wchar_t *s1;
+ const wchar_t *s2;
+ size_t n;
+{
+ return (wchar_t *) memmove ((char *) s1, (char *) s2, n * sizeof (wchar_t));
+}
diff --git a/wcsmbs/wmemset.c b/wcsmbs/wmemset.c
new file mode 100644
index 0000000000..918a232775
--- /dev/null
+++ b/wcsmbs/wmemset.c
@@ -0,0 +1,55 @@
+/* Copyright (C) 1996 Free Software Foundation, Inc.
+This file is part of the GNU C Library.
+Contributed by Ulrich Drepper, <drepper@gnu.ai.mit.edu>
+
+The GNU C Library is free software; you can redistribute it and/or
+modify it under the terms of the GNU Library General Public License as
+published by the Free Software Foundation; either version 2 of the
+License, or (at your option) any later version.
+
+The GNU C Library is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+Library General Public License for more details.
+
+You should have received a copy of the GNU Library General Public
+License along with the GNU C Library; see the file COPYING.LIB. If
+not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+Boston, MA 02111-1307, USA. */
+
+#include <wchar.h>
+
+
+wchar_t *
+wmemset (s, c, n)
+ wchar_t *s;
+ wchar_t c;
+ size_t n;
+{
+ register wchar_t *wp = s;
+
+ while (n >= 4)
+ {
+ wp[0] = c;
+ wp[1] = c;
+ wp[2] = c;
+ wp[3] = c;
+ wp += 4;
+ n -= 4;
+ }
+
+ if (n > 0)
+ {
+ *wp++ = c;
+ --n;
+ }
+ if (n > 0)
+ {
+ *wp++ = c;
+ --n;
+ }
+ if (n > 0)
+ *wp = c;
+
+ return s;
+}