aboutsummaryrefslogtreecommitdiff
path: root/wcsmbs
diff options
context:
space:
mode:
Diffstat (limited to 'wcsmbs')
-rw-r--r--wcsmbs/Makefile11
-rw-r--r--wcsmbs/mbsadvance.c38
-rw-r--r--wcsmbs/mbscat.c56
-rw-r--r--wcsmbs/mbschr.c60
-rw-r--r--wcsmbs/mbscpy.c47
-rw-r--r--wcsmbs/mbsdup.c51
-rw-r--r--wcsmbs/mbslen.c45
-rw-r--r--wcsmbs/mbsncat.c61
-rw-r--r--wcsmbs/mbsncmp.c68
-rw-r--r--wcsmbs/mbsncpy.c55
-rw-r--r--wcsmbs/mbsrchr.c61
-rw-r--r--wcsmbs/mbstomb.c42
-rw-r--r--wcsmbs/mbstr.h69
-rw-r--r--wcsmbs/wcscat.c9
-rw-r--r--wcsmbs/wcschr.c8
-rw-r--r--wcsmbs/wcscmp.c11
-rw-r--r--wcsmbs/wcscpy.c9
-rw-r--r--wcsmbs/wcscspn.c9
-rw-r--r--wcsmbs/wcsdup.c7
-rw-r--r--wcsmbs/wcslen.c7
-rw-r--r--wcsmbs/wcsncat.c11
-rw-r--r--wcsmbs/wcsncmp.c11
-rw-r--r--wcsmbs/wcsncpy.c13
-rw-r--r--wcsmbs/wcspbrk.c9
-rw-r--r--wcsmbs/wcsrchr.c9
-rw-r--r--wcsmbs/wcsspn.c9
-rw-r--r--wcsmbs/wcstok.c43
-rw-r--r--wcsmbs/wcstr.h84
-rw-r--r--wcsmbs/wcswcs.c97
29 files changed, 90 insertions, 920 deletions
diff --git a/wcsmbs/Makefile b/wcsmbs/Makefile
index 6d75c7b..99d9dd5 100644
--- a/wcsmbs/Makefile
+++ b/wcsmbs/Makefile
@@ -21,11 +21,12 @@
#
subdir := wcsmbs
-headers := wcstr.h mbstr.h
+headers := wchar.h
-routines := mbsadvance mbscat mbschr mbscmp mbscpy mbsdup mbslen \
- mbsncat mbsncmp mbsncpy mbsrchr mbstomb wcscat wcschr wcscmp\
- wcscpy wcscspn wcsdup wcslen wcsncat wcsncmp wcsncpy wcspbrk\
- wcsrchr wcsspn wcstok wcswcs
+routines := wcscat wcschr wcscmp wcscpy wcscspn wcsdup wcslen wcsncat \
+ wcsncmp wcsncpy wcspbrk wcsrchr wcsspn wcstok wcsstr wmemchr \
+ wmemcmp wmemcpy wmemmove wmemset \
+ btowc wctob mbsinit \
+ mbrlen mbrtowc wcrtomb mbsrtowcs wcsrtombs
include ../Rules
diff --git a/wcsmbs/mbsadvance.c b/wcsmbs/mbsadvance.c
deleted file mode 100644
index b664993..0000000
--- a/wcsmbs/mbsadvance.c
+++ /dev/null
@@ -1,38 +0,0 @@
-/* Copyright (C) 1995 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. */
-
-#include <mbstr.h>
-#include <stdlib.h>
-
-
-/* Advance pointer to multibyte string by one character. */
-char *
-mbsadvance (mbs)
- const char *mbs;
-{
- int clen;
-
- /* Reset multibyte characters to their initial state. */
- (void) mblen ((char *) NULL, 0);
-
- clen = mblen (mbs, MB_CUR_MAX);
-
- /* FIXME: when current character is illegal return same character. */
- return clen <= 0 ? (char *) mbs : (char *) (mbs + clen);
-}
-
diff --git a/wcsmbs/mbscat.c b/wcsmbs/mbscat.c
deleted file mode 100644
index 324cad9..0000000
--- a/wcsmbs/mbscat.c
+++ /dev/null
@@ -1,56 +0,0 @@
-/* Copyright (C) 1995 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. */
-
-#include <mbstr.h>
-#include <stdlib.h>
-
-
-/* Append SRC onto DEST. */
-char *
-mbscat (dest, src)
- char *dest;
- const char *src;
-{
- const char * const d = dest;
- size_t len = 0;
- int clen = 0;
-
- /* Reset multibyte characters to their initial state. */
- (void) mblen ((char *) NULL, 0);
-
- do
- {
- dest += clen;
- clen = mblen (dest, MB_CUR_MAX);
- }
- while (clen > 0);
-
- clen = 0;
- do
- {
- len += clen;
- clen = mblen (&src[len], MB_CUR_MAX);
- }
- while (clen > 0);
-
- (void) memcpy ((void *) dest, (void *) src, len);
- dest[len] = '\0'; /* '\0' is the multibyte representation of L'\0' */
-
- return (char *) d;
-}
-
diff --git a/wcsmbs/mbschr.c b/wcsmbs/mbschr.c
deleted file mode 100644
index f8a7d21..0000000
--- a/wcsmbs/mbschr.c
+++ /dev/null
@@ -1,60 +0,0 @@
-/* Copyright (C) 1995 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. */
-
-#include <mbstr.h>
-#include <stdlib.h>
-
-#define __need_wchar_t
-#include <stddef.h>
-
-
-/* Find the first occurence of MBC in MBS. */
-char *
-mbschr (mbs, mbc)
- const char *mbs;
- mbchar_t mbc;
-{
- int clen;
- wchar_t wc;
- wchar_t c;
-
- /* Reset multibyte characters to their initial state. */
- (void) mblen ((char *) NULL, 0);
-
- clen = mbtowc (&wc, (char *) &mbc, MB_CUR_MAX);
- if (clen < 0)
- /* FIXME: search character is illegal. */
- return NULL;
- else if (clen == 0)
- wc = L'\0';
-
- clen = 0;
- do
- {
- mbs += clen;
- clen = mbtowc (&c, mbs, MB_CUR_MAX);
- }
- while (clen > 0 && c != wc);
-
- if (clen < 0 || (clen == 0 && wc != L'\0'))
- /* FIXME: clen < 0 means illegal character in string. */
- return NULL;
-
- return (char *) mbs;
-}
-
diff --git a/wcsmbs/mbscpy.c b/wcsmbs/mbscpy.c
deleted file mode 100644
index 8f354ce..0000000
--- a/wcsmbs/mbscpy.c
+++ /dev/null
@@ -1,47 +0,0 @@
-/* Copyright (C) 1995 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. */
-
-#include <mbstr.h>
-#include <stdlib.h>
-
-
-/* Copy SRC to DEST. */
-char *
-mbscpy (dest, src)
- char *dest;
- const char *src;
-{
- size_t len = 0;
- int clen = 0;
-
- /* Reset multibyte characters to their initial state. */
- (void) mblen ((char *) NULL, 0);
-
- do
- {
- len += clen;
- clen = mblen (&src[len], MB_CUR_MAX);
- }
- while (clen > 0);
-
- (void) memcpy ((void *) dest, (void *) src, len);
- dest[len] = '\0'; /* '\0' is the multibyte representation of L'\0' */
-
- return dest;
-}
-
diff --git a/wcsmbs/mbsdup.c b/wcsmbs/mbsdup.c
deleted file mode 100644
index 2d196dd..0000000
--- a/wcsmbs/mbsdup.c
+++ /dev/null
@@ -1,51 +0,0 @@
-/* Copyright (C) 1995 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. */
-
-#include <mbstr.h>
-#include <stdlib.h>
-
-
-/* Duplicate MBS, returning an identical malloc'd string. */
-char *
-mbsdup (mbs)
- const char *mbs;
-{
- size_t len = 0;
- int clen = 0;
- char *retval;
-
- /* Reset multibyte characters to their initial state. */
- (void) mblen ((char *) NULL, 0);
-
- do
- {
- len += clen;
- clen = mblen (&mbs[len], MB_CUR_MAX);
- }
- while (clen > 0);
-
- retval = (char *) malloc (len + 1);
- if (retval != NULL)
- {
- (void) memcpy ((void *) retval, (void *) mbs, len);
- retval[len] = '\0'; /* '\0' is the multibyte representation of L'\0' */
- }
-
- return retval;
-}
-
diff --git a/wcsmbs/mbslen.c b/wcsmbs/mbslen.c
deleted file mode 100644
index f8077d0..0000000
--- a/wcsmbs/mbslen.c
+++ /dev/null
@@ -1,45 +0,0 @@
-/* Copyright (C) 1995 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. */
-
-#include <mbstr.h>
-#include <stdlib.h>
-
-
-/* Return the length of MBS. */
-size_t
-mbslen (mbs)
- const char *mbs;
-{
- size_t len = 0;
- int clen = 0;
-
- /* Reset multibyte characters to their initial state. */
- (void) mblen ((char *) NULL, 0);
-
- do
- {
- len += clen;
- clen = mblen (&mbs[len], MB_CUR_MAX);
- }
- while (clen > 0);
-
- /* FIXME: if string contains an illegal character the length upto this
- character is returned. */
- return len;
-}
-
diff --git a/wcsmbs/mbsncat.c b/wcsmbs/mbsncat.c
deleted file mode 100644
index 3dd4df1..0000000
--- a/wcsmbs/mbsncat.c
+++ /dev/null
@@ -1,61 +0,0 @@
-/* Copyright (C) 1995 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. */
-
-#include <mbstr.h>
-#include <stdlib.h>
-
-
-/* Append no more than N multi-byte characters from SRC onto DEST. */
-char *
-mbsncat (dest, src, n)
- char *dest;
- const char *src;
- size_t n;
-{
- const char * const d = dest;
- const char * const s = src;
- size_t len = 0;
- int clen = 0;
-
- if (n == 0)
- return (char *) d;
-
- /* Reset multibyte characters to their initial state. */
- (void) mblen ((char *) NULL, 0);
-
- do
- {
- dest += clen;
- clen = mblen (dest, MB_CUR_MAX);
- }
- while (clen > 0);
-
- clen = 0;
- do
- {
- src += clen;
- clen = mblen (src, MB_CUR_MAX);
- }
- while (clen > 0 && ++len < n);
-
- (void) memcpy ((void *) dest, (void *) s, src - s);
- dest[src - s] = '\0'; /* '\0' is the multibyte representation of L'\0' */
-
- return (char *) d;
-}
-
diff --git a/wcsmbs/mbsncmp.c b/wcsmbs/mbsncmp.c
deleted file mode 100644
index 43fb527..0000000
--- a/wcsmbs/mbsncmp.c
+++ /dev/null
@@ -1,68 +0,0 @@
-/* Copyright (C) 1995 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. */
-
-#include <mbstr.h>
-#include <stdlib.h>
-
-#define __need_wchar_t
-/* FIXME: should be defined in stddef.h.
-!!! #define __need_uwchar_t */
-typedef unsigned int uwchar_t;
-#include <stddef.h>
-
-
-/* Compare N characters of MBS1 and MBS2. */
-int
-mbsncmp (mbs1, mbs2, n)
- const char *mbs1;
- const char *mbs2;
- size_t n;
-{
- size_t len = 0;
- int clen1 = 0;
- int clen2 = 0;
- uwchar_t c1;
- uwchar_t c2;
-
- if (n == 0)
- return 0;
-
- /* Reset multibyte characters to their initial state. */
- (void) mblen ((char *) NULL, 0);
-
- do
- {
- clen1 = mbtowc ((wchar_t *) &c1, mbs1, MB_CUR_MAX);
- clen2 = mbtowc ((wchar_t *) &c2, mbs2, MB_CUR_MAX);
-
- if (clen1 == 0)
- return clen2 == 0 ? 0 : -1;
- if (clen2 == 0)
- return 1;
- if (clen1 < 0 || clen2 < 0)
- /* FIXME: an illegal character appears. What to do? */
- return c1 - c2;
-
- mbs1 += clen1;
- mbs2 += clen2;
- }
- while (c1 == c2 && ++len < n);
-
- return len < n ? c1 - c2 : 0;
-}
-
diff --git a/wcsmbs/mbsncpy.c b/wcsmbs/mbsncpy.c
deleted file mode 100644
index 09aecef..0000000
--- a/wcsmbs/mbsncpy.c
+++ /dev/null
@@ -1,55 +0,0 @@
-/* Copyright (C) 1995 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. */
-
-#include <mbstr.h>
-#include <stdlib.h>
-
-
-/* Copy no more than N characters of SRC to DEST. */
-char *
-mbsncpy (dest, src, n)
- char *dest;
- const char *src;
- size_t n;
-{
- const char * const s = src;
- size_t len = 0;
- int clen = 0;
-
- if (n == 0)
- {
- dest[0] = '\0'; /* '\0' is the multibyte representation of L'\0' */
- return dest;
- }
-
- /* Reset multibyte characters to their initial state. */
- (void) mblen ((char *) NULL, 0);
-
- do
- {
- src += clen;
- clen = mblen (src, MB_CUR_MAX);
- }
- while (clen > 0 && ++len < n);
-
- (void) memcpy ((void *) dest, (void *) s, src - s);
- dest[src - s] = '\0'; /* '\0' is the multibyte representation of L'\0' */
-
- return dest;
-}
-
diff --git a/wcsmbs/mbsrchr.c b/wcsmbs/mbsrchr.c
deleted file mode 100644
index 62fa219..0000000
--- a/wcsmbs/mbsrchr.c
+++ /dev/null
@@ -1,61 +0,0 @@
-/* Copyright (C) 1995 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. */
-
-#include <mbstr.h>
-#include <stdlib.h>
-
-#define __need_wchar_t
-#include <stddef.h>
-
-
-/* Find the last occurence of MBC in MBS. */
-char *
-mbsrchr (mbs, mbc)
- const char *mbs;
- mbchar_t mbc;
-{
- const char * retval = NULL;
- int clen;
- wchar_t wc;
- wchar_t c;
-
- /* Reset multibyte characters to their initial state. */
- (void) mblen ((char *) NULL, 0);
-
- clen = mbtowc (&wc, (char *) &mbc, MB_CUR_MAX);
- if (clen < 0)
- /* FIXME: search character MBC is illegal. */
- return NULL;
- else if (clen == 0)
- wc = L'\0';
-
- clen = 0;
- do
- {
- mbs += clen;
- clen = mbtowc (&c, mbs, MB_CUR_MAX);
- }
- while (clen > 0 && c != wc);
-
- if (clen < 0)
- /* FIXME: clen < 0 means illegal character in string. */
- return NULL;
-
- return (char *) (clen > 0 || (clen == 0 && wc == L'\0') ? mbs : retval);
-}
-
diff --git a/wcsmbs/mbstomb.c b/wcsmbs/mbstomb.c
deleted file mode 100644
index f593ced..0000000
--- a/wcsmbs/mbstomb.c
+++ /dev/null
@@ -1,42 +0,0 @@
-/* Copyright (C) 1995 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. */
-
-#include <mbstr.h>
-#include <stdlib.h>
-
-
-/* Advance pointer to multibyte string by one character. */
-mbchar_t
-mbstomb (mbs)
- const char *mbs;
-{
- mbchar_t retval = 0;
- int clen;
-
- /* Reset multibyte characters to their initial state. */
- (void) mblen ((char *) NULL, 0);
-
- clen = mblen (mbs, MB_CUR_MAX);
-
- if (clen > 0)
- (void) memcpy (&retval, mbs, clen);
-
- /* FIXME: when current character is illegal return '\0'. */
- return retval;
-}
-
diff --git a/wcsmbs/mbstr.h b/wcsmbs/mbstr.h
deleted file mode 100644
index 7cb94bf..0000000
--- a/wcsmbs/mbstr.h
+++ /dev/null
@@ -1,69 +0,0 @@
-/* Copyright (C) 1995 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. */
-
-#ifndef _MBSTRING_H
-
-#define _MBSTRING_H 1
-#include <features.h>
-#include <limits.h>
-
-#define __need_size_t
-#include <stddef.h>
-
-__BEGIN_DECLS
-
-/* This data type should be large enough to contain MB_CUR_MAX bytes. */
-typedef unsigned int mbchar_t;
-
-
-/* Copy SRC to DEST. */
-extern char *mbscpy __P ((char *__dest, __const char *__src));
-/* Copy no more than N multi-byte characters of SRC to DEST. */
-extern char *mbsncpy __P ((char *__dest, __const char *__src, size_t __n));
-
-/* Append SRC onto DEST. */
-extern char *mbscat __P ((char *__dest, __const char *__src));
-/* Append no more than N characters from SRC onto DEST. */
-extern char *mbsncat __P ((char *__dest, __const char *__src, size_t __n));
-
-/* Compare S1 and S2. */
-extern int mbscmp __P ((__const char *__s1, __const char *__s2));
-/* Compare N characters of S1 and S2. */
-extern int mbsncmp __P ((__const char *__s1, __const char *__s2, size_t __n));
-
-/* Duplicate MBS, returning an identical malloc'd string. */
-extern char *mbsdup __P ((__const char *__s));
-
-/* Find the first occurence of MBC in MBS. */
-extern char *mbschr __P ((__const char *__mbs, mbchar_t mbc));
-/* Find the last occurence of MBC in MBS. */
-extern char *mbsrchr __P ((__const char *__mbs, mbchar_t mbc));
-
-/* Return the length of MBS. */
-extern size_t mbslen __P ((__const char *__mbs));
-
-
-/* Advance pointer to multibyte string by one character. */
-extern char *mbsadvance __P ((__const char *__mbs));
-
-/* Return first character in MBS. */
-extern mbchar_t mbstomb __P ((__const char *__mbs));
-
-__END_DECLS
-
-#endif /* mbstring.h */
diff --git a/wcsmbs/wcscat.c b/wcsmbs/wcscat.c
index 4ff5c86..e142806 100644
--- a/wcsmbs/wcscat.c
+++ b/wcsmbs/wcscat.c
@@ -1,5 +1,6 @@
-/* Copyright (C) 1995 Free Software Foundation, Inc.
+/* Copyright (C) 1995, 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
@@ -16,14 +17,14 @@ 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. */
-#include <wcstr.h>
+#include <wchar.h>
/* Append SRC on the end of DEST. */
wchar_t *
wcscat (dest, src)
- wchar_t *dest;
- const wchar_t *src;
+ wchar_t *dest;
+ const wchar_t *src;
{
register wchar_t *s1 = dest;
register const wchar_t *s2 = src;
diff --git a/wcsmbs/wcschr.c b/wcsmbs/wcschr.c
index 85a1801..64af0bf 100644
--- a/wcsmbs/wcschr.c
+++ b/wcsmbs/wcschr.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 1995 Free Software Foundation, Inc.
+/* 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
@@ -16,14 +16,14 @@ 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. */
-#include <wcstr.h>
+#include <wchar.h>
/* Find the first ocurrence of WC in WCS. */
wchar_t *
wcschr (wcs, wc)
- register const wchar_t *wcs;
- register const wchar_t wc;
+ register const wchar_t *wcs;
+ register const wchar_t wc;
{
while (*wcs != L'\0')
if (*wcs == wc)
diff --git a/wcsmbs/wcscmp.c b/wcsmbs/wcscmp.c
index 84ecae8..08da116 100644
--- a/wcsmbs/wcscmp.c
+++ b/wcsmbs/wcscmp.c
@@ -1,5 +1,6 @@
-/* Copyright (C) 1995 Free Software Foundation, Inc.
+/* Copyright (C) 1995, 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
@@ -16,16 +17,16 @@ 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. */
-#include <wcstr.h>
+#include <wchar.h>
/* Compare S1 and S2, returning less than, equal to or
- greater than zero if S1 is lexiographically less than,
+ greater than zero if S1 is lexicographically less than,
equal to or greater than S2. */
int
wcscmp (s1, s2)
- const wchar_t *s1;
- const wchar_t *s2;
+ const wchar_t *s1;
+ const wchar_t *s2;
{
uwchar_t c1, c2;
diff --git a/wcsmbs/wcscpy.c b/wcsmbs/wcscpy.c
index a45747e..3aa897e 100644
--- a/wcsmbs/wcscpy.c
+++ b/wcsmbs/wcscpy.c
@@ -1,5 +1,6 @@
-/* Copyright (C) 1995 Free Software Foundation, Inc.
+/* Copyright (C) 1995, 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
@@ -16,7 +17,7 @@ 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. */
-#include <wcstr.h>
+#include <wchar.h>
#define __need_ptrdiff_t
#include <stddef.h>
@@ -25,8 +26,8 @@ Cambridge, MA 02139, USA. */
/* Copy SRC to DEST. */
wchar_t *
wcscpy (dest, src)
- wchar_t *dest;
- const wchar_t *src;
+ wchar_t *dest;
+ const wchar_t *src;
{
wchar_t *wcp = (wchar_t *) src;
wchar_t c;
diff --git a/wcsmbs/wcscspn.c b/wcsmbs/wcscspn.c
index 0dc4d9b..7ab8f27 100644
--- a/wcsmbs/wcscspn.c
+++ b/wcsmbs/wcscspn.c
@@ -1,5 +1,6 @@
-/* Copyright (C) 1995 Free Software Foundation, Inc.
+/* Copyright (C) 1995, 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
@@ -16,15 +17,15 @@ 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. */
-#include <wcstr.h>
+#include <wchar.h>
/* Return the length of the maximum initial segment
of WCS which contains only wide-characters not in REJECT. */
size_t
wcscspn (wcs, reject)
- const wchar_t *wcs;
- const wchar_t *reject;
+ const wchar_t *wcs;
+ const wchar_t *reject;
{
register size_t count = 0;
diff --git a/wcsmbs/wcsdup.c b/wcsmbs/wcsdup.c
index 62c6462..c24ba96 100644
--- a/wcsmbs/wcsdup.c
+++ b/wcsmbs/wcsdup.c
@@ -1,5 +1,6 @@
-/* Copyright (C) 1995 Free Software Foundation, Inc.
+/* Copyright (C) 1995, 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
@@ -16,7 +17,7 @@ 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. */
-#include <wcstr.h>
+#include <wchar.h>
#include <string.h>
#include <stdlib.h>
@@ -24,7 +25,7 @@ Cambridge, MA 02139, USA. */
/* Duplicate S, returning an identical malloc'd string. */
wchar_t *
wcsdup (s)
- const wchar_t *s;
+ const wchar_t *s;
{
size_t len = (wcslen (s) + 1) * sizeof (wchar_t);
void *new = malloc (len);
diff --git a/wcsmbs/wcslen.c b/wcsmbs/wcslen.c
index 2907cb3..1ce365f 100644
--- a/wcsmbs/wcslen.c
+++ b/wcsmbs/wcslen.c
@@ -1,5 +1,6 @@
-/* Copyright (C) 1995 Free Software Foundation, Inc.
+/* Copyright (C) 1995, 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
@@ -16,13 +17,13 @@ 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. */
-#include <wcstr.h>
+#include <wchar.h>
/* Copy SRC to DEST. */
size_t
wcslen (s)
- const wchar_t *s;
+ const wchar_t *s;
{
size_t len = 0;
diff --git a/wcsmbs/wcsncat.c b/wcsmbs/wcsncat.c
index 7851d70..48d5460 100644
--- a/wcsmbs/wcsncat.c
+++ b/wcsmbs/wcsncat.c
@@ -1,5 +1,6 @@
-/* Copyright (C) 1995 Free Software Foundation, Inc.
+/* Copyright (C) 1995, 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
@@ -16,15 +17,15 @@ 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. */
-#include <wcstr.h>
+#include <wchar.h>
/* Append no more than N wide-character of SRC onto DEST. */
wchar_t *
wcsncat (dest, src, n)
- wchar_t *dest;
- const wchar_t *src;
- size_t n;
+ wchar_t *dest;
+ const wchar_t *src;
+ size_t n;
{
wchar_t c;
wchar_t * const s = dest;
diff --git a/wcsmbs/wcsncmp.c b/wcsmbs/wcsncmp.c
index 9f1829b..3df6bfc 100644
--- a/wcsmbs/wcsncmp.c
+++ b/wcsmbs/wcsncmp.c
@@ -1,5 +1,6 @@
-/* Copyright (C) 1995 Free Software Foundation, Inc.
+/* Copyright (C) 1995, 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
@@ -16,7 +17,7 @@ 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. */
-#include <wcstr.h>
+#include <wchar.h>
/* Compare no more than N characters of S1 and S2,
@@ -25,9 +26,9 @@ Cambridge, MA 02139, USA. */
greater than S2. */
int
wcsncmp (s1, s2, n)
- const wchar_t *s1;
- const wchar_t *s2;
- size_t n;
+ const wchar_t *s1;
+ const wchar_t *s2;
+ size_t n;
{
uwchar_t c1 = L'\0';
uwchar_t c2 = L'\0';
diff --git a/wcsmbs/wcsncpy.c b/wcsmbs/wcsncpy.c
index 740c71e..180da79 100644
--- a/wcsmbs/wcsncpy.c
+++ b/wcsmbs/wcsncpy.c
@@ -1,5 +1,6 @@
-/* Copyright (C) 1995 Free Software Foundation, Inc.
+/* Copyright (C) 1995, 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
@@ -16,18 +17,18 @@ 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. */
-#include <wcstr.h>
+#include <wchar.h>
/* Copy no more than N wide-characters of SRC to DEST. */
wchar_t *
wcsncpy (dest, src, n)
- wchar_t *dest;
- const wchar_t *src;
- size_t n;
+ wchar_t *dest;
+ const wchar_t *src;
+ size_t n;
{
wchar_t c;
- wchar_t * const s = dest;
+ wchar_t *const s = dest;
--dest;
diff --git a/wcsmbs/wcspbrk.c b/wcsmbs/wcspbrk.c
index 83892ba..91c5573 100644
--- a/wcsmbs/wcspbrk.c
+++ b/wcsmbs/wcspbrk.c
@@ -1,5 +1,6 @@
-/* Copyright (C) 1995 Free Software Foundation, Inc.
+/* Copyright (C) 1995, 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
@@ -16,14 +17,14 @@ 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. */
-#include <wcstr.h>
+#include <wchar.h>
/* Find the first ocurrence in WCS of any wide-character in ACCEPT. */
wchar_t *
wcspbrk (wcs, accept)
- register const wchar_t *wcs;
- register const wchar_t *accept;
+ register const wchar_t *wcs;
+ register const wchar_t *accept;
{
while (*wcs != L'\0')
if (wcschr (accept, *wcs) == NULL)
diff --git a/wcsmbs/wcsrchr.c b/wcsmbs/wcsrchr.c
index 87823b3..ae31dc4 100644
--- a/wcsmbs/wcsrchr.c
+++ b/wcsmbs/wcsrchr.c
@@ -1,5 +1,6 @@
-/* Copyright (C) 1995 Free Software Foundation, Inc.
+/* Copyright (C) 1995, 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
@@ -16,14 +17,14 @@ 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. */
-#include <wcstr.h>
+#include <wchar.h>
/* Find the last ocurrence of WC in WCS. */
wchar_t *
wcsrchr (wcs, wc)
- register const wchar_t *wcs;
- register const wchar_t wc;
+ register const wchar_t *wcs;
+ register const wchar_t wc;
{
const wchar_t *retval = NULL;
diff --git a/wcsmbs/wcsspn.c b/wcsmbs/wcsspn.c
index 81a557c..158e35e 100644
--- a/wcsmbs/wcsspn.c
+++ b/wcsmbs/wcsspn.c
@@ -1,5 +1,6 @@
-/* Copyright (C) 1995 Free Software Foundation, Inc.
+/* Copyright (C) 1995, 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
@@ -16,15 +17,15 @@ 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. */
-#include <wcstr.h>
+#include <wchar.h>
/* Return the length of the maximum initial segment
of WCS which contains only wide-characters in ACCEPT. */
size_t
wcsspn (wcs, accept)
- const wchar_t *wcs;
- const wchar_t *accept;
+ const wchar_t *wcs;
+ const wchar_t *accept;
{
register const wchar_t *p;
register const wchar_t *a;
diff --git a/wcsmbs/wcstok.c b/wcsmbs/wcstok.c
index 191bbd5..376fe7b 100644
--- a/wcsmbs/wcstok.c
+++ b/wcsmbs/wcstok.c
@@ -1,5 +1,6 @@
-/* Copyright (C) 1995 Free Software Foundation, Inc.
+/* Copyright (C) 1995, 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
@@ -16,52 +17,42 @@ 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. */
-#include <wcstr.h>
+#include <wchar.h>
#include <errno.h>
-static wchar_t *olds = NULL;
-
-/* Parse WCS into tokens separated by characters in DELIM.
- If WCS is NULL, the last string wcstok() was called with is
- used. */
+/* Parse WCS into tokens separated by characters in DELIM. If WCS is
+ NULL, the last string wcstok() was called with is used. */
wchar_t *
-wcstok (wcs, delim)
- register wchar_t *wcs;
- register const wchar_t *delim;
+wcstok (wcs, delim, ptr)
+ register wchar_t *wcs;
+ register const wchar_t *delim;
+ register wchar_t **ptr;
{
- wchar_t *token;
+ wchar_t *result;
if (wcs == NULL)
- {
- if (olds == NULL)
- {
- errno = EINVAL;
- return NULL;
- }
- else
- wcs = olds;
- }
+ wcs = *ptr;
/* Scan leading delimiters. */
wcs += wcsspn (wcs, delim);
if (*wcs == L'\0')
{
- olds = NULL;
+ *ptr = NULL;
return NULL;
}
/* Find the end of the token. */
- token = wcs;
- wcs = wcspbrk (token, delim);
+ result = wcs;
+ wcs = wcspbrk (result, delim);
if (wcs == NULL)
/* This token finishes the string. */
- olds = NULL;
+ *ptr = NULL;
else
{
/* Terminate the token and make OLDS point past it. */
*wcs = L'\0';
- olds = wcs + 1;
+ *ptr = wcs + 1;
}
- return token;
+ return result;
}
diff --git a/wcsmbs/wcstr.h b/wcsmbs/wcstr.h
deleted file mode 100644
index e9cc64d..0000000
--- a/wcsmbs/wcstr.h
+++ /dev/null
@@ -1,84 +0,0 @@
-/* Copyright (C) 1995 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, 1992 Free Software Foundation, Inc., 675 Mass Ave,
-Cambridge, MA 02139, USA. */
-
-#ifndef _WCSTRING_H
-
-#define _WCSTRING_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
-#include <stddef.h>
-
-/* FIXME: Should go with this or another name in stddef.h. */
-typedef unsigned int uwchar_t;
-
-
-/* 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 *wcswcs __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));
-
-/* Return the number of wide-characters in S. */
-extern size_t wcslen __P ((__const wchar_t *__s));
-
-__END_DECLS
-
-#endif /* wcstring.h */
diff --git a/wcsmbs/wcswcs.c b/wcsmbs/wcswcs.c
deleted file mode 100644
index 4b1f2ac..0000000
--- a/wcsmbs/wcswcs.c
+++ /dev/null
@@ -1,97 +0,0 @@
-/* Copyright (C) 1995 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 <wcstr.h>
-
-wchar_t *
-wcswcs (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;
-}