diff options
author | Roland McGrath <roland@gnu.org> | 1996-04-03 16:31:49 +0000 |
---|---|---|
committer | Roland McGrath <roland@gnu.org> | 1996-04-03 16:31:49 +0000 |
commit | 299a95b9f048679f1288512b0a6ab6ca16dd9d7c (patch) | |
tree | 4788a62ee8f131887e5817e8daa3339084dbe764 /wcsmbs | |
parent | Mon Apr 1 13:34:55 1996 Roland McGrath <roland@whiz-bang.gnu.ai.mit.edu> (diff) | |
download | glibc-299a95b9f048679f1288512b0a6ab6ca16dd9d7c.tar.gz glibc-299a95b9f048679f1288512b0a6ab6ca16dd9d7c.tar.bz2 glibc-299a95b9f048679f1288512b0a6ab6ca16dd9d7c.zip |
Tue Apr 2 21:27:01 1996 Andreas Schwab <schwab@issan.informatik.uni-dortmund.de>
* posix/glob.c (glob_pattern_p): Avoid scanning past eos if
the pattern ends with a backslash and quoting is enabled.
* posix/fnmatch.c (fnmatch): Likewise; return FNM_NOMATCH for such
patterns.
Diffstat (limited to 'wcsmbs')
-rw-r--r-- | wcsmbs/Makefile | 11 | ||||
-rw-r--r-- | wcsmbs/mbsadvance.c | 38 | ||||
-rw-r--r-- | wcsmbs/mbscat.c | 56 | ||||
-rw-r--r-- | wcsmbs/mbschr.c | 60 | ||||
-rw-r--r-- | wcsmbs/mbscpy.c | 47 | ||||
-rw-r--r-- | wcsmbs/mbsdup.c | 51 | ||||
-rw-r--r-- | wcsmbs/mbslen.c | 45 | ||||
-rw-r--r-- | wcsmbs/mbsncat.c | 61 | ||||
-rw-r--r-- | wcsmbs/mbsncmp.c | 68 | ||||
-rw-r--r-- | wcsmbs/mbsncpy.c | 55 | ||||
-rw-r--r-- | wcsmbs/mbsrchr.c | 61 | ||||
-rw-r--r-- | wcsmbs/mbstomb.c | 42 | ||||
-rw-r--r-- | wcsmbs/mbstr.h | 69 | ||||
-rw-r--r-- | wcsmbs/wcscat.c | 9 | ||||
-rw-r--r-- | wcsmbs/wcschr.c | 8 | ||||
-rw-r--r-- | wcsmbs/wcscmp.c | 11 | ||||
-rw-r--r-- | wcsmbs/wcscpy.c | 9 | ||||
-rw-r--r-- | wcsmbs/wcscspn.c | 9 | ||||
-rw-r--r-- | wcsmbs/wcsdup.c | 7 | ||||
-rw-r--r-- | wcsmbs/wcslen.c | 7 | ||||
-rw-r--r-- | wcsmbs/wcsncat.c | 11 | ||||
-rw-r--r-- | wcsmbs/wcsncmp.c | 11 | ||||
-rw-r--r-- | wcsmbs/wcsncpy.c | 13 | ||||
-rw-r--r-- | wcsmbs/wcspbrk.c | 9 | ||||
-rw-r--r-- | wcsmbs/wcsrchr.c | 9 | ||||
-rw-r--r-- | wcsmbs/wcsspn.c | 9 | ||||
-rw-r--r-- | wcsmbs/wcstok.c | 43 | ||||
-rw-r--r-- | wcsmbs/wcstr.h | 84 | ||||
-rw-r--r-- | wcsmbs/wcswcs.c | 97 |
29 files changed, 90 insertions, 920 deletions
diff --git a/wcsmbs/Makefile b/wcsmbs/Makefile index 6d75c7b01f..99d9dd5010 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 b6649935d7..0000000000 --- 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 324cad9cc8..0000000000 --- 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 f8a7d21857..0000000000 --- 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 8f354ceede..0000000000 --- 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 2d196dd06d..0000000000 --- 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 f8077d0fb9..0000000000 --- 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 3dd4df1c70..0000000000 --- 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 43fb527afb..0000000000 --- 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 09aecefd03..0000000000 --- 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 62fa219dd2..0000000000 --- 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 f593ced3cb..0000000000 --- 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 7cb94bf85b..0000000000 --- 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 4ff5c861e4..e142806fae 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 85a1801839..64af0bf456 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 84ecae8553..08da116787 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 a45747edf1..3aa897ec7f 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 0dc4d9bc9e..7ab8f278fd 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 62c64621de..c24ba96f88 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 2907cb3cc4..1ce365f8c4 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 7851d7048d..48d54603d6 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 9f1829bc5d..3df6bfc151 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 740c71ecf8..180da794d7 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 83892bacb0..91c5573722 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 87823b3709..ae31dc4104 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 81a557c7b7..158e35ee97 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 191bbd5960..376fe7bfcb 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 e9cc64ddc1..0000000000 --- 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 4b1f2ace54..0000000000 --- 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; -} |