Complete Citrus import. Import message catalog implement from
authorJoerg Sonnenberger <joerg@dragonflybsd.org>
Thu, 21 Apr 2005 16:36:35 +0000 (16:36 +0000)
committerJoerg Sonnenberger <joerg@dragonflybsd.org>
Thu, 21 Apr 2005 16:36:35 +0000 (16:36 +0000)
NetBSD. Remove external visible rune interface.

Obtained-from: Project Citrus / NetBSD

91 files changed:
Makefile.inc1
contrib/gcc-3.4/libstdc++-v3/config/os/bsd/freebsd/ctype_base.h [deleted file]
contrib/gcc-3.4/libstdc++-v3/config/os/bsd/freebsd/ctype_inline.h [deleted file]
contrib/gcc-3.4/libstdc++-v3/config/os/bsd/freebsd/ctype_noninline.h [deleted file]
contrib/gcc-3.4/libstdc++-v3/config/os/bsd/freebsd/os_defines.h [deleted file]
gnu/lib/gcc34/libstdc++/Makefile
include/Makefile
include/ctype.h
include/locale.h
include/nl_types.h
include/runetype.h [deleted file]
include/stdlib.h
include/wchar.h
include/wctype.h
lib/Makefile
lib/libc/Makefile.inc
lib/libc/gen/Makefile.inc
lib/libc/gen/isctype.c
lib/libc/gen/tolower.c [new file with mode: 0644]
lib/libc/gen/toupper.c [new file with mode: 0644]
lib/libc/locale/Makefile.inc
lib/libc/locale/_def_monetary.c [new file with mode: 0644]
lib/libc/locale/_def_time.c
lib/libc/locale/ansi.c [deleted file]
lib/libc/locale/big5.c [deleted file]
lib/libc/locale/collate.c
lib/libc/locale/euc.c [deleted file]
lib/libc/locale/fix_grouping.c [deleted file]
lib/libc/locale/gb18030.c [deleted file]
lib/libc/locale/gbk.c [deleted file]
lib/libc/locale/isctype.c [deleted file]
lib/libc/locale/ldpart.c [deleted file]
lib/libc/locale/lmessages.c [deleted file]
lib/libc/locale/lmessages.h [deleted file]
lib/libc/locale/lmonetary.c [deleted file]
lib/libc/locale/lmonetary.h [deleted file]
lib/libc/locale/lnumeric.c [deleted file]
lib/libc/locale/lnumeric.h [deleted file]
lib/libc/locale/localeconv.c
lib/libc/locale/mbrune.3 [deleted file]
lib/libc/locale/mbrune.c [deleted file]
lib/libc/locale/mskanji.c [deleted file]
lib/libc/locale/multibyte.3 [deleted file]
lib/libc/locale/nl_langinfo.c
lib/libc/locale/nomacros.c [deleted file]
lib/libc/locale/none.c [deleted file]
lib/libc/locale/rune.3 [deleted file]
lib/libc/locale/rune.c
lib/libc/locale/rune.h [moved from include/rune.h with 50% similarity]
lib/libc/locale/rune_local.h [moved from lib/libc/locale/ldpart.h with 63% similarity]
lib/libc/locale/runetype.c [deleted file]
lib/libc/locale/runetype.h [new file with mode: 0644]
lib/libc/locale/setinvalidrune.c [deleted file]
lib/libc/locale/setlocale.c
lib/libc/locale/setlocale.h [deleted file]
lib/libc/locale/setrunelocale.c
lib/libc/locale/table.c [deleted file]
lib/libc/locale/tolower.c [deleted file]
lib/libc/locale/toupper.c [deleted file]
lib/libc/locale/utf2.c [deleted file]
lib/libc/locale/utf8.c [deleted file]
lib/libc/nls/Makefile.inc
lib/libc/nls/msgcat.c [deleted file]
lib/libc/nls/msgcat.h [deleted file]
lib/libc/stdio/vfprintf.c
lib/libc/stdio/vfscanf.c
lib/libc/stdlib/getopt_long.c
lib/libc/stdtime/Makefile.inc
lib/libc/stdtime/strftime.c
lib/libc/stdtime/strptime.c
lib/libc/stdtime/timelocal.c
share/Makefile
share/mk/bsd.nls.mk
share/nls/Makefile [new file with mode: 0644]
share/nls/nls.alias [new file with mode: 0644]
sys/cpu/i386/include/stdint.h
sys/i386/include/stdint.h
sys/sys/localedef.h
sys/sys/stdint.h
usr.bin/Makefile
usr.bin/gencat/Makefile
usr.bin/gencat/gencat.1
usr.bin/gencat/gencat.c
usr.bin/gencat/gencat.h [deleted file]
usr.bin/gencat/genlib.c [deleted file]
usr.bin/mklocale/Makefile
usr.bin/mklocale/extern.h [deleted file]
usr.bin/mklocale/ldef.h
usr.bin/mklocale/lex.l
usr.bin/mklocale/mklocale.1
usr.bin/mklocale/yacc.y

index af81a5a..4d8d217 100644 (file)
@@ -1,6 +1,6 @@
 #
 # $FreeBSD: src/Makefile.inc1,v 1.141.2.62 2003/04/06 19:54:00 dwmalone Exp $
-# $DragonFly: src/Makefile.inc1,v 1.63 2005/04/21 08:43:42 joerg Exp $
+# $DragonFly: src/Makefile.inc1,v 1.64 2005/04/21 16:36:34 joerg Exp $
 #
 # Make command line options:
 #      -DMAKE_KERBEROS5 to build Kerberos5
@@ -783,7 +783,7 @@ bootstrap-tools:
     usr.sbin/btxld usr.sbin/pwd_mkdb usr.sbin/zic usr.sbin/makewhatis \
     gnu/usr.bin/gperf gnu/usr.bin/texinfo \
     gnu/usr.bin/grep gnu/usr.bin/sort \
-    usr.bin/gzip usr.bin/bzip2
+    usr.bin/gzip usr.bin/bzip2 usr.bin/mkcsmapper usr.bin/mkesdb
        ${ECHODIR} "===> ${_tool} (bootstrap-tools)"; \
                cd ${.CURDIR}/${_tool}; \
                ${MAKE} DIRPRFX=${_tool}/ obj; \
diff --git a/contrib/gcc-3.4/libstdc++-v3/config/os/bsd/freebsd/ctype_base.h b/contrib/gcc-3.4/libstdc++-v3/config/os/bsd/freebsd/ctype_base.h
deleted file mode 100644 (file)
index f44a7c7..0000000
+++ /dev/null
@@ -1,76 +0,0 @@
-// Locale support -*- C++ -*-
-
-// Copyright (C) 2000, 2003 Free Software Foundation, Inc.
-//
-// This file is part of the GNU ISO C++ Library.  This library is free
-// software; you can redistribute it and/or modify it under the
-// terms of the GNU General Public License as published by the
-// Free Software Foundation; either version 2, or (at your option)
-// any later version.
-
-// This 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 General Public License for more details.
-
-// You should have received a copy of the GNU General Public License along
-// with this library; see the file COPYING.  If not, write to the Free
-// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
-// USA.
-
-// As a special exception, you may use this file as part of a free software
-// library without restriction.  Specifically, if other files instantiate
-// templates or use macros or inline functions from this file, or you compile
-// this file and link it with other files to produce an executable, this
-// file does not by itself cause the resulting executable to be covered by
-// the GNU General Public License.  This exception does not however
-// invalidate any other reasons why the executable file might be covered by
-// the GNU General Public License.
-
-//
-// ISO C++ 14882: 22.1  Locales
-//
-  
-// Information as gleaned from /usr/include/ctype.h on FreeBSD 3.4,
-// 4.0 and all versions of the CVS managed file at:
-// :pserver:anoncvs@anoncvs.freebsd.org:/home/ncvs/src/include/ctype.h
-  
-  struct ctype_base
-  {
-    // Non-standard typedefs.
-    typedef const int*                 __to_type;
-
-    // NB: Offsets into ctype<char>::_M_table force a particular size
-    // on the mask type. Because of this, we don't use an enum.
-    typedef unsigned long      mask;
-#ifdef _CTYPE_S
-    // FreeBSD 4.0 uses this style of define.
-    static const mask upper            = _CTYPE_U;
-    static const mask lower    = _CTYPE_L;
-    static const mask alpha    = _CTYPE_A;
-    static const mask digit    = _CTYPE_D;
-    static const mask xdigit   = _CTYPE_X;
-    static const mask space    = _CTYPE_S;
-    static const mask print    = _CTYPE_R;
-    static const mask graph    = _CTYPE_A | _CTYPE_D | _CTYPE_P;
-    static const mask cntrl    = _CTYPE_C;
-    static const mask punct    = _CTYPE_P;
-    static const mask alnum    = _CTYPE_A | _CTYPE_D;
-#else
-    // Older versions, including Free BSD 3.4, use this style of define.
-    static const mask upper            = _U;
-    static const mask lower    = _L;
-    static const mask alpha    = _A;
-    static const mask digit    = _D;
-    static const mask xdigit   = _X;
-    static const mask space    = _S;
-    static const mask print    = _R;
-    static const mask graph    = _A | _D | _P;
-    static const mask cntrl    = _C;
-    static const mask punct    = _P;
-    static const mask alnum    = _A | _D;
-#endif
-  };
-
-
-
diff --git a/contrib/gcc-3.4/libstdc++-v3/config/os/bsd/freebsd/ctype_inline.h b/contrib/gcc-3.4/libstdc++-v3/config/os/bsd/freebsd/ctype_inline.h
deleted file mode 100644 (file)
index d69324a..0000000
+++ /dev/null
@@ -1,106 +0,0 @@
-// Locale support -*- C++ -*-
-
-// Copyright (C) 2000, 2003 Free Software Foundation, Inc.
-//
-// This file is part of the GNU ISO C++ Library.  This library is free
-// software; you can redistribute it and/or modify it under the
-// terms of the GNU General Public License as published by the
-// Free Software Foundation; either version 2, or (at your option)
-// any later version.
-
-// This 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 General Public License for more details.
-
-// You should have received a copy of the GNU General Public License along
-// with this library; see the file COPYING.  If not, write to the Free
-// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
-// USA.
-
-// As a special exception, you may use this file as part of a free software
-// library without restriction.  Specifically, if other files instantiate
-// templates or use macros or inline functions from this file, or you compile
-// this file and link it with other files to produce an executable, this
-// file does not by itself cause the resulting executable to be covered by
-// the GNU General Public License.  This exception does not however
-// invalidate any other reasons why the executable file might be covered by
-// the GNU General Public License.
-
-//
-// ISO C++ 14882: 22.1  Locales
-//
-  
-// ctype bits to be inlined go here. Non-inlinable (ie virtual do_*)
-// functions go in ctype.cc
-  
-  bool
-  ctype<char>::
-  is(mask __m, char __c) const
-  { 
-    if (_M_table)
-      return _M_table[static_cast<unsigned char>(__c)] & __m;
-    else
-      return __istype(__c, __m);
-  }
-
-  const char*
-  ctype<char>::
-  is(const char* __low, const char* __high, mask* __vec) const
-  {
-    if (_M_table)
-      while (__low < __high)
-       *__vec++ = _M_table[static_cast<unsigned char>(*__low++)];
-    else
-      for (;__low < __high; ++__vec, ++__low)
-       {
-#if defined (_CTYPE_S) || defined (__istype)
-         *__vec = __maskrune (*__low, upper | lower | alpha | digit | xdigit
-                              | space | print | graph | cntrl | punct | alnum);
-#else
-         mask __m = 0;
-         if (this->is(upper, *__low)) __m |= upper;
-         if (this->is(lower, *__low)) __m |= lower;
-         if (this->is(alpha, *__low)) __m |= alpha;
-         if (this->is(digit, *__low)) __m |= digit;
-         if (this->is(xdigit, *__low)) __m |= xdigit;
-         if (this->is(space, *__low)) __m |= space;
-         if (this->is(print, *__low)) __m |= print;
-         if (this->is(graph, *__low)) __m |= graph;
-         if (this->is(cntrl, *__low)) __m |= cntrl;
-         if (this->is(punct, *__low)) __m |= punct;
-         // Do not include explicit line for alnum mask since it is a
-         // pure composite of masks on FreeBSD.
-         *__vec = __m;
-#endif
-       }
-    return __high;
-  }
-
-  const char*
-  ctype<char>::
-  scan_is(mask __m, const char* __low, const char* __high) const
-  {
-    if (_M_table)
-      while (__low < __high
-            && !(_M_table[static_cast<unsigned char>(*__low)] & __m))
-       ++__low;
-    else
-      while (__low < __high && !this->is(__m, *__low))
-       ++__low;
-    return __low;
-  }
-
-  const char*
-  ctype<char>::
-  scan_not(mask __m, const char* __low, const char* __high) const
-  {
-    if (_M_table)
-      while (__low < __high
-            && (_M_table[static_cast<unsigned char>(*__low)] & __m) != 0)
-       ++__low;
-    else
-      while (__low < __high && this->is(__m, *__low) != 0)
-       ++__low;
-    return __low;
-  }
diff --git a/contrib/gcc-3.4/libstdc++-v3/config/os/bsd/freebsd/ctype_noninline.h b/contrib/gcc-3.4/libstdc++-v3/config/os/bsd/freebsd/ctype_noninline.h
deleted file mode 100644 (file)
index ec5b575..0000000
+++ /dev/null
@@ -1,91 +0,0 @@
-// Locale support -*- C++ -*-
-
-// Copyright (C) 2000, 2001, 2002 Free Software Foundation, Inc.
-//
-// This file is part of the GNU ISO C++ Library.  This library is free
-// software; you can redistribute it and/or modify it under the
-// terms of the GNU General Public License as published by the
-// Free Software Foundation; either version 2, or (at your option)
-// any later version.
-
-// This 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 General Public License for more details.
-
-// You should have received a copy of the GNU General Public License along
-// with this library; see the file COPYING.  If not, write to the Free
-// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
-// USA.
-
-// As a special exception, you may use this file as part of a free software
-// library without restriction.  Specifically, if other files instantiate
-// templates or use macros or inline functions from this file, or you compile
-// this file and link it with other files to produce an executable, this
-// file does not by itself cause the resulting executable to be covered by
-// the GNU General Public License.  This exception does not however
-// invalidate any other reasons why the executable file might be covered by
-// the GNU General Public License.
-
-//
-// ISO C++ 14882: 22.1  Locales
-//
-  
-// Information as gleaned from /usr/include/ctype.h
-  
-  const ctype_base::mask*
-  ctype<char>::classic_table() throw()
-  { return 0; }
-
-  ctype<char>::ctype(__c_locale, const mask* __table, bool __del, 
-                    size_t __refs) 
-  : facet(__refs), _M_del(__table != 0 && __del), 
-  _M_toupper(NULL), _M_tolower(NULL), 
-  _M_table(__table ? __table : classic_table()) 
-  { 
-    memset(_M_widen, 0, sizeof(_M_widen));
-    _M_widen_ok = 0;
-    memset(_M_narrow, 0, sizeof(_M_narrow));
-    _M_narrow_ok = 0;
-  }
-
-  ctype<char>::ctype(const mask* __table, bool __del, size_t __refs) 
-  : facet(__refs), _M_del(__table != 0 && __del), 
-  _M_toupper(NULL), _M_tolower(NULL), 
-  _M_table(__table ? __table : classic_table()) 
-  { 
-    memset(_M_widen, 0, sizeof(_M_widen));
-    _M_widen_ok = 0;
-    memset(_M_narrow, 0, sizeof(_M_narrow));
-    _M_narrow_ok = 0;
-  }
-
-  char
-  ctype<char>::do_toupper(char __c) const
-  { return ::toupper((int) __c); }
-
-  const char*
-  ctype<char>::do_toupper(char* __low, const char* __high) const
-  {
-    while (__low < __high)
-      {
-       *__low = ::toupper((int) *__low);
-       ++__low;
-      }
-    return __high;
-  }
-
-  char
-  ctype<char>::do_tolower(char __c) const
-  { return ::tolower((int) __c); }
-
-  const char* 
-  ctype<char>::do_tolower(char* __low, const char* __high) const
-  {
-    while (__low < __high)
-      {
-       *__low = ::tolower((int) *__low);
-       ++__low;
-      }
-    return __high;
-  }
diff --git a/contrib/gcc-3.4/libstdc++-v3/config/os/bsd/freebsd/os_defines.h b/contrib/gcc-3.4/libstdc++-v3/config/os/bsd/freebsd/os_defines.h
deleted file mode 100644 (file)
index 1e46712..0000000
+++ /dev/null
@@ -1,44 +0,0 @@
-// Specific definitions for BSD  -*- C++ -*-
-
-// Copyright (C) 2000, 2002 Free Software Foundation, Inc.
-//
-// This file is part of the GNU ISO C++ Library.  This library is free
-// software; you can redistribute it and/or modify it under the
-// terms of the GNU General Public License as published by the
-// Free Software Foundation; either version 2, or (at your option)
-// any later version.
-
-// This 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 General Public License for more details.
-
-// You should have received a copy of the GNU General Public License along
-// with this library; see the file COPYING.  If not, write to the Free
-// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
-// USA.
-
-// As a special exception, you may use this file as part of a free software
-// library without restriction.  Specifically, if other files instantiate
-// templates or use macros or inline functions from this file, or you compile
-// this file and link it with other files to produce an executable, this
-// file does not by itself cause the resulting executable to be covered by
-// the GNU General Public License.  This exception does not however
-// invalidate any other reasons why the executable file might be covered by
-// the GNU General Public License.
-
-
-#ifndef _GLIBCXX_OS_DEFINES
-#define _GLIBCXX_OS_DEFINES 1
-
-// System-specific #define, typedefs, corrections, etc, go here.  This
-// file will come before all others.
-
-#define _GLIBCXX_USE_C99_CHECK 1
-#define _GLIBCXX_USE_C99_DYNAMIC (!(__ISO_C_VISIBLE >= 1999))
-#define _GLIBCXX_USE_C99_LONG_LONG_CHECK 1
-#define _GLIBCXX_USE_C99_LONG_LONG_DYNAMIC (_GLIBCXX_USE_C99_DYNAMIC || !defined __LONG_LONG_SUPPORTED)
-#define _GLIBCXX_USE_C99_FLOAT_TRANSCENDENTALS_CHECK 1
-#define _GLIBCXX_USE_C99_FLOAT_TRANSCENDENTALS_DYNAMIC defined _XOPEN_SOURCE
-
-#endif
index d275a51..1ddc30b 100644 (file)
@@ -1,4 +1,4 @@
-# $DragonFly: src/gnu/lib/gcc34/libstdc++/Makefile,v 1.2 2005/04/21 13:42:33 joerg Exp $
+# $DragonFly: src/gnu/lib/gcc34/libstdc++/Makefile,v 1.3 2005/04/21 16:36:34 joerg Exp $
 
 .include "../Makefile.inc"
 
@@ -48,6 +48,8 @@ SRCS+=        codecvt_members.cc collate_members.cc ctype_members.cc
 SRCS+= messages_members.cc monetary_members.cc numeric_members.cc
 SRCS+= time_members.cc
 
+SRCS+= ctype_noninline.h ctype_base.h os_defines.h
+
 atomicity.cc:
        echo '#include "atomicity.h"' > ${.TARGET}
 
@@ -157,12 +159,13 @@ STDHDRSDIR=       ${INCLUDEDIR}/c++/3.4
 # c++locale <- c_locale.h
 TARGETHDRS=    io/basic_file_stdio.h io/c_io_stdio.h
 TARGETHDRS+=   allocator/new_allocator_base.h
-TARGETHDRS+=   os/bsd/freebsd/ctype_inline.h os/bsd/freebsd/ctype_noninline.h
-TARGETHDRS+=   os/bsd/freebsd/os_defines.h os/bsd/freebsd/ctype_base.h
+TARGETHDRS+=   os/bsd/netbsd/ctype_inline.h
+TARGETHDRS+=   os/bsd/netbsd/os_defines.h
 TARGETHDRS+=   locale/generic/messages_members.h locale/generic/time_members.h
 TARGETHDRS+=   locale/generic/codecvt_specializations.h
 TARGETHDRS+=   locale/generic/c_locale.h
-TARGETHDRS:=   ${TARGETHDRS:S;^;${SRCDIR}/config/;}
+TARGETHDRS:=   ${TARGETHDRS:S;^;${SRCDIR}/config/;} ctype_noninline.h \
+               ctype_base.h os_defines.h
 
 TARGETHDRSNAME_c_io_stdio.h=           c++io.h
 TARGETHDRSNAME_new_allocator_base.h=   c++allocator.h
@@ -207,6 +210,15 @@ gthr-default.h: ${GCCDIR}/gcc/gthr-posix.h
            -e 's,^#include "\(.*\)",#include <bits/\1>,g' \
            < ${GCCDIR}/gcc/gthr-posix.h > gthr-default.h
 
-CLEANFILES+=   ${THRHDRS}
+ctype_base.h: ${SRCDIR}/config/os/bsd/netbsd/ctype_base.h ctype_base.h.patch
+       patch -o ${.TARGET} -i ${.CURDIR}/ctype_base.h.patch ${SRCDIR}/config/os/bsd/netbsd/ctype_base.h
+
+ctype_noninline.h: ${SRCDIR}/config/os/bsd/netbsd/ctype_noninline.h ctype_noninline.h.patch
+       patch -o ${.TARGET} -i ${.CURDIR}/ctype_noninline.h.patch ${SRCDIR}/config/os/bsd/netbsd/ctype_noninline.h
+
+os_defines.h: ${SRCDIR}/config/os/bsd/netbsd/os_defines.h os_defines.h.patch
+       patch -o ${.TARGET} -i ${.CURDIR}/os_defines.h.patch ${SRCDIR}/config/os/bsd/netbsd/os_defines.h
+
+CLEANFILES+=   ${THRHDRS} ctype_nonline.h ctype_base.h os_defines.h
 
 .include <bsd.lib.mk>
index 9c41a71..511a825 100644 (file)
@@ -1,6 +1,6 @@
 #      @(#)Makefile    8.2 (Berkeley) 1/4/94
 # $FreeBSD: src/include/Makefile,v 1.109.2.27 2003/01/24 05:12:29 sam Exp $
-# $DragonFly: src/include/Makefile,v 1.23 2005/02/11 23:20:58 joerg Exp $
+# $DragonFly: src/include/Makefile,v 1.24 2005/04/21 16:36:34 joerg Exp $
 #
 # Doing a make install builds /usr/include
 #
@@ -12,13 +12,13 @@ SUBDIR= arpa protocols rpc rpcsvc
 INCS=  a.out.h ar.h assert.h bitstring.h complex.h cpio.h ctype.h db.h \
        dirent.h disktab.h \
        dlfcn.h elf.h elf-hints.h err.h fnmatch.h fstab.h \
-       fts.h getopt.h glob.h grp.h histedit.h ieeefp.h ifaddrs.h \
+       fts.h getopt.h glob.h grp.h histedit.h iconv.h ieeefp.h ifaddrs.h \
        iso646.h inttypes.h \
        langinfo.h libgen.h limits.h link.h locale.h malloc.h memory.h \
        mpool.h ndbm.h netdb.h nl_types.h nlist.h objformat.h \
        paths.h pthread.h pthread_np.h pwd.h \
        ranlib.h readpassphrase.h regex.h regexp.h resolv.h re_comp.h rmd160.h \
-       rune.h runetype.h search.h setjmp.h sgtty.h \
+       search.h setjmp.h sgtty.h \
        signal.h stab.h stdarg.h stdbool.h stddef.h stdint.h stdio.h stdlib.h \
        string.h stringlist.h strings.h struct.h sysexits.h tar.h time.h \
        timers.h ttyent.h unistd.h ulimit.h utime.h utmp.h vis.h wchar.h \
index 0358333..088299d 100644 (file)
@@ -1,15 +1,15 @@
+/*     $NetBSD: src/include/ctype.h,v 1.25 2003/10/22 15:51:18 kleink Exp $    */
+/*     $DragonFly: src/include/ctype.h,v 1.6 2005/04/21 16:36:34 joerg Exp $ */
+
 /*
- * Copyright (c) 1989, 1993
- *     The Regents of the University of California.  All rights reserved.
+ * Copyright (c) 1989 The Regents of the University of California.
+ * All rights reserved.
  * (c) UNIX System Laboratories, Inc.
  * All or some portions of this file are derived from material licensed
  * to the University of California by American Telephone and Telegraph
  * Co. or Unix System Laboratories, Inc. and are reproduced herein with
  * the permission of UNIX System Laboratories, Inc.
  *
- * This code is derived from software contributed to Berkeley by
- * Paul Borman at Krystal Technologies.
- *
  * Redistribution and use in source and binary forms, with or without
  * modification, are permitted provided that the following conditions
  * are met:
  * 2. Redistributions in binary form must reproduce the above copyright
  *    notice, this list of conditions and the following disclaimer in the
  *    documentation and/or other materials provided with the distribution.
- * 3. All advertising materials mentioning features or use of this software
- *    must display the following acknowledgement:
- *     This product includes software developed by the University of
- *     California, Berkeley and its contributors.
- * 4. Neither the name of the University nor the names of its contributors
+ * 3. Neither the name of the University nor the names of its contributors
  *    may be used to endorse or promote products derived from this software
  *    without specific prior written permission.
  *
  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  * SUCH DAMAGE.
  *
- *     @(#)ctype.h     8.4 (Berkeley) 1/21/94
- *      $FreeBSD: src/include/ctype.h,v 1.16 2000/02/08 07:43:23 obrien Exp $
- *      $DragonFly: src/include/ctype.h,v 1.5 2004/10/29 05:44:40 asmodai Exp $
+ *     @(#)ctype.h     5.3 (Berkeley) 4/3/91
  */
 
 #ifndef _CTYPE_H_
-#define        _CTYPE_H_
+#define _CTYPE_H_
 
-#ifndef _SYS_STDINT_H_
-#include <sys/stdint.h>        /* __ct_rune_t and friends */
-#endif
+#include <sys/cdefs.h>
+#include <machine/stdint.h>
 
-/*
- * XXX <runetype.h> brings massive namespace pollution (rune_t and struct
- * member names).
- */
-#include <runetype.h>
-
-#define        _CTYPE_A        0x00000100L             /* Alpha */
-#define        _CTYPE_C        0x00000200L             /* Control */
-#define        _CTYPE_D        0x00000400L             /* Digit */
-#define        _CTYPE_G        0x00000800L             /* Graph */
-#define        _CTYPE_L        0x00001000L             /* Lower */
-#define        _CTYPE_P        0x00002000L             /* Punct */
-#define        _CTYPE_S        0x00004000L             /* Space */
-#define        _CTYPE_U        0x00008000L             /* Upper */
-#define        _CTYPE_X        0x00010000L             /* X digit */
-#define        _CTYPE_B        0x00020000L             /* Blank */
-#define        _CTYPE_R        0x00040000L             /* Print */
-#define        _CTYPE_I        0x00080000L             /* Ideogram */
-#define        _CTYPE_T        0x00100000L             /* Special */
-#define        _CTYPE_Q        0x00200000L             /* Phonogram */
-#define        _CTYPE_SW0      0x20000000L             /* 0 width character */
-#define        _CTYPE_SW1      0x40000000L             /* 1 width character */
-#define        _CTYPE_SW2      0x80000000L             /* 2 width character */
-#define        _CTYPE_SW3      0xc0000000L             /* 3 width character */
-#define        _CTYPE_SWM      0xe0000000L             /* Mask for screen width data */
-#define        _CTYPE_SWS      30                      /* Bits to shift to get width */
+#define        _U      0x01
+#define        _L      0x02
+#define        _N      0x04
+#define        _S      0x08
+#define        _P      0x10
+#define        _C      0x20
+#define        _X      0x40
+#define        _B      0x80
+
+extern const __uint16_t        *__libc_ctype_;
+extern const __int16_t *__libc_tolower_tab_;
+extern const __int16_t *__libc_toupper_tab_;
 
 __BEGIN_DECLS
-int    isalnum (int);
-int    isalpha (int);
-int    iscntrl (int);
-int    isdigit (int);
-int    isgraph (int);
-int    islower (int);
-int    isprint (int);
-int    ispunct (int);
-int    isspace (int);
-int    isupper (int);
-int    isxdigit (int);
-int    tolower (int);
-int    toupper (int);
-
-#if !defined(_ANSI_SOURCE) && !defined(_POSIX_SOURCE)
-int    digittoint (int);
-int    isascii (int);
-int    isblank (int);
-int    ishexnumber (int);
-int    isideogram (int);
-int    isnumber (int);
-int    isphonogram (int);
-int    isrune (int);
-int    isspecial (int);
-int    toascii (int);
+int    isalnum(int);
+int    isalpha(int);
+int    iscntrl(int);
+int    isdigit(int);
+int    isgraph(int);
+int    islower(int);
+int    isprint(int);
+int    ispunct(int);
+int    isspace(int);
+int    isupper(int);
+int    isxdigit(int);
+int    tolower(int);
+int    toupper(int);
+
+#if defined(__XSI_VISIBLE)
+int    isascii(int);
+int    toascii(int);
+int    _tolower(int);
+int    _toupper(int);
 #endif
-__END_DECLS
 
-#define        __istype(c,f)   (!!__maskrune((c),(f)))
-
-#define        isalnum(c)      __istype((c), _CTYPE_A|_CTYPE_D)
-#define        isalpha(c)      __istype((c), _CTYPE_A)
-#define        iscntrl(c)      __istype((c), _CTYPE_C)
-#define        isdigit(c)      __isctype((c), _CTYPE_D) /* ANSI -- locale independent */
-#define        isgraph(c)      __istype((c), _CTYPE_G)
-#define        islower(c)      __istype((c), _CTYPE_L)
-#define        isprint(c)      __istype((c), _CTYPE_R)
-#define        ispunct(c)      __istype((c), _CTYPE_P)
-#define        isspace(c)      __istype((c), _CTYPE_S)
-#define        isupper(c)      __istype((c), _CTYPE_U)
-#define        isxdigit(c)     __isctype((c), _CTYPE_X) /* ANSI -- locale independent */
-#define        tolower(c)      __tolower(c)
-#define        toupper(c)      __toupper(c)
-
-#if !defined(_ANSI_SOURCE) && !defined(_POSIX_SOURCE)
-#define        digittoint(c)   __maskrune((c), 0xFF)
-#define        isascii(c)      (((c) & ~0x7F) == 0)
-#define        isblank(c)      __istype((c), _CTYPE_B)
-#define        ishexnumber(c)  __istype((c), _CTYPE_X)
-#define        isideogram(c)   __istype((c), _CTYPE_I)
-#define        isnumber(c)     __istype((c), _CTYPE_D)
-#define        isphonogram(c)  __istype((c), _CTYPE_Q)
-#define        isrune(c)       __istype((c), 0xFFFFFF00L)
-#define        isspecial(c)    __istype((c), _CTYPE_T)
-#define        toascii(c)      ((c) & 0x7F)
+#if _ISO_C_VISIBLE >= 1999 || _POSIX_VISIBLE >= 200112L || \
+    __XSI_VISIBLE >= 600
+int    isblank(int);
 #endif
-
-__BEGIN_DECLS
-unsigned long  ___runetype (__ct_rune_t);
-__ct_rune_t    ___tolower (__ct_rune_t);
-__ct_rune_t    ___toupper (__ct_rune_t);
 __END_DECLS
 
-/*
- * _EXTERNALIZE_CTYPE_INLINES_ is defined in locale/nomacros.c to tell us
- * to generate code for extern versions of all our inline functions.
- */
-#ifdef _EXTERNALIZE_CTYPE_INLINES_
-#define        _USE_CTYPE_INLINE_
-#define        static
-#define        __inline
+#define        isdigit(c)      ((int)((__libc_ctype_ + 1)[(int)(c)] & _N))
+#define        islower(c)      ((int)((__libc_ctype_ + 1)[(int)(c)] & _L))
+#define        isspace(c)      ((int)((__libc_ctype_ + 1)[(int)(c)] & _S))
+#define        ispunct(c)      ((int)((__libc_ctype_ + 1)[(int)(c)] & _P))
+#define        isupper(c)      ((int)((__libc_ctype_ + 1)[(int)(c)] & _U))
+#define        isalpha(c)      ((int)((__libc_ctype_ + 1)[(int)(c)] & (_U|_L)))
+#define        isxdigit(c)     ((int)((__libc_ctype_ + 1)[(int)(c)] & (_N|_X)))
+#define        isalnum(c)      ((int)((__libc_ctype_ + 1)[(int)(c)] & (_U|_L|_N)))
+#define        isprint(c)      ((int)((__libc_ctype_ + 1)[(int)(c)] & (_P|_U|_L|_N|_B)))
+#define        isgraph(c)      ((int)((__libc_ctype_ + 1)[(int)(c)] & (_P|_U|_L|_N)))
+#define        iscntrl(c)      ((int)((__libc_ctype_ + 1)[(int)(c)] & _C))
+#define        tolower(c)      ((int)((__libc_tolower_tab_ + 1)[(int)(c)]))
+#define        toupper(c)      ((int)((__libc_toupper_tab_ + 1)[(int)(c)]))
+
+#if defined(__XSI_VISIBLE)
+#define        isascii(c)      ((unsigned)(c) <= 0177)
+#define        toascii(c)      ((c) & 0177)
+#define _tolower(c)    ((c) - 'A' + 'a')
+#define _toupper(c)    ((c) - 'a' + 'A')
 #endif
 
-/*
- * Use inline functions if we are allowed to and the compiler supports them.
- */
-#if !defined(_DONT_USE_CTYPE_INLINE_) && \
-    (defined(_USE_CTYPE_INLINE_) || defined(__GNUC__) || defined(__cplusplus))
-static __inline int
-__maskrune(__ct_rune_t _c, unsigned long _f)
-{
-       return ((_c < 0 || _c >= _CACHED_RUNES) ? ___runetype(_c) :
-               _CurrentRuneLocale->runetype[_c]) & _f;
-}
-
-static __inline int
-__isctype(__ct_rune_t _c, unsigned long _f)
-{
-       return (_c < 0 || _c >= _CACHED_RUNES) ? 0 :
-              !!(_DefaultRuneLocale.runetype[_c] & _f);
-}
-
-static __inline __ct_rune_t
-__toupper(__ct_rune_t _c)
-{
-       return (_c < 0 || _c >= _CACHED_RUNES) ? ___toupper(_c) :
-              _CurrentRuneLocale->mapupper[_c];
-}
-
-static __inline __ct_rune_t
-__tolower(__ct_rune_t _c)
-{
-       return (_c < 0 || _c >= _CACHED_RUNES) ? ___tolower(_c) :
-              _CurrentRuneLocale->maplower[_c];
-}
-
-#else /* not using inlines */
+#if __ISO_C_VISIBLE >= 1999 || __POSIX_VISIBLE >= 200112L || \
+    __XSI_VISIBLE >= 600
+#define isblank(c)     ((int)((__libc_ctype_ + 1)[(int)(c)] & _B))
+#endif
 
-__BEGIN_DECLS
-int            __maskrune (__ct_rune_t, unsigned long);
-int            __isctype (__ct_rune_t, unsigned long);
-__ct_rune_t    __toupper (__ct_rune_t);
-__ct_rune_t    __tolower (__ct_rune_t);
-__END_DECLS
-#endif /* using inlines */
+#ifdef _CTYPE_PRIVATE
+#include <machine/limits.h>    /* for CHAR_BIT */
+
+#define _CTYPE_NUM_CHARS       (1 << CHAR_BIT)
+
+#define _CTYPE_ID              "DFCTYPE"
+#define _CTYPE_REV             3
+
+extern const __uint16_t        __libc_C_ctype_[];
+extern const __int16_t __libc_C_toupper_[];
+extern const __int16_t __libc_C_tolower_[];
+#endif
 
 #endif /* !_CTYPE_H_ */
index 298a407..17a999a 100644 (file)
@@ -1,3 +1,6 @@
+/*     $NetBSD: src/include/locale.h,v 1.13 2003/08/07 09:44:10 agc Exp $      */
+/*     $DragonFly: src/include/locale.h,v 1.3 2005/04/21 16:36:34 joerg Exp $ */
+
 /*
  * Copyright (c) 1991, 1993
  *     The Regents of the University of California.  All rights reserved.
  * 2. Redistributions in binary form must reproduce the above copyright
  *    notice, this list of conditions and the following disclaimer in the
  *    documentation and/or other materials provided with the distribution.
- * 3. All advertising materials mentioning features or use of this software
- *    must display the following acknowledgement:
- *     This product includes software developed by the University of
- *     California, Berkeley and its contributors.
- * 4. Neither the name of the University nor the names of its contributors
+ * 3. Neither the name of the University nor the names of its contributors
  *    may be used to endorse or promote products derived from this software
  *    without specific prior written permission.
  *
  * SUCH DAMAGE.
  *
  *     @(#)locale.h    8.1 (Berkeley) 6/2/93
- * $DragonFly: src/include/locale.h,v 1.2 2003/11/14 01:01:43 dillon Exp $
  */
 
 #ifndef _LOCALE_H_
 #define _LOCALE_H_
 
 struct lconv {
-       char    *decimal_point;
-       char    *thousands_sep;
-       char    *grouping;
-       char    *int_curr_symbol;
-       char    *currency_symbol;
-       char    *mon_decimal_point;
-       char    *mon_thousands_sep;
-       char    *mon_grouping;
-       char    *positive_sign;
-       char    *negative_sign;
+       const char      *decimal_point;
+       const char      *thousands_sep;
+       const char      *grouping;
+       const char      *int_curr_symbol;
+       const char      *currency_symbol;
+       const char      *mon_decimal_point;
+       const char      *mon_thousands_sep;
+       const char      *mon_grouping;
+       const char      *positive_sign;
+       const char      *negative_sign;
        char    int_frac_digits;
        char    frac_digits;
        char    p_cs_precedes;
@@ -56,6 +54,12 @@ struct lconv {
        char    n_sep_by_space;
        char    p_sign_posn;
        char    n_sign_posn;
+       char    int_p_cs_precedes;
+       char    int_n_cs_precedes;
+       char    int_p_sep_by_space;
+       char    int_n_sep_by_space;
+       char    int_p_sign_posn;
+       char    int_n_sign_posn;
 };
 
 #ifndef NULL
@@ -75,8 +79,8 @@ struct lconv {
 #include <sys/cdefs.h>
 
 __BEGIN_DECLS
-struct lconv   *localeconv (void);
-char           *setlocale (int, const char *);
+struct lconv   *localeconv(void);
+char           *setlocale(int, const char *);
 __END_DECLS
 
 #endif /* _LOCALE_H_ */
index f52f06d..6ac4606 100644 (file)
@@ -1,52 +1,99 @@
-/* $FreeBSD: src/include/nl_types.h,v 1.7 1999/08/27 23:44:51 peter Exp $ */
-/* $DragonFly: src/include/nl_types.h,v 1.3 2003/11/14 01:01:43 dillon Exp $ */
-
-/***********************************************************
-Copyright 1990, by Alfalfa Software Incorporated, Cambridge, Massachusetts.
-
-                        All Rights Reserved
-
-Permission to use, copy, modify, and distribute this software and its
-documentation for any purpose and without fee is hereby granted,
-provided that the above copyright notice appear in all copies and that
-both that copyright notice and this permission notice appear in
-supporting documentation, and that Alfalfa's name not be used in
-advertising or publicity pertaining to distribution of the software
-without specific, written prior permission.
-
-ALPHALPHA DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING
-ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL
-ALPHALPHA BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR
-ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
-WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION,
-ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS
-SOFTWARE.
-
-If you make any modifications, bugfixes or other changes to this software
-we'd appreciate it if you could send a copy to us so we can keep things
-up-to-date.  Many thanks.
-                               Kee Hinckley
-                               Alfalfa Software, Inc.
-                               267 Allston St., #3
-                               Cambridge, MA 02139  USA
-                               nazgul@alfalfa.com
-
-******************************************************************/
+/*     $NetBSD: src/include/nl_types.h,v 1.10 2001/12/06 23:04:06 wiz Exp $    */
+/*     $DragonFly: src/include/nl_types.h,v 1.4 2005/04/21 16:36:34 joerg Exp $ */
+
+/*-
+ * Copyright (c) 1996 The NetBSD Foundation, Inc.
+ * All rights reserved.
+ *
+ * This code is derived from software contributed to The NetBSD Foundation
+ * by J.T. Conklin.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. All advertising materials mentioning features or use of this software
+ *    must display the following acknowledgement:
+ *        This product includes software developed by the NetBSD
+ *        Foundation, Inc. and its contributors.
+ * 4. Neither the name of The NetBSD Foundation nor the names of its
+ *    contributors may be used to endorse or promote products derived
+ *    from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
+ * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
+ * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ */
 
 #ifndef _NL_TYPES_H_
 #define _NL_TYPES_H_
 #include <sys/cdefs.h>
+#include <machine/stdint.h>
+
+#ifdef _NLS_PRIVATE
+/*
+ * MESSAGE CATALOG FILE FORMAT.
+ *
+ * The NetBSD message catalog format is similar to the format used by
+ * Svr4 systems.  The differences are:
+ *   * fixed byte order (big endian)
+ *   * fixed data field sizes
+ *
+ * A message catalog contains four data types: a catalog header, one
+ * or more set headers, one or more message headers, and one or more
+ * text strings.
+ */
+
+#define _NLS_MAGIC     0xff88ff89
+
+struct _nls_cat_hdr {
+       int32_t __magic;
+       int32_t __nsets;
+       int32_t __mem;
+       int32_t __msg_hdr_offset;
+       int32_t __msg_txt_offset;
+} ;
+
+struct _nls_set_hdr {
+       int32_t __setno;        /* set number: 0 < x <= NL_SETMAX */
+       int32_t __nmsgs;        /* number of messages in the set  */
+       int32_t __index;        /* index of first msg_hdr in msg_hdr table */
+} ;
+
+struct _nls_msg_hdr {
+       int32_t __msgno;        /* msg number: 0 < x <= NL_MSGMAX */
+       int32_t __msglen;
+       int32_t __offset;
+} ;
+
+#endif
+
+#define        NL_SETD         1
+#define NL_CAT_LOCALE   1
 
-#define        NL_SETD         0
-#define        NL_CAT_LOCALE   1
+typedef struct __nl_cat_d {
+       void            *__data;
+       __size_t         __size;
+} *nl_catd;
 
-typedef        int     nl_item;
-typedef        void    *nl_catd;
+typedef long   nl_item;
 
 __BEGIN_DECLS
-extern nl_catd         catopen (__const char *, int);
-extern char    *catgets        (nl_catd, int, int,     __const char *);
-extern int     catclose (nl_catd);
+nl_catd         catopen(const char *, int);
+char   *catgets(nl_catd, int, int, const char *);
+int     catclose(nl_catd);
 __END_DECLS
 
 #endif /* _NL_TYPES_H_ */
diff --git a/include/runetype.h b/include/runetype.h
deleted file mode 100644 (file)
index e3eadd7..0000000
+++ /dev/null
@@ -1,110 +0,0 @@
-/*-
- * Copyright (c) 1993
- *     The Regents of the University of California.  All rights reserved.
- *
- * This code is derived from software contributed to Berkeley by
- * Paul Borman at Krystal Technologies.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- * 3. All advertising materials mentioning features or use of this software
- *    must display the following acknowledgement:
- *     This product includes software developed by the University of
- *     California, Berkeley and its contributors.
- * 4. Neither the name of the University nor the names of its contributors
- *    may be used to endorse or promote products derived from this software
- *    without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- *
- *     @(#)runetype.h  8.1 (Berkeley) 6/2/93
- * $FreeBSD: src/include/runetype.h,v 1.3.8.1 2002/08/08 02:42:29 imp Exp $
- * $DragonFly: src/include/Attic/runetype.h,v 1.5 2003/11/15 19:28:42 asmodai Exp $
- */
-
-#ifndef        _RUNETYPE_H_
-#define        _RUNETYPE_H_
-
-#include <sys/cdefs.h>
-#ifndef _SYS_STDINT_H_
-#include <sys/stdint.h>        /* for __rune_t and friends */
-#endif
-
-#ifndef _RUNE_T_DECLARED
-#define _RUNE_T_DECLARED
-typedef __rune_t       rune_t;
-#endif
-#ifndef __cplusplus
-#ifndef _WCHAR_T_DECLARED
-#define _WCHAR_T_DECLARED
-typedef __wchar_t      wchar_t;
-#endif
-#endif
-
-#define        _CACHED_RUNES   (1 <<8 )        /* Must be a power of 2 */
-#define        _CRMASK         (~(_CACHED_RUNES - 1))
-
-/*
- * The lower 8 bits of runetype[] contain the digit value of the rune.
- */
-typedef struct {
-       rune_t          min;            /* First rune of the range */
-       rune_t          max;            /* Last rune (inclusive) of the range */
-       rune_t          map;            /* What first maps to in maps */
-       unsigned long   *types;         /* Array of types in range */
-} _RuneEntry;
-
-typedef struct {
-       int             nranges;        /* Number of ranges stored */
-       _RuneEntry      *ranges;        /* Pointer to the ranges */
-} _RuneRange;
-
-typedef struct {
-       char            magic[8];       /* Magic saying what version we are */
-       char            encoding[32];   /* ASCII name of this encoding */
-
-       rune_t          (*sgetrune)
-           (const char *, __size_t, char const **);
-       int             (*sputrune)
-           (rune_t, char *, __size_t, char **);
-       rune_t          invalid_rune;
-
-       unsigned long   runetype[_CACHED_RUNES];
-       rune_t          maplower[_CACHED_RUNES];
-       rune_t          mapupper[_CACHED_RUNES];
-
-       /*
-        * The following are to deal with Runes larger than _CACHED_RUNES - 1.
-        * Their data is actually contiguous with this structure so as to make
-        * it easier to read/write from/to disk.
-        */
-       _RuneRange      runetype_ext;
-       _RuneRange      maplower_ext;
-       _RuneRange      mapupper_ext;
-
-       void            *variable;      /* Data which depends on the encoding */
-       int             variable_len;   /* how long that data is */
-} _RuneLocale;
-
-#define        _RUNE_MAGIC_1   "RuneMagi"      /* Indicates version 0 of RuneLocale */
-
-extern _RuneLocale _DefaultRuneLocale;
-extern _RuneLocale *_CurrentRuneLocale;
-
-#endif /* !_RUNETYPE_H_ */
index dc1b37e..c2c35cb 100644 (file)
@@ -32,7 +32,7 @@
  *
  *     @(#)stdlib.h    8.5 (Berkeley) 5/19/95
  * $FreeBSD: src/include/stdlib.h,v 1.16.2.5 2002/12/13 01:34:00 tjr Exp $
- * $DragonFly: src/include/stdlib.h,v 1.9 2005/01/05 11:51:18 joerg Exp $
+ * $DragonFly: src/include/stdlib.h,v 1.10 2005/04/21 16:36:34 joerg Exp $
  */
 
 #ifndef _STDLIB_H_
 #include <sys/stdint.h>
 #endif
 
-#if !defined(_ANSI_SOURCE) && !defined(_POSIX_SOURCE)
-#ifndef _RUNE_T_DECLARED
-#define _RUNE_T_DECLARED
-typedef __rune_t       rune_t;
-#endif
-#endif
-
 #ifndef __cplusplus
 #ifndef _WCHAR_T_DECLARED
 #define _WCHAR_T_DECLARED
index 05d5e1e..2c90dce 100644 (file)
@@ -1,3 +1,6 @@
+/*     $NetBSD: src/include/wchar.h,v 1.20 2004/05/08 21:57:05 kleink Exp $    */
+/*     $DragonFly: src/include/wchar.h,v 1.6 2005/04/21 16:36:34 joerg Exp $ */
+
 /*-
  * Copyright (c)1999 Citrus Project,
  * All rights reserved.
@@ -22,9 +25,6 @@
  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  * SUCH DAMAGE.
- *
- * $FreeBSD: src/include/wchar.h,v 1.3.2.2 2002/08/08 02:42:29 imp Exp $
- * $DragonFly: src/include/wchar.h,v 1.5 2003/11/15 19:28:42 asmodai Exp $
  */
 
 /*-
  * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
  * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
  * POSSIBILITY OF SUCH DAMAGE.
- *
- *     $NetBSD: wchar.h,v 1.8 2000/12/22 05:31:42 itojun Exp $
  */
 
 #ifndef _WCHAR_H_
 #define _WCHAR_H_
 
-#include <sys/cdefs.h>
-#ifndef _SYS_STDINT_H_
-#include <sys/stdint.h>        /* __wchar_t and friends */
-#endif
+#include <sys/stdint.h>
+/* XXX namespace pollution */
+#include <machine/limits.h>
+
+#include <stdio.h> /* for FILE* */
 
-#ifndef NULL
-#define NULL   0
+#ifndef        NULL
+#define        NULL    0
 #endif
 
 #ifndef __cplusplus
 #ifndef _WCHAR_T_DECLARED
-#define _WCHAR_T_DECLARED
-typedef __wchar_t      wchar_t;
+#define        _WCHAR_T_DECLARED
+typedef        __wchar_t       wchar_t;
 #endif
+
+#ifndef WCHAR_MIN
+#define        WCHAR_MIN       INT_MIN
 #endif
 
-#ifndef _MBSTATE_T_DECLARED
-#define _MBSTATE_T_DECLARED
-typedef        __mbstate_t     mbstate_t;
+#ifndef WCHAR_MAX
+#define        WCHAR_MAX       INT_MAX
 #endif
+#endif /* !__cplusplus */
 
 #ifndef _WINT_T_DECLARED
-#define _WINT_T_DECLARED
-typedef        __wint_t        wint_t;
+#define        _WINT_T_DECLARED
+typedef __wint_t       wint_t;
+#endif
+
+#ifndef WINT_MIN
+#define        WINT_MIN        INT_MIN
+#endif
+
+#ifndef WINT_MAX
+#define        WINT_MAX        INT_MAX
+#endif
+
+#ifndef _MBSTATE_T_DECLARED
+#define        _MBSTATE_T_DECLARED
+typedef __mbstate_t    mbstate_t;
 #endif
 
 #ifndef _SIZE_T_DECLARED
 #define _SIZE_T_DECLARED
-typedef __size_t        size_t;                /* open group */
+typedef __size_t       size_t;
 #endif
 
 #ifndef WEOF
-#define        WEOF    ((wint_t)-1)
+#define        WEOF    ((wint_t)(-1))
 #endif
 
 __BEGIN_DECLS
-
-wchar_t        *wcscat (wchar_t * __restrict, const wchar_t * __restrict);
-wchar_t        *wcschr (const wchar_t *, wchar_t);
-int    wcscmp (const wchar_t *, const wchar_t *);
-wchar_t        *wcscpy (wchar_t * __restrict, const wchar_t * __restrict);
-size_t wcscspn (const wchar_t *, const wchar_t *);
-size_t wcslen (const wchar_t *);
-wchar_t        *wcsncat (wchar_t * __restrict, const wchar_t * __restrict,
-           size_t);
-int    wcsncmp (const wchar_t *, const wchar_t *, size_t);
-wchar_t        *wcsncpy (wchar_t * __restrict , const wchar_t * __restrict,
-           size_t);
-wchar_t        *wcspbrk (const wchar_t *, const wchar_t *);
-wchar_t        *wcsrchr (const wchar_t *, wchar_t);
-#if 0
-/* XXX: not implemented */
-size_t wcsrtombs (char * __restrict, const wchar_t ** __restrict, size_t,
+wint_t btowc(int);
+size_t mbrlen(const char * __restrict, size_t, mbstate_t * __restrict);
+size_t mbrtowc(wchar_t * __restrict, const char * __restrict, size_t,
            mbstate_t * __restrict);
+int    mbsinit(const mbstate_t *);
+size_t mbsrtowcs(wchar_t * __restrict, const char ** __restrict, size_t,
+           mbstate_t * __restrict);
+size_t wcrtomb(char * __restrict, wchar_t, mbstate_t * __restrict);
+wchar_t        *wcscat(wchar_t * __restrict, const wchar_t * __restrict);
+wchar_t        *wcschr(const wchar_t *, wchar_t);
+int    wcscmp(const wchar_t *, const wchar_t *);
+int    wcscoll(const wchar_t *, const wchar_t *);
+wchar_t        *wcscpy(wchar_t * __restrict, const wchar_t * __restrict);
+size_t wcscspn(const wchar_t *, const wchar_t *);
+size_t wcslen(const wchar_t *);
+wchar_t        *wcsncat(wchar_t * __restrict, const wchar_t * __restrict, size_t);
+int    wcsncmp(const wchar_t *, const wchar_t *, size_t);
+wchar_t        *wcsncpy(wchar_t * __restrict , const wchar_t * __restrict, size_t);
+wchar_t        *wcspbrk(const wchar_t *, const wchar_t *);
+wchar_t        *wcsrchr(const wchar_t *, wchar_t);
+size_t wcsrtombs(char * __restrict, const wchar_t ** __restrict, size_t,
+                 mbstate_t * __restrict);
+size_t wcsspn(const wchar_t *, const wchar_t *);
+wchar_t        *wcsstr(const wchar_t *, const wchar_t *);
+wchar_t *wcstok(wchar_t * __restrict, const wchar_t * __restrict,
+               wchar_t ** __restrict);
+size_t wcsxfrm(wchar_t *, const wchar_t *, size_t);
+wchar_t        *wcswcs(const wchar_t *, const wchar_t *);
+wchar_t        *wmemchr(const wchar_t *, wchar_t, size_t);
+int    wmemcmp(const wchar_t *, const wchar_t *, size_t);
+wchar_t        *wmemcpy(wchar_t * __restrict, const wchar_t * __restrict, size_t);
+wchar_t        *wmemmove(wchar_t *, const wchar_t *, size_t);
+wchar_t        *wmemset(wchar_t *, wchar_t, size_t);
+
+size_t wcslcat(wchar_t *, const wchar_t *, size_t);
+size_t wcslcpy(wchar_t *, const wchar_t *, size_t);
+int    wcswidth(const wchar_t *, size_t);
+int    wctob(wint_t);
+int    wcwidth(wchar_t);
+
+unsigned long wcstoul(const wchar_t * __restrict, wchar_t ** __restrict, int);
+long   wcstol(const wchar_t * __restrict, wchar_t ** __restrict, int);
+double wcstod(const wchar_t * __restrict, wchar_t ** __restrict);
+
+#if defined(_ISOC99_SOURCE) || (__STDC_VERSION__ - 0) > 199901L || \
+    defined(_NETBSD_SOURCE)
+/* LONGLONG */
+long long wcstoll(const wchar_t * __restrict, wchar_t ** __restrict, int);
+/* LONGLONG */
+unsigned long long wcstoull(const wchar_t * __restrict,
+                           wchar_t ** __restrict, int);
 #endif
-size_t wcsspn (const wchar_t *, const wchar_t *);
-wchar_t        *wcsstr (const wchar_t *, const wchar_t *);
-wchar_t        *wmemchr (const wchar_t *, wchar_t, size_t);
-int    wmemcmp (const wchar_t *, const wchar_t *, size_t);
-wchar_t        *wmemcpy (wchar_t * __restrict, const wchar_t * __restrict,
-           size_t);
-wchar_t        *wmemmove (wchar_t *, const wchar_t *, size_t);
-wchar_t        *wmemset (wchar_t *, wchar_t, size_t);
-
-size_t wcslcat (wchar_t *, const wchar_t *, size_t);
-size_t wcslcpy (wchar_t *, const wchar_t *, size_t);
-#if 0
-/* XXX: not implemented */
-int    wcswidth (const wchar_t *, size_t);
-int    wcwidth (wchar_t);
-#endif
+
+wint_t ungetwc(wint_t, FILE *);
+wint_t fgetwc(FILE *);
+wchar_t        *fgetws(wchar_t * __restrict, int, FILE * __restrict);
+wint_t getwc(FILE *);
+wint_t getwchar(void);
+wint_t fputwc(wchar_t, FILE *);
+int    fputws(const wchar_t * __restrict, FILE * __restrict);
+wint_t putwc(wchar_t, FILE *);
+wint_t putwchar(wchar_t);
+
+int    fwide(FILE *, int);
 __END_DECLS
 
+#define getwc(f) fgetwc(f)
+#define getwchar() getwc(stdin)
+#define putwc(wc, f) fputwc((wc), (f))
+#define putwchar(wc) putwc((wc), stdout)
+
 #endif /* !_WCHAR_H_ */
index f55ed1d..13f3fd4 100644 (file)
@@ -1,3 +1,6 @@
+/*     $NetBSD: src/include/wctype.h,v 1.5 2003/03/02 22:18:11 tshiozak Exp $  */
+/*     $DragonFly: src/include/wctype.h,v 1.6 2005/04/21 16:36:34 joerg Exp $ */
+
 /*-
  * Copyright (c)1999 Citrus Project,
  * All rights reserved.
  * SUCH DAMAGE.
  *
  *     citrus Id: wctype.h,v 1.4 2000/12/21 01:50:21 itojun Exp
- *     $NetBSD: wctype.h,v 1.3 2000/12/22 14:16:16 itojun Exp $
- * $FreeBSD: src/include/wctype.h,v 1.3.2.1 2001/07/11 23:48:38 obrien Exp $
- * $DragonFly: src/include/wctype.h,v 1.5 2003/11/15 19:28:42 asmodai Exp $
  */
 
-#if 0
-/* XXX: not implemented */
 #ifndef _WCTYPE_H_
 #define        _WCTYPE_H_
 
-#include <sys/cdefs.h>
-#ifndef _SYS_STDINT_H_
 #include <sys/stdint.h>
-#endif
 
 #ifndef _WINT_T_DECLARED
-#define _WINT_T_DECLARED
-typedef __wint_t       wint_t;
+#define        _WINT_T_DECLARED
+typedef        __wint_t        wint_t;
+#endif
+
+#ifndef _WCTRANS_T_DECLARED
+#define        _WCTRANS_T_DECLARED
+typedef        __wctrans_t     wctrans_t;
+#endif
+
+#ifndef _WCTYPE_T_DECLARED
+#define        _WCTYPE_T_DECLARED
+typedef __wctype_t     wctype_t;
 #endif
 
 #ifndef WEOF
@@ -49,21 +54,24 @@ typedef __wint_t    wint_t;
 #endif
 
 __BEGIN_DECLS
-int    iswalnum (wint_t);
-int    iswalpha (wint_t);
-int    iswblank (wint_t);
-int    iswcntrl (wint_t);
-int    iswdigit (wint_t);
-int    iswgraph (wint_t);
-int    iswlower (wint_t);
-int    iswprint (wint_t);
-int    iswpunct (wint_t);
-int    iswspace (wint_t);
-int    iswupper (wint_t);
-int    iswxdigit (wint_t);
-wint_t towlower (wint_t);
-wint_t towupper (wint_t);
+int    iswalnum(wint_t);
+int    iswalpha(wint_t);
+int    iswblank(wint_t);
+int    iswcntrl(wint_t);
+int    iswdigit(wint_t);
+int    iswgraph(wint_t);
+int    iswlower(wint_t);
+int    iswprint(wint_t);
+int    iswpunct(wint_t);
+int    iswspace(wint_t);
+int    iswupper(wint_t);
+int    iswxdigit(wint_t);
+int    iswctype(wint_t, wctype_t);
+wint_t towctrans(wint_t, wctrans_t);
+wint_t towlower(wint_t);
+wint_t towupper(wint_t);
+wctrans_t wctrans(const char *);
+wctype_t wctype(const char *);
 __END_DECLS
 
 #endif         /* _WCTYPE_H_ */
-#endif
index 6facafe..eecbfab 100644 (file)
@@ -1,6 +1,6 @@
 #      @(#)Makefile    8.1 (Berkeley) 6/4/93
 # $FreeBSD: src/lib/Makefile,v 1.107.2.16 2002/10/10 19:24:35 kbyanc Exp $
-# $DragonFly: src/lib/Makefile,v 1.18 2005/04/20 21:06:05 joerg Exp $
+# $DragonFly: src/lib/Makefile,v 1.19 2005/04/21 16:36:34 joerg Exp $
 
 # To satisfy shared library or ELF linkage when only the libraries being
 # built are visible:
@@ -28,7 +28,7 @@ SUBDIR=       ${_csu} csu/common libarchive libcom_err libcrypt msun libmd \
        ${_libmilter} ${_libncp} libnetgraph libopie libpam \
        libpcap libposix1e librpcsvc ${_libsm} ${_libsmb} ${_libsmdb} \
        ${_libsmutil} libstand libtelnet libthread_xu libusbhid ${_libvgl} \
-       libwrap libxpg4 liby libz
+       libwrap libxpg4 liby libz i18n_module
 
 _csu=csu/${MACHINE_ARCH}
 
index 016bf4b..06dc5c4 100644 (file)
@@ -1,5 +1,5 @@
 # $FreeBSD: src/lib/libc/Makefile.inc,v 1.5 1999/08/27 23:58:06 peter Exp $
-# $DragonFly: src/lib/libc/Makefile.inc,v 1.3 2005/01/31 22:29:01 dillon Exp $
+# $DragonFly: src/lib/libc/Makefile.inc,v 1.4 2005/04/21 16:36:34 joerg Exp $
 #
 # This file contains make rules that are shared by libc and libc_r.
 #
@@ -20,10 +20,12 @@ WARNS=6
 .include "${.CURDIR}/../libc/${MACHINE_ARCH}/Makefile.inc"
 .endif
 
+.include "${.CURDIR}/../libc/citrus/Makefile.inc"
 .include "${.CURDIR}/../libc/db/Makefile.inc"
 .include "${.CURDIR}/../libc/compat-43/Makefile.inc"
 .include "${.CURDIR}/../libc/gen/Makefile.inc"
 .include "${.CURDIR}/../libc/gmon/Makefile.inc"
+.include "${.CURDIR}/../libc/iconv/Makefile.inc"
 .include "${.CURDIR}/../libc/locale/Makefile.inc"
 .include "${.CURDIR}/../libc/net/Makefile.inc"
 .include "${.CURDIR}/../libc/nls/Makefile.inc"
index 522fbc3..be0d6ad 100644 (file)
@@ -1,6 +1,6 @@
 #      @(#)Makefile.inc        8.6 (Berkeley) 5/4/95
 # $FreeBSD: src/lib/libc/gen/Makefile.inc,v 1.62.2.19 2003/02/21 13:46:16 phantom Exp $
-# $DragonFly: src/lib/libc/gen/Makefile.inc,v 1.9 2005/03/13 19:18:29 joerg Exp $
+# $DragonFly: src/lib/libc/gen/Makefile.inc,v 1.10 2005/04/21 16:36:34 joerg Exp $
 
 # machine-independent gen sources
 .PATH: ${.CURDIR}/../libc/${MACHINE_ARCH}/gen ${.CURDIR}/../libc/gen
@@ -8,7 +8,7 @@
 SRCS+=  _pthread_stubs.c _rand48.c _spinlock_stub.c _thread_init.c \
        alarm.c arc4random.c assert.c basename.c \
        clock.c closedir.c confstr.c \
-       crypt.c ctermid.c daemon.c devname.c dirname.c disklabel.c \
+       crypt.c ctermid.c ctype.c daemon.c devname.c dirname.c disklabel.c \
        dlfcn.c drand48.c erand48.c err.c errlst.c \
        exec.c fmtcheck.c fnmatch.c fstab.c ftok.c fts.c getbootfile.c getbsize.c \
        getcap.c getcwd.c getdomainname.c getgrent.c getgrouplist.c \
@@ -16,7 +16,7 @@ SRCS+=  _pthread_stubs.c _rand48.c _spinlock_stub.c _thread_init.c \
        getobjformat.c getosreldate.c getpagesize.c \
        getpeereid.c getprogname.c getpwent.c getttyent.c \
        getusershell.c getvfsbyname.c getvfsent.c glob.c \
-       initgroups.c isatty.c jrand48.c lcong48.c \
+       initgroups.c isascii.c isatty.c isctype.c jrand48.c lcong48.c \
        lockf.c lrand48.c mrand48.c msgctl.c \
        msgget.c msgrcv.c msgsnd.c nice.c \
        nlist.c nrand48.c ntp_gettime.c opendir.c \
@@ -28,9 +28,9 @@ SRCS+=  _pthread_stubs.c _rand48.c _spinlock_stub.c _thread_init.c \
        shmat.c shmctl.c shmdt.c shmget.c siginterrupt.c siglist.c signal.c \
        sigsetops.c sigwait.c sleep.c srand48.c stringlist.c strtofflags.c \
        sysconf.c sysctl.c sysctlbyname.c sysctlnametomib.c \
-       syslog.c telldir.c termios.c time.c times.c timezone.c tls.c ttyname.c \
-       ttyslot.c ualarm.c ulimit.c uname.c unvis.c usleep.c utime.c \
-       valloc.c vis.c \
+       syslog.c telldir.c termios.c time.c times.c timezone.c tls.c \
+       tolower.c toupper.c ttyname.c ttyslot.c ualarm.c ulimit.c \
+       uname.c unvis.c usleep.c utime.c valloc.c vis.c \
        wait.c wait3.c waitpid.c
 
 # machine-dependent gen sources
index e0bb20e..a5de3e2 100644 (file)
@@ -1,15 +1,15 @@
+/*     $NetBSD: src/lib/libc/gen/isctype.c,v 1.16 2003/08/07 16:42:52 agc Exp $        */
+/*     $DragonFly: src/lib/libc/gen/isctype.c,v 1.3 2005/04/21 16:36:34 joerg Exp $ */
+
 /*
- * Copyright (c) 1989, 1993
- *     The Regents of the University of California.  All rights reserved.
+ * Copyright (c) 1989 The Regents of the University of California.
+ * All rights reserved.
  * (c) UNIX System Laboratories, Inc.
  * All or some portions of this file are derived from material licensed
  * to the University of California by American Telephone and Telegraph
  * Co. or Unix System Laboratories, Inc. and are reproduced herein with
  * the permission of UNIX System Laboratories, Inc.
  *
- * This code is derived from software contributed to Berkeley by
- * Paul Borman at Krystal Technologies.
- *
  * Redistribution and use in source and binary forms, with or without
  * modification, are permitted provided that the following conditions
  * are met:
  * 2. Redistributions in binary form must reproduce the above copyright
  *    notice, this list of conditions and the following disclaimer in the
  *    documentation and/or other materials provided with the distribution.
- * 3. All advertising materials mentioning features or use of this software
- *    must display the following acknowledgement:
- *     This product includes software developed by the University of
- *     California, Berkeley and its contributors.
- * 4. Neither the name of the University nor the names of its contributors
+ * 3. Neither the name of the University nor the names of its contributors
  *    may be used to endorse or promote products derived from this software
  *    without specific prior written permission.
  *
  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  * SUCH DAMAGE.
- *
- * $FreeBSD: src/lib/libc/locale/isctype.c,v 1.7 2000/02/08 07:43:24 obrien Exp $
- * $DragonFly: src/lib/libc/gen/isctype.c,v 1.2 2003/06/17 04:26:44 dillon Exp $
- *
- * @(#)isctype.c       8.3 (Berkeley) 2/24/94
  */
 
+#define _ANSI_LIBRARY
 #include <ctype.h>
 
-#undef digittoint
-int
-digittoint(c)
-       int c;
-{
-       return (__maskrune((c), 0xFF));
-}
-
 #undef isalnum
 int
-isalnum(c)
-       int c;
+isalnum(int c)
 {
-       return (__istype((c), _CTYPE_A|_CTYPE_D));
+       return((__libc_ctype_ + 1)[c] & (_U|_L|_N));
 }
 
 #undef isalpha
 int
-isalpha(c)
-       int c;
+isalpha(int c)
 {
-       return (__istype((c), _CTYPE_A));
-}
-
-#undef isascii
-int
-isascii(c)
-       int c;
-{
-       return (((c) & ~0x7F) == 0);
+       return((__libc_ctype_ + 1)[c] & (_U|_L));
 }
 
 #undef isblank
 int
-isblank(c)
-       int c;
+isblank(int c)
 {
-       return (__istype((c), _CTYPE_B));
+       return((__libc_ctype_ + 1)[c] & _B);
 }
 
 #undef iscntrl
 int
-iscntrl(c)
-       int c;
+iscntrl(int c)
 {
-       return (__istype((c), _CTYPE_C));
+       return((__libc_ctype_ + 1)[c] & _C);
 }
 
 #undef isdigit
 int
-isdigit(c)
-       int c;
+isdigit(int c)
 {
-       return (__isctype((c), _CTYPE_D));
+       return((__libc_ctype_ + 1)[c] & _N);
 }
 
 #undef isgraph
 int
-isgraph(c)
-       int c;
-{
-       return (__istype((c), _CTYPE_G));
-}
-
-#undef ishexnumber 
-int
-ishexnumber(c)
-       int c;
+isgraph(int c)
 {
-       return (__istype((c), _CTYPE_X));
-}
-
-#undef isideogram
-int
-isideogram(c)
-       int c;
-{
-       return (__istype((c), _CTYPE_I));
+       return((__libc_ctype_ + 1)[c] & (_P|_U|_L|_N));
 }
 
 #undef islower
 int
-islower(c)
-       int c;
+islower(int c)
 {
-       return (__istype((c), _CTYPE_L));
-}
-
-#undef isnumber
-int
-isnumber(c)
-       int c;
-{
-       return (__istype((c), _CTYPE_D));
-}
-
-#undef isphonogram     
-int
-isphonogram(c)
-       int c;
-{
-       return (__istype((c), _CTYPE_Q));
+       return((__libc_ctype_ + 1)[c] & _L);
 }
 
 #undef isprint
 int
-isprint(c)
-       int c;
+isprint(int c)
 {
-       return (__istype((c), _CTYPE_R));
+       return((__libc_ctype_ + 1)[c] & (_P|_U|_L|_N|_B));
 }
 
 #undef ispunct
 int
-ispunct(c)
-       int c;
-{
-       return (__istype((c), _CTYPE_P));
-}
-
-#undef isrune
-int
-isrune(c)
-       int c;
+ispunct(int c)
 {
-       return (__istype((c), 0xFFFFFF00L));
+       return((__libc_ctype_ + 1)[c] & _P);
 }
 
 #undef isspace
 int
-isspace(c)
-       int c;
-{
-       return (__istype((c), _CTYPE_S));
-}
-
-#undef isspecial
-int
-isspecial(c)
-       int c;
+isspace(int c)
 {
-       return (__istype((c), _CTYPE_T));
+       return((__libc_ctype_ + 1)[c] & _S);
 }
 
 #undef isupper
 int
-isupper(c)
-       int c;
+isupper(int c)
 {
-       return (__istype((c), _CTYPE_U));
+       return((__libc_ctype_ + 1)[c] & _U);
 }
 
 #undef isxdigit
 int
-isxdigit(c)
-       int c;
+isxdigit(int c)
 {
-       return (__isctype((c), _CTYPE_X));
+       return((__libc_ctype_ + 1)[c] & (_N|_X));
 }
 
-#undef toascii
+#undef _toupper
 int
-toascii(c)
-       int c;
+_toupper(int c)
 {
-       return ((c) & 0x7F);
+       return(c - 'a' + 'A');
 }
 
-#undef tolower
+#undef _tolower
 int
-tolower(c)
-       int c;
+_tolower(int c)
 {
-        return (__tolower(c));
+       return(c - 'A' + 'a');
 }
-
-#undef toupper
-int
-toupper(c)
-       int c;
-{
-        return (__toupper(c));
-}
-
diff --git a/lib/libc/gen/tolower.c b/lib/libc/gen/tolower.c
new file mode 100644 (file)
index 0000000..c70773c
--- /dev/null
@@ -0,0 +1,60 @@
+/*     $NetBSD: src/lib/libc/gen/tolower_.c,v 1.9 2003/07/26 19:24:45 salo Exp $       */
+/*     $DragonFly: src/lib/libc/gen/tolower.c,v 1.1 2005/04/21 16:36:34 joerg Exp $ */
+
+/*
+ * Written by J.T. Conklin <jtc@NetBSD.org>.
+ * Public domain.
+ */
+
+#include <ctype.h>
+#include <stdint.h>
+#include <stdio.h>
+
+#if EOF != -1
+#error "EOF != -1"
+#endif
+
+const int16_t __libc_C_tolower_[1 + 256] = {
+       EOF,
+       0x00,   0x01,   0x02,   0x03,   0x04,   0x05,   0x06,   0x07,
+       0x08,   0x09,   0x0a,   0x0b,   0x0c,   0x0d,   0x0e,   0x0f,
+       0x10,   0x11,   0x12,   0x13,   0x14,   0x15,   0x16,   0x17,
+       0x18,   0x19,   0x1a,   0x1b,   0x1c,   0x1d,   0x1e,   0x1f,
+       0x20,   0x21,   0x22,   0x23,   0x24,   0x25,   0x26,   0x27,
+       0x28,   0x29,   0x2a,   0x2b,   0x2c,   0x2d,   0x2e,   0x2f,
+       0x30,   0x31,   0x32,   0x33,   0x34,   0x35,   0x36,   0x37,
+       0x38,   0x39,   0x3a,   0x3b,   0x3c,   0x3d,   0x3e,   0x3f,
+       0x40,   'a',    'b',    'c',    'd',    'e',    'f',    'g',
+       'h',    'i',    'j',    'k',    'l',    'm',    'n',    'o',
+       'p',    'q',    'r',    's',    't',    'u',    'v',    'w',
+       'x',    'y',    'z',    0x5b,   0x5c,   0x5d,   0x5e,   0x5f,
+       0x60,   0x61,   0x62,   0x63,   0x64,   0x65,   0x66,   0x67,
+       0x68,   0x69,   0x6a,   0x6b,   0x6c,   0x6d,   0x6e,   0x6f,
+       0x70,   0x71,   0x72,   0x73,   0x74,   0x75,   0x76,   0x77,
+       0x78,   0x79,   0x7a,   0x7b,   0x7c,   0x7d,   0x7e,   0x7f,
+       0x80,   0x81,   0x82,   0x83,   0x84,   0x85,   0x86,   0x87,
+       0x88,   0x89,   0x8a,   0x8b,   0x8c,   0x8d,   0x8e,   0x8f,
+       0x90,   0x91,   0x92,   0x93,   0x94,   0x95,   0x96,   0x97,
+       0x98,   0x99,   0x9a,   0x9b,   0x9c,   0x9d,   0x9e,   0x9f,
+       0xa0,   0xa1,   0xa2,   0xa3,   0xa4,   0xa5,   0xa6,   0xa7,
+       0xa8,   0xa9,   0xaa,   0xab,   0xac,   0xad,   0xae,   0xaf,
+       0xb0,   0xb1,   0xb2,   0xb3,   0xb4,   0xb5,   0xb6,   0xb7,
+       0xb8,   0xb9,   0xba,   0xbb,   0xbc,   0xbd,   0xbe,   0xbf,
+       0xc0,   0xc1,   0xc2,   0xc3,   0xc4,   0xc5,   0xc6,   0xc7,
+       0xc8,   0xc9,   0xca,   0xcb,   0xcc,   0xcd,   0xce,   0xcf,
+       0xd0,   0xd1,   0xd2,   0xd3,   0xd4,   0xd5,   0xd6,   0xd7,
+       0xd8,   0xd9,   0xda,   0xdb,   0xdc,   0xdd,   0xde,   0xdf,
+       0xe0,   0xe1,   0xe2,   0xe3,   0xe4,   0xe5,   0xe6,   0xe7,
+       0xe8,   0xe9,   0xea,   0xeb,   0xec,   0xed,   0xee,   0xef,
+       0xf0,   0xf1,   0xf2,   0xf3,   0xf4,   0xf5,   0xf6,   0xf7,
+       0xf8,   0xf9,   0xfa,   0xfb,   0xfc,   0xfd,   0xfe,   0xff
+};
+
+const int16_t *__libc_tolower_tab_ = __libc_C_tolower_;
+
+#undef tolower
+int
+tolower(int c)
+{
+       return((__libc_tolower_tab_ + 1)[c]);
+}
diff --git a/lib/libc/gen/toupper.c b/lib/libc/gen/toupper.c
new file mode 100644 (file)
index 0000000..df2423a
--- /dev/null
@@ -0,0 +1,60 @@
+/*     $NetBSD: src/lib/libc/gen/toupper_.c,v 1.9 2003/07/26 19:24:45 salo Exp $       */
+/*     $DragonFly: src/lib/libc/gen/toupper.c,v 1.1 2005/04/21 16:36:34 joerg Exp $ */
+
+/*
+ * Written by J.T. Conklin <jtc@NetBSD.org>.
+ * Public domain.
+ */
+
+#include <ctype.h>
+#include <stdint.h>
+#include <stdio.h>
+
+#if EOF != -1
+#error "EOF != -1"
+#endif
+
+const int16_t __libc_C_toupper_[1 + 256] = {
+       EOF,
+       0x00,   0x01,   0x02,   0x03,   0x04,   0x05,   0x06,   0x07,
+       0x08,   0x09,   0x0a,   0x0b,   0x0c,   0x0d,   0x0e,   0x0f,
+       0x10,   0x11,   0x12,   0x13,   0x14,   0x15,   0x16,   0x17,
+       0x18,   0x19,   0x1a,   0x1b,   0x1c,   0x1d,   0x1e,   0x1f,
+       0x20,   0x21,   0x22,   0x23,   0x24,   0x25,   0x26,   0x27,
+       0x28,   0x29,   0x2a,   0x2b,   0x2c,   0x2d,   0x2e,   0x2f,
+       0x30,   0x31,   0x32,   0x33,   0x34,   0x35,   0x36,   0x37,
+       0x38,   0x39,   0x3a,   0x3b,   0x3c,   0x3d,   0x3e,   0x3f,
+       0x40,   0x41,   0x42,   0x43,   0x44,   0x45,   0x46,   0x47,
+       0x48,   0x49,   0x4a,   0x4b,   0x4c,   0x4d,   0x4e,   0x4f,
+       0x50,   0x51,   0x52,   0x53,   0x54,   0x55,   0x56,   0x57,
+       0x58,   0x59,   0x5a,   0x5b,   0x5c,   0x5d,   0x5e,   0x5f,
+       0x60,   'A',    'B',    'C',    'D',    'E',    'F',    'G',
+       'H',    'I',    'J',    'K',    'L',    'M',    'N',    'O',
+       'P',    'Q',    'R',    'S',    'T',    'U',    'V',    'W',
+       'X',    'Y',    'Z',    0x7b,   0x7c,   0x7d,   0x7e,   0x7f,
+       0x80,   0x81,   0x82,   0x83,   0x84,   0x85,   0x86,   0x87,
+       0x88,   0x89,   0x8a,   0x8b,   0x8c,   0x8d,   0x8e,   0x8f,
+       0x90,   0x91,   0x92,   0x93,   0x94,   0x95,   0x96,   0x97,
+       0x98,   0x99,   0x9a,   0x9b,   0x9c,   0x9d,   0x9e,   0x9f,
+       0xa0,   0xa1,   0xa2,   0xa3,   0xa4,   0xa5,   0xa6,   0xa7,
+       0xa8,   0xa9,   0xaa,   0xab,   0xac,   0xad,   0xae,   0xaf,
+       0xb0,   0xb1,   0xb2,   0xb3,   0xb4,   0xb5,   0xb6,   0xb7,
+       0xb8,   0xb9,   0xba,   0xbb,   0xbc,   0xbd,   0xbe,   0xbf,
+       0xc0,   0xc1,   0xc2,   0xc3,   0xc4,   0xc5,   0xc6,   0xc7,
+       0xc8,   0xc9,   0xca,   0xcb,   0xcc,   0xcd,   0xce,   0xcf,
+       0xd0,   0xd1,   0xd2,   0xd3,   0xd4,   0xd5,   0xd6,   0xd7,
+       0xd8,   0xd9,   0xda,   0xdb,   0xdc,   0xdd,   0xde,   0xdf,
+       0xe0,   0xe1,   0xe2,   0xe3,   0xe4,   0xe5,   0xe6,   0xe7,
+       0xe8,   0xe9,   0xea,   0xeb,   0xec,   0xed,   0xee,   0xef,
+       0xf0,   0xf1,   0xf2,   0xf3,   0xf4,   0xf5,   0xf6,   0xf7,
+       0xf8,   0xf9,   0xfa,   0xfb,   0xfc,   0xfd,   0xfe,   0xff
+};
+
+const int16_t *__libc_toupper_tab_ = __libc_C_toupper_;
+
+#undef toupper
+int
+toupper(int c)
+{
+       return((__libc_toupper_tab_ + 1)[c]);
+}
index 3d48120..b06483c 100644 (file)
@@ -1,25 +1,27 @@
-#      from @(#)Makefile.inc   8.1 (Berkeley) 6/4/93
-# $FreeBSD: src/lib/libc/locale/Makefile.inc,v 1.16.2.5 2002/10/24 11:00:52 tjr Exp $
-# $DragonFly: src/lib/libc/locale/Makefile.inc,v 1.6 2005/03/13 19:18:29 joerg Exp $
+# $DragonFly: src/lib/libc/locale/Makefile.inc,v 1.7 2005/04/21 16:36:34 joerg Exp $
 
-# locale sources
-.PATH: ${.CURDIR}/../libc/${MACHINE_ARCH}/locale ${.CURDIR}/../libc/locale
+.PATH: ${.CURDIR}/../libc/locale
 
-SRCS+= ansi.c big5.c collate.c collcmp.c euc.c fix_grouping.c frune.c \
-       gbk.c gb18030.c isctype.c \
-       ldpart.c lmessages.c lmonetary.c lnumeric.c localeconv.c mbrune.c \
-        mskanji.c nl_langinfo.c nomacros.c none.c rune.c \
-       runetype.c setinvalidrune.c setlocale.c setrunelocale.c table.c \
-       tolower.c toupper.c utf2.c utf8.c
+SRCS+= collate.c collcmp.c
+SRCS+= _def_messages.c _def_monetary.c _def_numeric.c _def_time.c
+SRCS+= ctypeio.c localeconv.c nl_langinfo.c setlocale.c __mb_cur_max.c
+SRCS+= wcscoll.c wcstod.c wcstol.c wcstoll.c wcstoimax.c wcstoul.c
+SRCS+= wcstoumax.c wcsxfrm.c aliasname.c
+SRCS+= ___runetype_mb.c _wctrans.c iswctype.c multibyte_c90.c
+SRCS+= multibyte_amd1.c rune.c runeglue.c runetable.c setrunelocale.c
+
+CFLAGS+=       -I${.CURDIR}/../libc/locale
 
 .if ${LIB} == "c"
-MAN+=  mbrune.3 multibyte.3 nl_langinfo.3 rune.3 setlocale.3
+MAN+=  nl_langinfo.3 setlocale.3
+MAN+=  btowc.3 iswalnum.3 iswctype.3 towlower.3 towctrans.3 mblen.3 mbrlen.3
+MAN+=  mbrtowc.3 mbsinit.3 mbsrtowcs.3 mbstowcs.3 mbtowc.3 wcrtomb.3
+MAN+=  wcsrtombs.3 wcstombs.3 wctob.3 wctomb.3 wctrans.3 wctype.3
 
-MLINKS+=mbrune.3 mbmb.3 mbrune.3 mbrrune.3
-MLINKS+=multibyte.3 mblen.3 multibyte.3 mbstowcs.3 multibyte.3 mbtowc.3 \
-       multibyte.3 wcstombs.3 multibyte.3 wctomb.3
-MLINKS+=rune.3 fgetrune.3 rune.3 fputrune.3 rune.3 fungetrune.3 \
-       rune.3 setinvalidrune.3 rune.3 setrunelocale.3 rune.3 sgetrune.3 \
-       rune.3 sputrune.3
-MLINKS+=setlocale.3 localeconv.3
+MLINKS+=iswalnum.3 iswalpha.3 iswalnum.3 iswblank.3
+MLINKS+=iswalnum.3 iswcntrl.3 iswalnum.3 iswdigit.3
+MLINKS+=iswalnum.3 iswgraph.3 iswalnum.3 iswlower.3
+MLINKS+=iswalnum.3 iswprint.3 iswalnum.3 iswpunct.3
+MLINKS+=iswalnum.3 iswspace.3 iswalnum.3 iswupper.3
+MLINKS+=iswalnum.3 iswxdigit.3 towlower.3 towupper.3
 .endif
diff --git a/lib/libc/locale/_def_monetary.c b/lib/libc/locale/_def_monetary.c
new file mode 100644 (file)
index 0000000..fbed774
--- /dev/null
@@ -0,0 +1,37 @@
+/*     $NetBSD: src/lib/libc/locale/_def_monetary.c,v 1.7 2003/07/26 19:24:46 salo Exp $       */
+/*     $DragonFly: src/lib/libc/locale/_def_monetary.c,v 1.1 2005/04/21 16:36:34 joerg Exp $ */
+
+/*
+ * Written by J.T. Conklin <jtc@NetBSD.org>.
+ * Public domain.
+ */
+
+#include <sys/localedef.h>
+#include <limits.h>
+#include <locale.h>
+
+const _MonetaryLocale _DefaultMonetaryLocale = {
+       "",
+       "",
+       "",
+       "",
+       "",
+       "",
+       "",
+       (char)CHAR_MAX,
+       (char)CHAR_MAX,
+       (char)CHAR_MAX,
+       (char)CHAR_MAX,
+       (char)CHAR_MAX,
+       (char)CHAR_MAX,
+       (char)CHAR_MAX,
+       (char)CHAR_MAX,
+       (char)CHAR_MAX,
+       (char)CHAR_MAX,
+       (char)CHAR_MAX,
+       (char)CHAR_MAX,
+       (char)CHAR_MAX,
+       (char)CHAR_MAX
+};
+
+const _MonetaryLocale *_CurrentMonetaryLocale = &_DefaultMonetaryLocale;
index cb94ce4..b453625 100644 (file)
@@ -1,5 +1,5 @@
 /*     $NetBSD: src/lib/libc/locale/_def_time.c,v 1.7 2003/07/26 19:24:46 salo Exp $   */
-/*     $DragonFly: src/lib/libc/locale/_def_time.c,v 1.1 2005/03/16 06:54:41 joerg Exp $ */
+/*     $DragonFly: src/lib/libc/locale/_def_time.c,v 1.2 2005/04/21 16:36:34 joerg Exp $ */
 
 /*
  * Written by J.T. Conklin <jtc@NetBSD.org>.
@@ -21,7 +21,8 @@ const _TimeLocale _DefaultTimeLocale =  {
        "%a %b %e %H:%M:%S %Y",
        "%m/%d/%y",
        "%H:%M:%S",
-       "%I:%M:%S %p"
+       "%I:%M:%S %p",
+       "%a %b %e %H:%M:%S %Z %Y"
 };
 
 const _TimeLocale *_CurrentTimeLocale = &_DefaultTimeLocale;
diff --git a/lib/libc/locale/ansi.c b/lib/libc/locale/ansi.c
deleted file mode 100644 (file)
index fe3b0c3..0000000
+++ /dev/null
@@ -1,195 +0,0 @@
-/*-
- * Copyright (c) 1993
- *     The Regents of the University of California.  All rights reserved.
- *
- * This code is derived from software contributed to Berkeley by
- * Paul Borman at Krystal Technologies.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- * 3. All advertising materials mentioning features or use of this software
- *    must display the following acknowledgement:
- *     This product includes software developed by the University of
- *     California, Berkeley and its contributors.
- * 4. Neither the name of the University nor the names of its contributors
- *    may be used to endorse or promote products derived from this software
- *    without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- *
- * @(#)ansi.c  8.1 (Berkeley) 6/27/93
- * $FreeBSD: src/lib/libc/locale/ansi.c,v 1.3.6.1 2003/04/05 08:28:24 tjr Exp $
- * $DragonFly: src/lib/libc/locale/Attic/ansi.c,v 1.2 2003/06/17 04:26:43 dillon Exp $
- */
-
-#include <errno.h>
-#include <stdlib.h>
-#include <limits.h>
-#include <stddef.h>
-#include <rune.h>
-
-int
-mblen(s, n)
-       const char *s;
-       size_t n;
-{
-       char const *e;
-
-       if (s == 0 || *s == 0)
-               return (0);     /* No support for state dependent encodings. */
-
-       if (sgetrune(s, n, &e) == _INVALID_RUNE)
-               return (s - e);
-       return (e - s);
-}
-
-int
-mbtowc(pwc, s, n)
-       wchar_t *pwc;
-       const char *s;
-       size_t n;
-{
-       char const *e;
-       rune_t r;
-
-       if (s == 0 || *s == 0)
-               return (0);     /* No support for state dependent encodings. */
-
-       if ((r = sgetrune(s, n, &e)) == _INVALID_RUNE)
-               return (s - e);
-       if (pwc)
-               *pwc = r;
-       return (e - s);
-}
-
-int
-wctomb(s, wchar)
-       char *s;
-       wchar_t wchar;
-{
-       char *e;
-
-       if (s == 0)
-               return (0);     /* No support for state dependent encodings. */
-
-       if (wchar == 0) {
-               *s = 0;
-               return (1);
-       }
-
-       sputrune(wchar, s, MB_CUR_MAX, &e);
-       return (e ? e - s : -1);
-}
-
-size_t
-mbstowcs(pwcs, s, n)
-       wchar_t *pwcs;
-       const char *s;
-       size_t n;
-{
-       const char *e;
-       int cnt;
-       rune_t r;
-
-       if (s == NULL) {
-               errno = EINVAL;
-               return (-1);
-       }
-
-       if (pwcs == NULL) {
-               /* Convert and count only, do not store. */
-               cnt = 0;
-               while ((r = sgetrune(s, MB_LEN_MAX, &e)) != _INVALID_RUNE &&
-                   r != 0) {
-                       s = e;
-                       cnt++;
-               }
-               if (r == _INVALID_RUNE) {
-                       errno = EILSEQ;
-                       return (-1);
-               }
-               return (cnt);
-       }
-
-       /* Convert, store and count characters. */
-       cnt = 0;
-       while (n-- > 0) {
-               *pwcs = sgetrune(s, MB_LEN_MAX, &e);
-               if (*pwcs == _INVALID_RUNE) {
-                       errno = EILSEQ;
-                       return (-1);
-               }
-               if (*pwcs++ == L'\0')
-                       break;
-               s = e;
-               ++cnt;
-       }
-
-       return (cnt);
-}
-
-size_t
-wcstombs(s, pwcs, n)
-       char *s;
-       const wchar_t *pwcs;
-       size_t n;
-{
-       char buf[MB_LEN_MAX];
-       char *e;
-       int cnt, nb;
-
-       if (pwcs == NULL || n > INT_MAX) {
-               errno = EINVAL;
-               return (-1);
-       }
-
-       cnt = 0;
-
-       if (s == NULL) {
-               /* Convert and count only, do not store. */
-               while (*pwcs != L'\0') {
-                       if (sputrune(*pwcs++, buf, MB_LEN_MAX, &e) == 0) {
-                               errno = EILSEQ;
-                               return (-1);
-                       }
-                       cnt += e - buf;
-               }
-               return (cnt);
-       }
-
-       /* Convert, store and count characters. */
-       nb = n;
-       while (nb > 0) {
-               if (*pwcs == L'\0') {
-                       *s = '\0';
-                       break;
-               }
-               if (sputrune(*pwcs++, s, nb, &e) == 0) {
-                       errno = EILSEQ;
-                       return (-1);
-               }
-               if (e == NULL)          /* too long */
-                       return (cnt);
-               cnt += e - s;
-               nb -= e - s;
-               s = e;
-       }
-
-       return (cnt);
-}
diff --git a/lib/libc/locale/big5.c b/lib/libc/locale/big5.c
deleted file mode 100644 (file)
index e3cb8bc..0000000
+++ /dev/null
@@ -1,116 +0,0 @@
-/*-
- * Copyright (c) 1993
- *     The Regents of the University of California.  All rights reserved.
- *
- * This code is derived from software contributed to Berkeley by
- * Paul Borman at Krystal Technologies.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- * 3. All advertising materials mentioning features or use of this software
- *    must display the following acknowledgement:
- *     This product includes software developed by the University of
- *     California, Berkeley and its contributors.
- * 4. Neither the name of the University nor the names of its contributors
- *    may be used to endorse or promote products derived from this software
- *    without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- *
- * $FreeBSD: src/lib/libc/locale/big5.c,v 1.3.2.2 2001/03/05 10:02:54 obrien Exp $
- * $DragonFly: src/lib/libc/locale/Attic/big5.c,v 1.4 2003/12/02 14:56:28 eirikn Exp $
- *
- * @(#)big5.c  8.1 (Berkeley) 6/4/93
- */
-
-#include <rune.h>
-#include <stdlib.h>
-#include <sys/types.h>
-
-rune_t _BIG5_sgetrune (const char *, size_t, char const **);
-int    _BIG5_sputrune (rune_t, char *, size_t, char **);
-
-int
-_BIG5_init(rl)
-       _RuneLocale *rl;
-{
-       rl->sgetrune = _BIG5_sgetrune;
-       rl->sputrune = _BIG5_sputrune;
-       _CurrentRuneLocale = rl;
-       __mb_cur_max = 2;
-       return (0);
-}
-
-static inline int
-_big5_check(c)
-       u_int c;
-{
-       c &= 0xff;
-       return ((c >= 0xa1 && c <= 0xfe) ? 2 : 1);
-}
-
-rune_t
-_BIG5_sgetrune(string, n, result)
-       const char *string;
-       size_t n;
-       char const **result;
-{
-       rune_t rune = 0;
-       int len;
-
-       if (n < 1 || (len = _big5_check(*string)) > n) {
-               if (result)
-                       *result = string;
-               return (_INVALID_RUNE);
-       }
-       while (--len >= 0)
-               rune = (rune << 8) | ((u_int)(*string++) & 0xff);
-       if (result)
-               *result = string;
-       return rune;
-}
-
-int
-_BIG5_sputrune(c, string, n, result)
-       rune_t c;
-       char *string, **result;
-       size_t n;
-{
-       if (c & 0x8000) {
-               if (n >= 2) {
-                       string[0] = (c >> 8) & 0xff;
-                       string[1] = c & 0xff;
-                       if (result)
-                               *result = string + 2;
-                       return (2);
-               }
-       }
-       else {
-               if (n >= 1) {
-                       *string = c & 0xff;
-                       if (result)
-                               *result = string + 1;
-                       return (1);
-               }
-       }
-       if (result)
-               *result = string;
-       return (0);
-       
-}
index 1d7fdba..adf90cd 100644 (file)
@@ -25,7 +25,7 @@
  * SUCH DAMAGE.
  *
  * $FreeBSD: src/lib/libc/locale/collate.c,v 1.21.2.4 2002/10/11 10:36:47 ache Exp $
- * $DragonFly: src/lib/libc/locale/collate.c,v 1.5 2005/03/09 18:52:21 joerg Exp $
+ * $DragonFly: src/lib/libc/locale/collate.c,v 1.6 2005/04/21 16:36:34 joerg Exp $
  */
 
 #include "namespace.h"
 #include "un-namespace.h"
 
 #include "collate.h"
-#include "setlocale.h"
-#include "ldpart.h"
+
+#define        ENCODING_LEN    31
+#define _LDP_LOADED 0
+#define _LDP_ERROR  (-1)
+#define _LDP_CACHE  1
 
 int __collate_load_error = 1;
 int __collate_substitute_nontrivial;
diff --git a/lib/libc/locale/euc.c b/lib/libc/locale/euc.c
deleted file mode 100644 (file)
index 9461682..0000000
+++ /dev/null
@@ -1,217 +0,0 @@
-/*-
- * Copyright (c) 1993
- *     The Regents of the University of California.  All rights reserved.
- *
- * This code is derived from software contributed to Berkeley by
- * Paul Borman at Krystal Technologies.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- * 3. All advertising materials mentioning features or use of this software
- *    must display the following acknowledgement:
- *     This product includes software developed by the University of
- *     California, Berkeley and its contributors.
- * 4. Neither the name of the University nor the names of its contributors
- *    may be used to endorse or promote products derived from this software
- *    without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- *
- * @(#)euc.c   8.1 (Berkeley) 6/4/93
- * $FreeBSD: src/lib/libc/locale/euc.c,v 1.3.6.2 2002/08/12 11:17:37 ache Exp $
- * $DragonFly: src/lib/libc/locale/Attic/euc.c,v 1.3 2003/12/02 14:56:28 eirikn Exp $
- */
-
-#include <sys/types.h>
-
-#include <errno.h>
-#include <rune.h>
-#include <stdlib.h>
-
-rune_t _EUC_sgetrune(const char *, size_t, char const **);
-int    _EUC_sputrune(rune_t, char *, size_t, char **);
-
-typedef struct {
-       int     count[4];
-       rune_t  bits[4];
-       rune_t  mask;
-} _EucInfo;
-
-int
-_EUC_init(rl)
-       _RuneLocale *rl;
-{
-       _EucInfo *ei;
-       int x, new__mb_cur_max;
-       char *v, *e;
-
-       rl->sgetrune = _EUC_sgetrune;
-       rl->sputrune = _EUC_sputrune;
-
-       if (rl->variable == NULL)
-               return (EFTYPE);
-
-       v = (char *)rl->variable;
-
-       while (*v == ' ' || *v == '\t')
-               ++v;
-
-       if ((ei = malloc(sizeof(_EucInfo))) == NULL)
-               return (errno == 0 ? ENOMEM : errno);
-
-       new__mb_cur_max = 0;
-       for (x = 0; x < 4; ++x) {
-               ei->count[x] = (int)strtol(v, &e, 0);
-               if (v == e || !(v = e)) {
-                       free(ei);
-                       return (EFTYPE);
-               }
-               if (new__mb_cur_max < ei->count[x])
-                       new__mb_cur_max = ei->count[x];
-               while (*v == ' ' || *v == '\t')
-                       ++v;
-               ei->bits[x] = (int)strtol(v, &e, 0);
-               if (v == e || !(v = e)) {
-                       free(ei);
-                       return (EFTYPE);
-               }
-               while (*v == ' ' || *v == '\t')
-                       ++v;
-       }
-       ei->mask = (int)strtol(v, &e, 0);
-       if (v == e || !(v = e)) {
-               free(ei);
-               return (EFTYPE);
-       }
-       rl->variable = ei;
-       rl->variable_len = sizeof(_EucInfo);
-       _CurrentRuneLocale = rl;
-       __mb_cur_max = new__mb_cur_max;
-       return (0);
-}
-
-#define        CEI     ((_EucInfo *)(_CurrentRuneLocale->variable))
-
-#define        _SS2    0x008e
-#define        _SS3    0x008f
-
-#define        GR_BITS 0x80808080 /* XXX: to be fixed */
-
-static inline int
-_euc_set(c)
-       u_int c;
-{
-       c &= 0xff;
-
-       return ((c & 0x80) ? c == _SS3 ? 3 : c == _SS2 ? 2 : 1 : 0);
-}
-rune_t
-_EUC_sgetrune(string, n, result)
-       const char *string;
-       size_t n;
-       char const **result;
-{
-       rune_t rune = 0;
-       int len, set;
-
-       if (n < 1 || (len = CEI->count[set = _euc_set(*string)]) > n) {
-               if (result)
-                       *result = string;
-               return (_INVALID_RUNE);
-       }
-       switch (set) {
-       case 3:
-       case 2:
-               --len;
-               ++string;
-               /* FALLTHROUGH */
-       case 1:
-       case 0:
-               while (len-- > 0)
-                       rune = (rune << 8) | ((u_int)(*string++) & 0xff);
-               break;
-       }
-       if (result)
-               *result = string;
-       return ((rune & ~CEI->mask) | CEI->bits[set]);
-}
-
-int
-_EUC_sputrune(c, string, n, result)
-       rune_t c;
-       char *string, **result;
-       size_t n;
-{
-       rune_t m = c & CEI->mask;
-       rune_t nm = c & ~m;
-       int i, len;
-
-       if (m == CEI->bits[1]) {
-CodeSet1:
-               /* Codeset 1: The first byte must have 0x80 in it. */
-               i = len = CEI->count[1];
-               if (n >= len) {
-                       if (result)
-                               *result = string + len;
-                       while (i-- > 0)
-                               *string++ = (nm >> (i << 3)) | 0x80;
-               } else
-                       if (result)
-                               *result = (char *) 0;
-       } else {
-               if (m == CEI->bits[0]) {
-                       i = len = CEI->count[0];
-                       if (n < len) {
-                               if (result)
-                                       *result = NULL;
-                               return (len);
-                       }
-               } else
-                       if (m == CEI->bits[2]) {
-                               i = len = CEI->count[2];
-                               if (n < len) {
-                                       if (result)
-                                               *result = NULL;
-                                       return (len);
-                               }
-                               *string++ = _SS2;
-                               --i;
-                               /* SS2 designates G2 into GR */
-                               nm |= GR_BITS;
-                       } else
-                               if (m == CEI->bits[3]) {
-                                       i = len = CEI->count[3];
-                                       if (n < len) {
-                                               if (result)
-                                                       *result = NULL;
-                                               return (len);
-                                       }
-                                       *string++ = _SS3;
-                                       --i;
-                                       /* SS3 designates G3 into GR */
-                                       nm |= GR_BITS;
-                               } else
-                                       goto CodeSet1;  /* Bletch */
-               while (i-- > 0)
-                       *string++ = (nm >> (i << 3)) & 0xff;
-               if (result)
-                       *result = string;
-       }
-       return (len);
-}
diff --git a/lib/libc/locale/fix_grouping.c b/lib/libc/locale/fix_grouping.c
deleted file mode 100644 (file)
index 0949b7e..0000000
+++ /dev/null
@@ -1,83 +0,0 @@
-/*
- * Copyright (c) 2001 Alexey Zelkin <phantom@FreeBSD.org>
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- *
- * $FreeBSD: src/lib/libc/locale/fix_grouping.c,v 1.6.2.1 2002/03/12 17:17:48 phantom Exp $
- * $DragonFly: src/lib/libc/locale/Attic/fix_grouping.c,v 1.2 2003/06/17 04:26:44 dillon Exp $
- */
-
-#include <ctype.h>
-#include <limits.h>
-#include <stddef.h>
-
-static const char nogrouping[] = { CHAR_MAX, '\0' };
-
-/*
- * "3;3;-1" -> "\003\003\177"
- */
-
-const char *
-__fix_locale_grouping_str(const char *str) {
-
-       char *src, *dst;
-       char n;
-
-       if (str == NULL || *str == '\0') {
-               return nogrouping;
-       }
-
-       for (src = (char*)str, dst = (char*)str; *src != '\0'; src++) {
-
-               /* input string examples: "3;3", "3;2;-1" */
-               if (*src == ';')
-                       continue;
-       
-               if (*src == '-' && *(src+1) == '1') {
-                       *dst++ = CHAR_MAX;
-                       src++;
-                       continue;
-               }
-
-               if (!isdigit((unsigned char)*src)) {
-                       /* broken grouping string */
-                       return nogrouping;
-               }
-
-               /* assume all numbers <= 99 */
-               n = *src - '0';
-               if (isdigit((unsigned char)*(src+1))) {
-                       src++;
-                       n *= 10;
-                       n += *src - '0';
-               }
-
-               *dst = n;
-               /* NOTE: assume all input started with "0" as 'no grouping' */
-               if (*dst == '\0')
-                       return (dst == (char*)str) ? nogrouping : str;
-               dst++;
-       }
-       *dst = '\0';
-       return str;
-}
diff --git a/lib/libc/locale/gb18030.c b/lib/libc/locale/gb18030.c
deleted file mode 100644 (file)
index f6bdd49..0000000
+++ /dev/null
@@ -1,167 +0,0 @@
-/*
- * Copyright (c) 2003
- *     The Regents of the University of California.  All rights reserved.
- *
- * This code is contributed to Robin Hu <huxw@knight.6test.edu.cn>
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- * 3. All advertising materials mentioning features or use of this software
- *    must display the following acknowledgement:
- *     This product includes software developed by the University of
- *     California, Berkeley and its contributors.
- * 4. Neither the name of the University nor the names of its contributors
- *    may be used to endorse or promote products derived from this software
- *    without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * $DragonFly: src/lib/libc/locale/Attic/gb18030.c,v 1.1 2003/12/01 23:29:25 drhodus Exp $
- */
-
-#include <sys/cdefs.h>
-
-#include <rune.h>
-#include <stddef.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <sys/types.h>
-
-rune_t _GB18030_sgetrune(const char *, size_t, char const **);
-int    _GB18030_sputrune(rune_t, char *, size_t, char **);
-
-int
-_GB18030_init(rl)
-       _RuneLocale *rl;
-{
-       rl->sgetrune = _GB18030_sgetrune;
-       rl->sputrune = _GB18030_sputrune;
-       _CurrentRuneLocale = rl;
-       __mb_cur_max = 4;
-       return (0);
-}
-
-static inline int
-_gb18030_check_string(s_, n)
-     const char* s_;
-     int n;
-{  
-  const unsigned char* s = s_;
-  if ((s[0]>=0x81&&s[0]<=0xfe)) {
-    if (n<2) goto bad_string;
-    if ((s[1]>=0x40&&s[1]<=0x7e)||(s[1]>=0x80&&s[1]<=0xfe))
-      return 2;
-    if ((s[1]>=0x30&&s[1]<=0x39)) {
-      if (n<4) goto bad_string;
-      if ((s[2]>=0x81&&s[2]<=0xfe) && (s[3]>=0x30&&s[3]<=0x39))
-        return 4;
-      else
-        goto bad_string;
-    }
-  } else {
-    return 1;
-  }
- bad_string:
-  return -1;
-}
-
-static inline int
-_gb18030_check_rune(r)
-     rune_t r;
-{
-  if (r&0xff000000) {
-      return 4;
-  }
-  if (r&0xff00) {
-      return 2;
-  }
-  return 1;
-}
-
-rune_t
-_GB18030_sgetrune(string, n, result)
-       const char *string;
-       size_t n;
-       char const **result;
-{
-  rune_t rune = 0;
-  int len;
-
-  len = _gb18030_check_string(string, n);
-
-  if (len == -1) {
-    if (result)
-      *result = string;
-    return (_INVALID_RUNE);
-  }
-  
-  while (--len >= 0)
-    rune = (rune << 8) | ((u_int)(*string++) & 0xff);
-
-  rune &= 0x7fffffff;
-  if (result)
-    *result = string;
-  return rune;
-}
-
-int
-_GB18030_sputrune(c, string, n, result)
-       rune_t c;
-       char *string, **result;
-       size_t n;
-{
-  int len;
-  len = _gb18030_check_rune(c);
-
-  switch (len) {
-  case 1:
-    if (n >= 1) {  
-      *string = c & 0xff;
-      if (result)
-        *result = string + 1;
-      return (1);
-    }
-    break;
-  case 2:
-    if (n >= 2) {
-      string[0] = (c >> 8) & 0xff;
-      string[1] = c & 0xff;
-      if (result)
-        *result = string + 2;
-      return (2);
-    }
-    break;
-  case 4:
-    if (n >= 4) {
-      string[0] = ((c >>24) & 0xff) | 0x80;
-      string[1] = (c >>16) & 0xff;
-      string[2] = (c >>8)  & 0xff;
-      string[3] = c & 0xff;
-      if (result)
-        *result = string + 4;
-      return (4);
-    }
-    break;
-  default:
-    break;
-  }
-  if (result)
-    *result = string;
-  return (0);
-}
-
diff --git a/lib/libc/locale/gbk.c b/lib/libc/locale/gbk.c
deleted file mode 100644 (file)
index 1af6d9d..0000000
+++ /dev/null
@@ -1,115 +0,0 @@
-/*-
- * Copyright (c) 1993
- *     The Regents of the University of California.  All rights reserved.
- *
- * This code is derived from software contributed to Berkeley by
- * Paul Borman at Krystal Technologies.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- * 3. All advertising materials mentioning features or use of this software
- *    must display the following acknowledgement:
- *     This product includes software developed by the University of
- *     California, Berkeley and its contributors.
- * 4. Neither the name of the University nor the names of its contributors
- *    may be used to endorse or promote products derived from this software
- *    without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * $DragonFly: src/lib/libc/locale/Attic/gbk.c,v 1.2 2003/12/02 14:56:28 eirikn Exp $
- */
-
-#include <sys/cdefs.h>
-
-#include <rune.h>
-#include <stdlib.h>
-#include <sys/types.h>
-
-rune_t  _GBK_sgetrune(const char *, size_t, char const **);
-int     _GBK_sputrune(rune_t, char *, size_t, char **);
-
-int
-_GBK_init(rl)
-       _RuneLocale *rl;
-{
-       rl->sgetrune = _GBK_sgetrune;
-       rl->sputrune = _GBK_sputrune;
-       _CurrentRuneLocale = rl;
-       __mb_cur_max = 2;
-       return (0);
-}
-
-static inline int
-_gbk_check(c)
-       u_int c;
-{
-       c &= 0xff;
-       return ((c >= 0x80 && c <= 0xfe) ? 2 : 1);
-}
-
-rune_t
-_GBK_sgetrune(string, n, result)
-       const char *string;
-       size_t n;
-       char const **result;
-{
-       rune_t rune = 0;
-       int len;
-
-       if (n < 1 || (len = _gbk_check(*string)) > n) {
-               if (result)
-                       *result = string;
-               return (_INVALID_RUNE);
-       }
-       while (--len >= 0)
-               rune = (rune << 8) | ((u_int)(*string++) & 0xff);
-       if (result)
-               *result = string;
-       return rune;
-}
-
-int
-_GBK_sputrune(c, string, n, result)
-       rune_t c;
-       char *string, **result;
-       size_t n;
-{
-       if (c & 0x8000) {
-               if (n >= 2) {
-                       string[0] = (c >> 8) & 0xff;
-                       string[1] = c & 0xff;
-                       if (result)
-                               *result = string + 2;
-                       return (2);
-               }
-       }
-       else {
-               if (n >= 1) {
-                       *string = c & 0xff;
-                       if (result)
-                               *result = string + 1;
-                       return (1);
-               }
-       }
-       if (result)
-               *result = string;
-       return (0);
-       
-}
-
diff --git a/lib/libc/locale/isctype.c b/lib/libc/locale/isctype.c
deleted file mode 100644 (file)
index 907a09e..0000000
+++ /dev/null
@@ -1,232 +0,0 @@
-/*
- * Copyright (c) 1989, 1993
- *     The Regents of the University of California.  All rights reserved.
- * (c) UNIX System Laboratories, Inc.
- * All or some portions of this file are derived from material licensed
- * to the University of California by American Telephone and Telegraph
- * Co. or Unix System Laboratories, Inc. and are reproduced herein with
- * the permission of UNIX System Laboratories, Inc.
- *
- * This code is derived from software contributed to Berkeley by
- * Paul Borman at Krystal Technologies.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- * 3. All advertising materials mentioning features or use of this software
- *    must display the following acknowledgement:
- *     This product includes software developed by the University of
- *     California, Berkeley and its contributors.
- * 4. Neither the name of the University nor the names of its contributors
- *    may be used to endorse or promote products derived from this software
- *    without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- *
- * $FreeBSD: src/lib/libc/locale/isctype.c,v 1.7 2000/02/08 07:43:24 obrien Exp $
- * $DragonFly: src/lib/libc/locale/Attic/isctype.c,v 1.2 2003/06/17 04:26:44 dillon Exp $
- *
- * @(#)isctype.c       8.3 (Berkeley) 2/24/94
- */
-
-#include <ctype.h>
-
-#undef digittoint
-int
-digittoint(c)
-       int c;
-{
-       return (__maskrune((c), 0xFF));
-}
-
-#undef isalnum
-int
-isalnum(c)
-       int c;
-{
-       return (__istype((c), _CTYPE_A|_CTYPE_D));
-}
-
-#undef isalpha
-int
-isalpha(c)
-       int c;
-{
-       return (__istype((c), _CTYPE_A));
-}
-
-#undef isascii
-int
-isascii(c)
-       int c;
-{
-       return (((c) & ~0x7F) == 0);
-}
-
-#undef isblank
-int
-isblank(c)
-       int c;
-{
-       return (__istype((c), _CTYPE_B));
-}
-
-#undef iscntrl
-int
-iscntrl(c)
-       int c;
-{
-       return (__istype((c), _CTYPE_C));
-}
-
-#undef isdigit
-int
-isdigit(c)
-       int c;
-{
-       return (__isctype((c), _CTYPE_D));
-}
-
-#undef isgraph
-int
-isgraph(c)
-       int c;
-{
-       return (__istype((c), _CTYPE_G));
-}
-
-#undef ishexnumber 
-int
-ishexnumber(c)
-       int c;
-{
-       return (__istype((c), _CTYPE_X));
-}
-
-#undef isideogram
-int
-isideogram(c)
-       int c;
-{
-       return (__istype((c), _CTYPE_I));
-}
-
-#undef islower
-int
-islower(c)
-       int c;
-{
-       return (__istype((c), _CTYPE_L));
-}
-
-#undef isnumber
-int
-isnumber(c)
-       int c;
-{
-       return (__istype((c), _CTYPE_D));
-}
-
-#undef isphonogram     
-int
-isphonogram(c)
-       int c;
-{
-       return (__istype((c), _CTYPE_Q));
-}
-
-#undef isprint
-int
-isprint(c)
-       int c;
-{
-       return (__istype((c), _CTYPE_R));
-}
-
-#undef ispunct
-int
-ispunct(c)
-       int c;
-{
-       return (__istype((c), _CTYPE_P));
-}
-
-#undef isrune
-int
-isrune(c)
-       int c;
-{
-       return (__istype((c), 0xFFFFFF00L));
-}
-
-#undef isspace
-int
-isspace(c)
-       int c;
-{
-       return (__istype((c), _CTYPE_S));
-}
-
-#undef isspecial
-int
-isspecial(c)
-       int c;
-{
-       return (__istype((c), _CTYPE_T));
-}
-
-#undef isupper
-int
-isupper(c)
-       int c;
-{
-       return (__istype((c), _CTYPE_U));
-}
-
-#undef isxdigit
-int
-isxdigit(c)
-       int c;
-{
-       return (__isctype((c), _CTYPE_X));
-}
-
-#undef toascii
-int
-toascii(c)
-       int c;
-{
-       return ((c) & 0x7F);
-}
-
-#undef tolower
-int
-tolower(c)
-       int c;
-{
-        return (__tolower(c));
-}
-
-#undef toupper
-int
-toupper(c)
-       int c;
-{
-        return (__toupper(c));
-}
-
diff --git a/lib/libc/locale/ldpart.c b/lib/libc/locale/ldpart.c
deleted file mode 100644 (file)
index 0d11071..0000000
+++ /dev/null
@@ -1,158 +0,0 @@
-/*
- * Copyright (c) 2000, 2001 Alexey Zelkin <phantom@FreeBSD.org>
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- *
- * $FreeBSD: src/lib/libc/locale/ldpart.c,v 1.7.2.3 2002/08/12 11:17:37 ache Exp $
- * $DragonFly: src/lib/libc/locale/Attic/ldpart.c,v 1.2 2003/06/17 04:26:44 dillon Exp $
- */
-
-#include <sys/types.h>
-#include <sys/stat.h>
-#include <sys/syslimits.h>
-#include <errno.h>
-#include <fcntl.h>
-#include <stdlib.h>
-#include <string.h>
-#include <unistd.h>
-
-#include "setlocale.h"
-#include "ldpart.h"
-
-static int split_lines(char *, const char *);
-
-int
-__part_load_locale(const char *name,
-               int *using_locale,
-               char *locale_buf,
-               const char *category_filename,
-               int locale_buf_size_max,
-               int locale_buf_size_min,
-               const char **dst_localebuf)
-{
-       int             saverr, fd, i, num_lines;
-       char            *lbuf, *p;
-       const char      *plim;
-       char            filename[PATH_MAX];
-       struct stat     st;
-       size_t          namesize, bufsize;
-
-       /* 'name' must be already checked. */
-       if (strcmp(name, "C") == 0 || strcmp(name, "POSIX") == 0) {
-               *using_locale = 0;
-               return (_LDP_CACHE);
-       }
-
-       /*
-        * If the locale name is the same as our cache, use the cache.
-        */
-       if (locale_buf != NULL && strcmp(name, locale_buf) == 0) {
-               *using_locale = 1;
-               return (_LDP_CACHE);
-       }
-
-       /*
-        * Slurp the locale file into the cache.
-        */
-       namesize = strlen(name) + 1;
-
-       /* 'PathLocale' must be already set & checked. */
-       /* Range checking not needed, 'name' size is limited */
-       strcpy(filename, _PathLocale);
-       strcat(filename, "/");
-       strcat(filename, name);
-       strcat(filename, "/");
-       strcat(filename, category_filename);
-       if ((fd = _open(filename, O_RDONLY)) < 0)
-               return (_LDP_ERROR);
-       if (_fstat(fd, &st) != 0)
-               goto bad_locale;
-       if (st.st_size <= 0) {
-               errno = EFTYPE;
-               goto bad_locale;
-       }
-       bufsize = namesize + st.st_size;
-       if ((lbuf = malloc(bufsize)) == NULL) {
-               errno = ENOMEM;
-               goto bad_locale;
-       }
-       (void)strcpy(lbuf, name);
-       p = lbuf + namesize;
-       plim = p + st.st_size;
-       if (_read(fd, p, (size_t) st.st_size) != st.st_size)
-               goto bad_lbuf;
-       /*
-        * Parse the locale file into localebuf.
-        */
-       if (plim[-1] != '\n') {
-               errno = EFTYPE;
-               goto bad_lbuf;
-       }
-       num_lines = split_lines(p, plim);
-       if (num_lines >= locale_buf_size_max)
-               num_lines = locale_buf_size_max;
-       else if (num_lines >= locale_buf_size_min)
-               num_lines = locale_buf_size_min;
-       else {
-               errno = EFTYPE;
-               goto bad_lbuf;
-       }
-       (void)_close(fd);
-       /*
-        * Record the successful parse in the cache.
-        */
-       if (locale_buf != NULL)
-               free(locale_buf);
-       locale_buf = lbuf;
-       for (p = locale_buf, i = 0; i < num_lines; i++)
-               dst_localebuf[i] = (p += strlen(p) + 1);
-       for (i = num_lines; i < locale_buf_size_max; i++)
-               dst_localebuf[i] = NULL;
-       *using_locale = 1;
-
-       return (_LDP_LOADED);
-
-bad_lbuf:
-       saverr = errno;
-       free(lbuf);
-       errno = saverr;
-bad_locale:
-       saverr = errno;
-       (void)_close(fd);
-       errno = saverr;
-
-       return (_LDP_ERROR);
-}
-
-static int
-split_lines(char *p, const char *plim)
-{
-       int i;
-
-       for (i = 0; p < plim; i++) {
-               p = strchr(p, '\n');
-               *p++ = '\0';
-       }
-       return (i);
-}
-
diff --git a/lib/libc/locale/lmessages.c b/lib/libc/locale/lmessages.c
deleted file mode 100644 (file)
index 575271b..0000000
+++ /dev/null
@@ -1,91 +0,0 @@
-/*
- * Copyright (c) 2001 Alexey Zelkin <phantom@FreeBSD.org>
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- *
- * $FreeBSD: src/lib/libc/locale/lmessages.c,v 1.9.2.2 2002/08/12 11:17:37 ache Exp $
- * $DragonFly: src/lib/libc/locale/Attic/lmessages.c,v 1.2 2003/06/17 04:26:44 dillon Exp $
- */
-
-#include <stddef.h>
-
-#include "lmessages.h"
-#include "ldpart.h"
-
-#define LCMESSAGES_SIZE_FULL (sizeof(struct lc_messages_T) / sizeof(char *))
-#define LCMESSAGES_SIZE_MIN \
-               (offsetof(struct lc_messages_T, yesstr) / sizeof(char *))
-
-static char empty[] = "";
-
-static const struct lc_messages_T _C_messages_locale = {
-       "^[yY]" ,       /* yesexpr */
-       "^[nN]" ,       /* noexpr */
-       "yes" ,         /* yesstr */
-       "no"            /* nostr */
-};
-
-static struct lc_messages_T _messages_locale;
-static int     _messages_using_locale;
-static char    *_messages_locale_buf;
-
-int
-__messages_load_locale(const char *name)
-{
-       int ret;
-
-       ret = __part_load_locale(name, &_messages_using_locale,
-                 _messages_locale_buf, "LC_MESSAGES",
-                 LCMESSAGES_SIZE_FULL, LCMESSAGES_SIZE_MIN,
-                 (const char **)&_messages_locale);
-       if (ret == _LDP_LOADED) {
-               if (_messages_locale.yesstr == NULL)
-                       _messages_locale.yesstr = empty;
-               if (_messages_locale.nostr == NULL)
-                       _messages_locale.nostr = empty;
-       }
-       return (ret);
-}
-
-struct lc_messages_T *
-__get_current_messages_locale(void)
-{
-       return (_messages_using_locale
-               ? &_messages_locale
-               : (struct lc_messages_T *)&_C_messages_locale);
-}
-
-#ifdef LOCALE_DEBUG
-void
-msgdebug() {
-printf(        "yesexpr = %s\n"
-       "noexpr = %s\n"
-       "yesstr = %s\n"
-       "nostr = %s\n",
-       _messages_locale.yesexpr,
-       _messages_locale.noexpr,
-       _messages_locale.yesstr,
-       _messages_locale.nostr
-);
-}
-#endif /* LOCALE_DEBUG */
diff --git a/lib/libc/locale/lmessages.h b/lib/libc/locale/lmessages.h
deleted file mode 100644 (file)
index e46467c..0000000
+++ /dev/null
@@ -1,43 +0,0 @@
-/*-
- * Copyright (c) 2000, 2001 Alexey Zelkin <phantom@FreeBSD.org>
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- *
- * $FreeBSD: src/lib/libc/locale/lmessages.h,v 1.3.2.1 2002/03/12 17:17:48 phantom Exp $
- * $DragonFly: src/lib/libc/locale/Attic/lmessages.h,v 1.2 2003/06/17 04:26:44 dillon Exp $
- */
-
-#ifndef _LMESSAGES_H_
-#define        _LMESSAGES_H_
-
-struct lc_messages_T {
-       const char      *yesexpr;
-       const char      *noexpr;
-       const char      *yesstr;
-       const char      *nostr;
-};
-
-struct lc_messages_T *__get_current_messages_locale(void);
-int    __messages_load_locale(const char *);
-
-#endif /* !_LMESSAGES_H_ */
diff --git a/lib/libc/locale/lmonetary.c b/lib/libc/locale/lmonetary.c
deleted file mode 100644 (file)
index 259db5f..0000000
+++ /dev/null
@@ -1,148 +0,0 @@
-/*
- * Copyright (c) 2000, 2001 Alexey Zelkin <phantom@FreeBSD.org>
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- *
- * $FreeBSD: src/lib/libc/locale/lmonetary.c,v 1.12.2.2 2002/08/12 11:17:37 ache Exp $
- * $DragonFly: src/lib/libc/locale/Attic/lmonetary.c,v 1.2 2003/06/17 04:26:44 dillon Exp $
- */
-
-#include <limits.h>
-#include <stdlib.h>
-#include "lmonetary.h"
-#include "ldpart.h"
-
-extern int __mlocale_changed;
-extern const char * __fix_locale_grouping_str(const char *);
-
-#define LCMONETARY_SIZE (sizeof(struct lc_monetary_T) / sizeof(char *))
-
-static char    empty[] = "";
-static char    numempty[] = { CHAR_MAX, '\0'};
-
-static const struct lc_monetary_T _C_monetary_locale = {
-       empty,          /* int_curr_symbol */
-       empty,          /* currency_symbol */
-       empty,          /* mon_decimal_point */
-       empty,          /* mon_thousands_sep */
-       numempty,       /* mon_grouping */
-       empty,          /* positive_sign */
-       empty,          /* negative_sign */
-       numempty,       /* int_frac_digits */
-       numempty,       /* frac_digits */
-       numempty,       /* p_cs_precedes */
-       numempty,       /* p_sep_by_space */
-       numempty,       /* n_cs_precedes */
-       numempty,       /* n_sep_by_space */
-       numempty,       /* p_sign_posn */
-       numempty        /* n_sign_posn */
-};
-
-static struct lc_monetary_T _monetary_locale;
-static int     _monetary_using_locale;
-static char    *_monetary_locale_buf;
-
-static char
-cnv(const char *str)
-{
-       int i = strtol(str, NULL, 10);
-
-       if (i == -1)
-               i = CHAR_MAX;
-       return ((char)i);
-}
-
-int
-__monetary_load_locale(const char *name)
-{
-       int ret;
-
-       ret = __part_load_locale(name, &_monetary_using_locale,
-               _monetary_locale_buf, "LC_MONETARY",
-               LCMONETARY_SIZE, LCMONETARY_SIZE,
-               (const char **)&_monetary_locale);
-       if (ret != _LDP_ERROR)
-               __mlocale_changed = 1;
-       if (ret == _LDP_LOADED) {
-               _monetary_locale.mon_grouping =
-                    __fix_locale_grouping_str(_monetary_locale.mon_grouping);
-
-#define M_ASSIGN_CHAR(NAME) (((char *)_monetary_locale.NAME)[0] = \
-                            cnv(_monetary_locale.NAME))
-
-               M_ASSIGN_CHAR(int_frac_digits);
-               M_ASSIGN_CHAR(frac_digits);
-               M_ASSIGN_CHAR(p_cs_precedes);
-               M_ASSIGN_CHAR(p_sep_by_space);
-               M_ASSIGN_CHAR(n_cs_precedes);
-               M_ASSIGN_CHAR(n_sep_by_space);
-               M_ASSIGN_CHAR(p_sign_posn);
-               M_ASSIGN_CHAR(n_sign_posn);
-       }
-       return (ret);
-}
-
-struct lc_monetary_T *
-__get_current_monetary_locale(void)
-{
-       return (_monetary_using_locale
-               ? &_monetary_locale
-               : (struct lc_monetary_T *)&_C_monetary_locale);
-}
-
-#ifdef LOCALE_DEBUG
-void
-monetdebug() {
-printf(        "int_curr_symbol = %s\n"
-       "currency_symbol = %s\n"
-       "mon_decimal_point = %s\n"
-       "mon_thousands_sep = %s\n"
-       "mon_grouping = %s\n"
-       "positive_sign = %s\n"
-       "negative_sign = %s\n"
-       "int_frac_digits = %d\n"
-       "frac_digits = %d\n"
-       "p_cs_precedes = %d\n"
-       "p_sep_by_space = %d\n"
-       "n_cs_precedes = %d\n"
-       "n_sep_by_space = %d\n"
-       "p_sign_posn = %d\n"
-       "n_sign_posn = %d\n",
-       _monetary_locale.int_curr_symbol,
-       _monetary_locale.currency_symbol,
-       _monetary_locale.mon_decimal_point,
-       _monetary_locale.mon_thousands_sep,
-       _monetary_locale.mon_grouping,
-       _monetary_locale.positive_sign,
-       _monetary_locale.negative_sign,
-       _monetary_locale.int_frac_digits[0],
-       _monetary_locale.frac_digits[0],
-       _monetary_locale.p_cs_precedes[0],
-       _monetary_locale.p_sep_by_space[0],
-       _monetary_locale.n_cs_precedes[0],
-       _monetary_locale.n_sep_by_space[0],
-       _monetary_locale.p_sign_posn[0],
-       _monetary_locale.n_sign_posn[0]
-);
-}
-#endif /* LOCALE_DEBUG */
diff --git a/lib/libc/locale/lmonetary.h b/lib/libc/locale/lmonetary.h
deleted file mode 100644 (file)
index ddc832d..0000000
+++ /dev/null
@@ -1,54 +0,0 @@
-/*-
- * Copyright (c) 2000, 2001 Alexey Zelkin <phantom@FreeBSD.org>
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- *
- * $FreeBSD: src/lib/libc/locale/lmonetary.h,v 1.3.2.1 2002/03/12 17:17:48 phantom Exp $
- * $DragonFly: src/lib/libc/locale/Attic/lmonetary.h,v 1.2 2003/06/17 04:26:44 dillon Exp $
- */
-
-#ifndef _LMONETARY_H_
-#define        _LMONETARY_H_
-
-struct lc_monetary_T {
-       const char      *int_curr_symbol;
-       const char      *currency_symbol;
-       const char      *mon_decimal_point;
-       const char      *mon_thousands_sep;
-       const char      *mon_grouping;
-       const char      *positive_sign;
-       const char      *negative_sign;
-       const char      *int_frac_digits;
-       const char      *frac_digits;
-       const char      *p_cs_precedes;
-       const char      *p_sep_by_space;
-       const char      *n_cs_precedes;
-       const char      *n_sep_by_space;
-       const char      *p_sign_posn;
-       const char      *n_sign_posn;
-};
-
-struct lc_monetary_T *__get_current_monetary_locale(void);
-int    __monetary_load_locale(const char *);
-
-#endif /* !_LMONETARY_H_ */
diff --git a/lib/libc/locale/lnumeric.c b/lib/libc/locale/lnumeric.c
deleted file mode 100644 (file)
index 5b69d82..0000000
+++ /dev/null
@@ -1,87 +0,0 @@
-/*
- * Copyright (c) 2000, 2001 Alexey Zelkin <phantom@FreeBSD.org>
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- *
- * $FreeBSD: src/lib/libc/locale/lnumeric.c,v 1.10.2.2 2002/08/12 11:17:38 ache Exp $
- * $DragonFly: src/lib/libc/locale/Attic/lnumeric.c,v 1.2 2003/06/17 04:26:44 dillon Exp $
- */
-
-#include <limits.h>
-#include "lnumeric.h"
-#include "ldpart.h"
-
-extern int __nlocale_changed;
-extern const char *__fix_locale_grouping_str(const char *);
-
-#define LCNUMERIC_SIZE (sizeof(struct lc_numeric_T) / sizeof(char *))
-
-static char    numempty[] = { CHAR_MAX, '\0' };
-
-static const struct lc_numeric_T _C_numeric_locale = {
-       ".",            /* decimal_point */
-       "",             /* thousands_sep */
-       numempty        /* grouping */
-};
-
-static struct lc_numeric_T _numeric_locale;
-static int     _numeric_using_locale;
-static char    *_numeric_locale_buf;
-
-int
-__numeric_load_locale(const char *name)
-{
-       int ret;
-
-       ret = __part_load_locale(name, &_numeric_using_locale,
-               _numeric_locale_buf, "LC_NUMERIC",
-               LCNUMERIC_SIZE, LCNUMERIC_SIZE,
-               (const char **)&_numeric_locale);
-       if (ret != _LDP_ERROR)
-               __nlocale_changed = 1;
-       if (ret == _LDP_LOADED)
-               _numeric_locale.grouping =
-                   __fix_locale_grouping_str(_numeric_locale.grouping);
-       return (ret);
-}
-
-struct lc_numeric_T *
-__get_current_numeric_locale(void)
-{
-       return (_numeric_using_locale
-               ? &_numeric_locale
-               : (struct lc_numeric_T *)&_C_numeric_locale);
-}
-
-#ifdef LOCALE_DEBUG
-void
-numericdebug(void) {
-printf(        "decimal_point = %s\n"
-       "thousands_sep = %s\n"
-       "grouping = %s\n",
-       _numeric_locale.decimal_point,
-       _numeric_locale.thousands_sep,
-       _numeric_locale.grouping
-);
-}
-#endif /* LOCALE_DEBUG */
diff --git a/lib/libc/locale/lnumeric.h b/lib/libc/locale/lnumeric.h
deleted file mode 100644 (file)
index 2ae37fa..0000000
+++ /dev/null
@@ -1,42 +0,0 @@
-/*-
- * Copyright (c) 2000, 2001 Alexey Zelkin <phantom@FreeBSD.org>
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- *
- * $FreeBSD: src/lib/libc/locale/lnumeric.h,v 1.3.2.1 2002/03/12 17:17:48 phantom Exp $
- * $DragonFly: src/lib/libc/locale/Attic/lnumeric.h,v 1.2 2003/06/17 04:26:44 dillon Exp $
- */
-
-#ifndef _LNUMERIC_H_
-#define        _LNUMERIC_H_
-
-struct lc_numeric_T {
-       const char      *decimal_point;
-       const char      *thousands_sep;
-       const char      *grouping;
-};
-
-struct lc_numeric_T *__get_current_numeric_locale(void);
-int    __numeric_load_locale(const char *);
-
-#endif /* !_LNUMERIC_H_ */
index 3866402..0f23493 100644 (file)
@@ -1,51 +1,20 @@
+/*     $NetBSD: src/lib/libc/locale/localeconv.c,v 1.12 2004/01/02 21:53:49 itojun Exp $       */
+/*     $DragonFly: src/lib/libc/locale/localeconv.c,v 1.3 2005/04/21 16:36:34 joerg Exp $ */
+
 /*
- * Copyright (c) 2001 Alexey Zelkin <phantom@FreeBSD.org>
- * Copyright (c) 1991, 1993
- *     The Regents of the University of California.  All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- * 3. All advertising materials mentioning features or use of this software
- *    must display the following acknowledgement:
- *     This product includes software developed by the University of
- *     California, Berkeley and its contributors.
- * 4. Neither the name of the University nor the names of its contributors
- *    may be used to endorse or promote products derived from this software
- *    without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- *
- * @(#)localeconv.c    8.1 (Berkeley) 6/4/93
- * $FreeBSD: src/lib/libc/locale/localeconv.c,v 1.1.1.1.14.2 2002/03/12 17:17:48 phantom Exp $
- * $DragonFly: src/lib/libc/locale/localeconv.c,v 1.2 2003/06/17 04:26:44 dillon Exp $
+ * Written by J.T. Conklin <jtc@NetBSD.org>.
+ * Public domain.
  */
 
+#include <sys/localedef.h>
 #include <locale.h>
-#include "lmonetary.h"
-#include "lnumeric.h"
+
 /* 
  * The localeconv() function constructs a struct lconv from the current
  * monetary and numeric locales.
  *
  * Because localeconv() may be called many times (especially by library
- * routines like printf() & strtod()), the approprate members of the 
+ * routines like printf() & strtod()), the appropriate members of the 
  * lconv structure are computed only when the monetary or numeric 
  * locale has been changed.
  */
@@ -56,48 +25,54 @@ int __nlocale_changed = 1;
  * Return the current locale conversion.
  */
 struct lconv *
-localeconv()
+localeconv(void)
 {
-    static struct lconv ret;
-
-    if (__mlocale_changed) {
-       /* LC_MONETARY part */
-        struct lc_monetary_T * mptr; 
-
-#define M_ASSIGN_STR(NAME) (ret.NAME = (char*)mptr->NAME)
-#define M_ASSIGN_CHAR(NAME) (ret.NAME = mptr->NAME[0])
-
-       mptr = __get_current_monetary_locale();
-       M_ASSIGN_STR(int_curr_symbol);
-       M_ASSIGN_STR(currency_symbol);
-       M_ASSIGN_STR(mon_decimal_point);
-       M_ASSIGN_STR(mon_thousands_sep);
-       M_ASSIGN_STR(mon_grouping);
-       M_ASSIGN_STR(positive_sign);
-       M_ASSIGN_STR(negative_sign);
-       M_ASSIGN_CHAR(int_frac_digits);
-       M_ASSIGN_CHAR(frac_digits);
-       M_ASSIGN_CHAR(p_cs_precedes);
-       M_ASSIGN_CHAR(p_sep_by_space);
-       M_ASSIGN_CHAR(n_cs_precedes);
-       M_ASSIGN_CHAR(n_sep_by_space);
-       M_ASSIGN_CHAR(p_sign_posn);
-       M_ASSIGN_CHAR(n_sign_posn);
-       __mlocale_changed = 0;
-    }
-
-    if (__nlocale_changed) {
-       /* LC_NUMERIC part */
-        struct lc_numeric_T * nptr; 
+       static struct lconv ret;
 
-#define N_ASSIGN_STR(NAME) (ret.NAME = (char*)nptr->NAME)
+       if (__mlocale_changed) {
+               /* LC_MONETARY */
+               ret.int_curr_symbol = _CurrentMonetaryLocale->int_curr_symbol;
+               ret.currency_symbol = _CurrentMonetaryLocale->currency_symbol;
+               ret.mon_decimal_point =
+                   _CurrentMonetaryLocale->mon_decimal_point;
+               ret.mon_thousands_sep =
+                   _CurrentMonetaryLocale->mon_thousands_sep;
+               ret.mon_grouping = _CurrentMonetaryLocale->mon_grouping;
+               ret.positive_sign = _CurrentMonetaryLocale->positive_sign;
+               ret.negative_sign = _CurrentMonetaryLocale->negative_sign;
+               ret.int_frac_digits = _CurrentMonetaryLocale->int_frac_digits;
+               ret.frac_digits = _CurrentMonetaryLocale->frac_digits;
+               ret.p_cs_precedes = _CurrentMonetaryLocale->p_cs_precedes;
+               ret.p_sep_by_space = _CurrentMonetaryLocale->p_sep_by_space;
+               ret.n_cs_precedes = _CurrentMonetaryLocale->n_cs_precedes;
+               ret.n_sep_by_space = _CurrentMonetaryLocale->n_sep_by_space;
+               ret.p_sign_posn = _CurrentMonetaryLocale->p_sign_posn;
+               ret.n_sign_posn = _CurrentMonetaryLocale->n_sign_posn;
+               ret.int_p_cs_precedes =
+                   _CurrentMonetaryLocale->int_p_cs_precedes;
+               ret.int_n_cs_precedes =
+                   _CurrentMonetaryLocale->int_n_cs_precedes;
+               ret.int_p_sep_by_space =
+                   _CurrentMonetaryLocale->int_p_sep_by_space;
+               ret.int_n_sep_by_space =
+                   _CurrentMonetaryLocale->int_n_sep_by_space;
+               ret.int_p_sign_posn = _CurrentMonetaryLocale->int_p_sign_posn;
+               ret.int_n_sign_posn = _CurrentMonetaryLocale->int_n_sign_posn;
+               __mlocale_changed = 0;
+       }
 
-       nptr = __get_current_numeric_locale();
-       N_ASSIGN_STR(decimal_point);
-       N_ASSIGN_STR(thousands_sep);
-       N_ASSIGN_STR(grouping);
-       __nlocale_changed = 0;
-    }
+       if (__nlocale_changed) {
+               /* LC_NUMERIC */
+               /* LINTED const castaway */
+               ret.decimal_point =
+                   (char *)_CurrentNumericLocale->decimal_point;
+               /* LINTED const castaway */
+               ret.thousands_sep =
+                   (char *)_CurrentNumericLocale->thousands_sep;
+               /* LINTED const castaway */
+               ret.grouping = (char *) _CurrentNumericLocale->grouping;
+               __nlocale_changed = 0;
+       }
 
-    return (&ret);
+       return(&ret);
 }
diff --git a/lib/libc/locale/mbrune.3 b/lib/libc/locale/mbrune.3
deleted file mode 100644 (file)
index e7c61a3..0000000
+++ /dev/null
@@ -1,161 +0,0 @@
-.\" Copyright (c) 1993
-.\"    The Regents of the University of California.  All rights reserved.
-.\"
-.\" This code is derived from software contributed to Berkeley by
-.\" Paul Borman at Krystal Technologies.
-.\"
-.\" Redistribution and use in source and binary forms, with or without
-.\" modification, are permitted provided that the following conditions
-.\" are met:
-.\" 1. Redistributions of source code must retain the above copyright
-.\"    notice, this list of conditions and the following disclaimer.
-.\" 2. Redistributions in binary form must reproduce the above copyright
-.\"    notice, this list of conditions and the following disclaimer in the
-.\"    documentation and/or other materials provided with the distribution.
-.\" 3. All advertising materials mentioning features or use of this software
-.\"    must display the following acknowledgement:
-.\"    This product includes software developed by the University of
-.\"    California, Berkeley and its contributors.
-.\" 4. Neither the name of the University nor the names of its contributors
-.\"    may be used to endorse or promote products derived from this software
-.\"    without specific prior written permission.
-.\"
-.\" THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
-.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
-.\" ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
-.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
-.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
-.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
-.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
-.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
-.\" SUCH DAMAGE.
-.\"
-.\"    @(#)mbrune.3    8.2 (Berkeley) 4/19/94
-.\" $FreeBSD: src/lib/libc/locale/mbrune.3,v 1.6.2.4 2001/12/14 18:33:54 ru Exp $
-.\" $DragonFly: src/lib/libc/locale/Attic/mbrune.3,v 1.3 2005/03/24 12:48:04 swildner Exp $
-.\"
-.Dd April 19, 1994
-.Dt MBRUNE 3
-.Os
-.Sh NAME
-.Nm mbrune ,
-.Nm mbrrune ,
-.Nm mbmb
-.Nd multibyte rune support for C
-.Sh LIBRARY
-.Lb libc
-.Sh SYNOPSIS
-.In rune.h
-.Ft char *
-.Fn mbrune "const char *string" "rune_t rune"
-.Ft char *
-.Fn mbrrune "const char *string" "rune_t rune"
-.Ft char *
-.Fn mbmb "const char *string" "char *pattern"
-.Sh DESCRIPTION
-These routines provide the corresponding functionality of
-.Fn strchr ,
-.Fn strrchr
-and
-.Fn strstr
-for multibyte strings.
-.Pp
-The
-.Fn mbrune
-function locates the first occurrence of
-.Fn rune
-in the string pointed to by
-.Ar string .
-The terminating
-.Dv NUL
-character is considered part of the string.
-If
-.Fa rune
-is
-.Ql \e0 ,
-.Fn mbrune
-locates the terminating
-.Ql \e0 .
-.Pp
-The
-.Fn mbrrune
-function
-locates the last occurrence of
-.Fa rune
-in the string
-.Fa string .
-If
-.Fa rune
-is
-.Ql \e0 ,
-.Fn mbrune
-locates the terminating
-.Ql \e0 .
-.Pp
-The
-.Fn mbmb
-function locates the first occurrence of the null-terminated string
-.Fa pattern
-in the null-terminated string
-.Fa string .
-If
-.Fa pattern
-is the empty string,
-.Fn mbmb
-returns
-.Fa string ;
-if
-.Fa pattern
-occurs nowhere in
-.Fa string ,
-.Fn mbmb
-returns
-.Dv NULL ;
-otherwise
-.Fn mbmb
-returns a pointer to the first character of the first occurrence of
-.Fa pattern .
-.Sh RETURN VALUES
-The function
-.Fn mbrune
-returns a pointer to the located character, or
-.Dv NULL
-if the character does not appear in the string.
-.Pp
-The
-.Fn mbrrune
-function
-returns a pointer to the character, or
-.Dv NULL
-if the character does not appear in the string.
-.Pp
-The
-.Fn mbmb
-function
-returns a pointer to the
-.Fa pattern ,
-or
-.Dv NULL
-if the
-.Fa pattern
-does not appear in the string.
-.Sh "SEE ALSO
-.Xr mbrune 3 ,
-.Xr rune 3 ,
-.Xr setlocale 3 ,
-.Xr euc 5 ,
-.Xr utf2 5
-.Sh HISTORY
-The
-.Fn mbrune ,
-.Fn mbrrune ,
-and
-.Fn mbmb
-functions
-first appeared in Plan 9 from Bell Labs as
-.Fn utfrune ,
-.Fn utfrrune ,
-and
-.Fn utfutf .
diff --git a/lib/libc/locale/mbrune.c b/lib/libc/locale/mbrune.c
deleted file mode 100644 (file)
index 6b231e0..0000000
+++ /dev/null
@@ -1,110 +0,0 @@
-/*-
- * Copyright (c) 1993
- *     The Regents of the University of California.  All rights reserved.
- *
- * This code is derived from software contributed to Berkeley by
- * Paul Borman at Krystal Technologies.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- * 3. All advertising materials mentioning features or use of this software
- *    must display the following acknowledgement:
- *     This product includes software developed by the University of
- *     California, Berkeley and its contributors.
- * 4. Neither the name of the University nor the names of its contributors
- *    may be used to endorse or promote products derived from this software
- *    without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- *
- * @(#)mbrune.c        8.1 (Berkeley) 6/27/93
- */
-
-#include <limits.h>
-#include <rune.h>
-#include <stddef.h>
-#include <string.h>
-
-char *
-mbrune(string, c)
-       const char *string;
-       rune_t c;
-{
-       char const *result;
-       rune_t r;
-
-       while ((r = sgetrune(string, MB_LEN_MAX, &result))) {
-               if (r == c)
-                       return ((char *)string);
-               string = result == string ? string + 1 : result;
-       }
-
-       return (c == *string ? (char *)string : NULL);
-}
-
-char *
-mbrrune(string, c)
-       const char *string;
-       rune_t c;
-{
-       const char *last = 0;
-       char const *result;
-       rune_t  r;
-
-       while ((r = sgetrune(string, MB_LEN_MAX, &result))) {
-               if (r == c)
-                       last = string;
-               string = result == string ? string + 1 : result;
-       }
-       return (c == *string ? (char *)string : (char *)last);
-}
-
-char *
-mbmb(string, pattern)
-       const char *string;
-       char *pattern;
-{
-       rune_t first, r;
-       size_t plen, slen;
-       char const *result;
-
-       plen = strlen(pattern);
-       slen = strlen(string);
-       if (plen > slen)
-               return (0);
-
-       first = sgetrune(pattern, plen, &result);
-       if (result == string)
-               return (0);
-
-       while (slen >= plen && (r = sgetrune(string, slen, &result))) {
-               if (r == first) {
-                       if (strncmp(string, pattern, slen) == 0)
-                               return ((char *) string);
-               }
-               if (result == string) {
-                       --slen;
-                       ++string;
-               } else {
-                       slen -= result - string;
-                       string = result;
-               }
-       }
-       return (0);
-}
diff --git a/lib/libc/locale/mskanji.c b/lib/libc/locale/mskanji.c
deleted file mode 100644 (file)
index c8046ae..0000000
+++ /dev/null
@@ -1,103 +0,0 @@
-/*
- *    ja_JP.SJIS locale table for BSD4.4/rune
- *    version 1.0
- *    (C) Sin'ichiro MIYATANI / Phase One, Inc
- *    May 12, 1995
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- * 3. All advertising materials mentioning features or use of this software
- *    must display the following acknowledgement:
- *      This product includes software developed by Phase One, Inc.
- * 4. The name of Phase One, Inc. may be used to endorse or promote products
- *    derived from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE  
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL  
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS  
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)  
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT  
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY  
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF  
- * SUCH DAMAGE.  
- *
- * $FreeBSD: src/lib/libc/locale/mskanji.c,v 1.2.8.2 2001/03/05 10:22:45 obrien Exp $
- * $DragonFly: src/lib/libc/locale/Attic/mskanji.c,v 1.4 2003/12/02 14:56:28 eirikn Exp $
- *
- * @(#)mskanji.c       1.0 (Phase One) 5/5/95
- */  
-
-#include <sys/types.h>
-
-#include <rune.h>
-#include <stdlib.h>
-
-rune_t _MSKanji_sgetrune (const char *, size_t, char const **);
-int    _MSKanji_sputrune (rune_t, char *, size_t, char **);
-
-int
-_MSKanji_init(rl)
-       _RuneLocale *rl;
-{
-       rl->sgetrune = _MSKanji_sgetrune;
-       rl->sputrune = _MSKanji_sputrune;
-
-       _CurrentRuneLocale = rl;
-       __mb_cur_max = 2;
-       return (0);
-}
-
-rune_t
-_MSKanji_sgetrune(string, n, result)
-       const char *string;
-       size_t n;
-       char const **result;
-{
-       rune_t rune = 0;
-
-       if (n < 1 ) {
-               rune = _INVALID_RUNE;
-       } else {
-               rune = *( string++ ) & 0xff;
-               if ( ( rune > 0x80 && rune < 0xa0 )
-               || ( rune >= 0xe0 && rune < 0xfa ) ) {
-                       if ( n < 2 ) {
-                               rune = (rune_t)_INVALID_RUNE;
-                               --string;
-                       } else {
-                               rune = ( rune << 8 ) | ( *( string++ ) & 0xff );
-                       }
-               }
-       }
-       if (result) *result = string;
-       return rune;
-}
-
-int
-_MSKanji_sputrune(c, string, n, result)
-       rune_t c;
-       char *string, **result;
-       size_t n;
-{
-       int     len, i;
-
-       len = ( c > 0x100 ) ? 2 : 1;
-       if ( n < len ) {
-               if ( result ) *result = (char *) 0;
-       } else {
-               if ( result ) *result = string + len;
-               for ( i = len; i-- > 0; ) {
-                       *( string++ ) = c >> ( i << 3 );
-               }
-       }
-       return len;
-}
diff --git a/lib/libc/locale/multibyte.3 b/lib/libc/locale/multibyte.3
deleted file mode 100644 (file)
index f710d25..0000000
+++ /dev/null
@@ -1,246 +0,0 @@
-.\" Copyright (c) 1993
-.\"    The Regents of the University of California.  All rights reserved.
-.\"
-.\" This code is derived from software contributed to Berkeley by
-.\" Donn Seeley of BSDI.
-.\"
-.\" Redistribution and use in source and binary forms, with or without
-.\" modification, are permitted provided that the following conditions
-.\" are met:
-.\" 1. Redistributions of source code must retain the above copyright
-.\"    notice, this list of conditions and the following disclaimer.
-.\" 2. Redistributions in binary form must reproduce the above copyright
-.\"    notice, this list of conditions and the following disclaimer in the
-.\"    documentation and/or other materials provided with the distribution.
-.\" 3. All advertising materials mentioning features or use of this software
-.\"    must display the following acknowledgement:
-.\"    This product includes software developed by the University of
-.\"    California, Berkeley and its contributors.
-.\" 4. Neither the name of the University nor the names of its contributors
-.\"    may be used to endorse or promote products derived from this software
-.\"    without specific prior written permission.
-.\"
-.\" THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
-.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
-.\" ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
-.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
-.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
-.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
-.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
-.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
-.\" SUCH DAMAGE.
-.\"
-.\"    @(#)multibyte.3 8.1 (Berkeley) 6/4/93
-.\" $FreeBSD: src/lib/libc/locale/multibyte.3,v 1.6.2.5 2001/12/14 18:33:54 ru Exp $
-.\" $DragonFly: src/lib/libc/locale/Attic/multibyte.3,v 1.3 2005/03/24 12:48:04 swildner Exp $
-.\"
-.Dd June 4, 1993
-.Dt MULTIBYTE 3
-.Os
-.Sh NAME
-.Nm mblen ,
-.Nm mbstowcs ,
-.Nm mbtowc ,
-.Nm wcstombs ,
-.Nm wctomb
-.Nd multibyte character support for C
-.Sh LIBRARY
-.Lb libc
-.Sh SYNOPSIS
-.In stdlib.h
-.Ft int
-.Fn mblen "const char *mbchar" "size_t nbytes"
-.Ft size_t
-.Fn mbstowcs "wchar_t *wcstring" "const char *mbstring" "size_t nwchars"
-.Ft int
-.Fn mbtowc "wchar_t *wcharp" "const char *mbchar" "size_t nbytes"
-.Ft size_t
-.Fn wcstombs "char *mbstring" "const wchar_t *wcstring" "size_t nbytes"
-.Ft int
-.Fn wctomb "char *mbchar" "wchar_t wchar"
-.Sh DESCRIPTION
-The basic elements of some written natural languages such as Chinese
-cannot be represented uniquely with single C
-.Va char Ns s .
-The C standard supports two different ways of dealing with
-extended natural language encodings,
-.Em wide
-characters and
-.Em multibyte
-characters.
-Wide characters are an internal representation
-which allows each basic element to map
-to a single object of type
-.Va wchar_t .
-Multibyte characters are used for input and output
-and code each basic element as a sequence of C
-.Va char Ns s .
-Individual basic elements may map into one or more
-(up to
-.Dv MB_CHAR_MAX )
-bytes in a multibyte character.
-.Pp
-The current locale
-.Pq Xr setlocale 3
-governs the interpretation of wide and multibyte characters.
-The locale category
-.Dv LC_CTYPE
-specifically controls this interpretation.
-The
-.Va wchar_t
-type is wide enough to hold the largest value
-in the wide character representations for all locales.
-.Pp
-Multibyte strings may contain
-.Sq shift
-indicators to switch to and from
-particular modes within the given representation.
-If explicit bytes are used to signal shifting,
-these are not recognized as separate characters
-but are lumped with a neighboring character.
-There is always a distinguished
-.Sq initial
-shift state.
-The
-.Fn mbstowcs
-and
-.Fn wcstombs
-functions assume that multibyte strings are interpreted
-starting from the initial shift state.
-The
-.Fn mblen ,
-.Fn mbtowc
-and
-.Fn wctomb
-functions maintain static shift state internally.
-A call with a null
-.Fa mbchar
-pointer returns nonzero if the current locale requires shift states,
-zero otherwise;
-if shift states are required, the shift state is reset to the initial state.
-The internal shift states are undefined after a call to
-.Fn setlocale
-with the
-.Dv LC_CTYPE
-or
-.Dv LC_ALL
-categories.
-.Pp
-For convenience in processing,
-the wide character with value 0
-(the null wide character)
-is recognized as the wide character string terminator,
-and the character with value 0
-(the null byte)
-is recognized as the multibyte character string terminator.
-Null bytes are not permitted within multibyte characters.
-.Pp
-The
-.Fn mblen
-function computes the length in bytes
-of a multibyte character
-.Fa mbchar .
-Up to
-.Fa nbytes
-bytes are examined.
-.Pp
-The
-.Fn mbtowc
-function converts a multibyte character
-.Fa mbchar
-into a wide character and stores the result
-in the object pointed to by
-.Fa wcharp .
-Up to
-.Fa nbytes
-bytes are examined.
-.Pp
-The
-.Fn wctomb
-function converts a wide character
-.Fa wchar
-into a multibyte character and stores
-the result in
-.Fa mbchar .
-The object pointed to by
-.Fa mbchar
-must be large enough to accommodate the multibyte character.
-.Pp
-The
-.Fn mbstowcs
-function converts a multibyte character string
-.Fa mbstring
-into a wide character string
-.Fa wcstring .
-No more than
-.Fa nwchars
-wide characters are stored.
-A terminating null wide character is appended if there is room.
-.Pp
-The
-.Fn wcstombs
-function converts a wide character string
-.Fa wcstring
-into a multibyte character string
-.Fa mbstring .
-Up to
-.Fa nbytes
-bytes are stored in
-.Fa mbstring .
-Partial multibyte characters at the end of the string are not stored.
-The multibyte character string is null terminated if there is room.
-.Sh "RETURN VALUES
-If multibyte characters are not supported in the current locale,
-all of these functions will return \-1 if characters can be processed,
-otherwise 0.
-.Pp
-If
-.Fa mbchar
-is
-.Dv NULL ,
-the
-.Fn mblen ,
-.Fn mbtowc
-and
-.Fn wctomb
-functions return nonzero if shift states are supported,
-zero otherwise.
-If
-.Fa mbchar
-is valid,
-then these functions return
-the number of bytes processed in
-.Fa mbchar ,
-or \-1 if no multibyte character
-could be recognized or converted.
-.Pp
-The
-.Fn mbstowcs
-function returns the number of wide characters converted,
-not counting any terminating null wide character.
-The
-.Fn wcstombs
-function returns the number of bytes converted,
-not counting any terminating null byte.
-If any invalid multibyte characters are encountered,
-both functions return \-1.
-.Sh "SEE ALSO
-.Xr mbrune 3 ,
-.Xr rune 3 ,
-.Xr setlocale 3 ,
-.Xr euc 5 ,
-.Xr utf2 5
-.Sh STANDARDS
-The
-.Fn mblen ,
-.Fn mbstowcs ,
-.Fn mbtowc ,
-.Fn wcstombs
-and
-.Fn wctomb
-functions conform to
-.St -isoC .
-.Sh BUGS
-The current implementation does not support shift states.
index e53c223..784fdca 100644 (file)
-/*-
- * Copyright (c) 2001 Alexey Zelkin <phantom@FreeBSD.org>
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- *
- * $FreeBSD: src/lib/libc/locale/nl_langinfo.c,v 1.13.2.3 2002/03/12 17:23:24 phantom Exp $
- * $DragonFly: src/lib/libc/locale/nl_langinfo.c,v 1.3 2005/04/21 07:28:59 joerg Exp $
+/*     $NetBSD: src/lib/libc/locale/nl_langinfo.c,v 1.10 2004/07/21 20:27:46 tshiozak Exp $    */
+/*     $DragonFly: src/lib/libc/locale/nl_langinfo.c,v 1.4 2005/04/21 16:36:34 joerg Exp $ */
+
+/*
+ * Written by J.T. Conklin <jtc@NetBSD.org>.
+ * Public domain.
  */
 
-#include <locale.h>
+#include <sys/localedef.h>
 #include <langinfo.h>
-#include <limits.h>
-#include <stdlib.h>
-#include <string.h>
-
-#include "../stdtime/timelocal.h"
-#include "lnumeric.h"
-#include "lmonetary.h"
-#include "lmessages.h"
-
-#define TRANSITION_PERIOD_HACK
-
-#define _REL(BASE) ((int)item-BASE)
+#include <locale.h>
+#include <nl_types.h>
+#include "rune.h"
+#include "runetype.h"
 
 char *
-nl_langinfo(nl_item item) {
-
-   char *ret, *s, *cs;
-   static char *csym = NULL;
-#ifdef TRANSITION_PERIOD_HACK
-   static char *cset = NULL;
-#endif /* TRANSITION_PERIOD_HACK */
-
-   switch (item) {
-       case CODESET:
-               ret = "";
-               if ((s = setlocale(LC_CTYPE, NULL)) != NULL) {
-                       if ((cs = strchr(s, '.')) != NULL) {
-                               ret = cs + 1;
-#ifdef TRANSITION_PERIOD_HACK
-                               if (strncmp(ret, "ISO_", 4) == 0) {
-                                       int slen = strlen(ret);
+nl_langinfo(nl_item item)
+{
+       const char *s;
 
-                                       if ((cset = reallocf(cset, slen)) != NULL) {
-                                               strcpy(cset, "ISO");
-                                               strcat(cset, ret + 4);
-                                               ret = cset;
-                                       } else
-                                               ret = "";
-                               } else if (strcmp(ret, "EUC") == 0) {
-                                       if (strncmp(s, "ja_JP", 5) == 0)
-                                               ret = "eucJP";
-                                       else if (strncmp(s, "ko_KR", 5) == 0)
-                                               ret = "eucKR";
-                                       else if (strncmp(s, "zh_CN", 5) == 0)
-                                               ret = "eucCN";
-                               } else if (strcmp(ret, "ASCII") == 0)
-                                       ret = "US-ASCII";
-#endif /* TRANSITION_PERIOD_HACK */
-                       } else if (strcmp(s, "C") == 0 ||
-                                  strcmp(s, "POSIX") == 0
-#ifdef TRANSITION_PERIOD_HACK
-                                  || strstr(s, "ASCII") != NULL
-#endif /* TRANSITION_PERIOD_HACK */
-                                 )
-                               ret = "US-ASCII";
-               }
-               break;
+       switch (item) {
        case D_T_FMT:
-               ret = (char *) __get_current_time_locale()->c_fmt;
-               break;
+               s = _CurrentTimeLocale->d_t_fmt;
+               break;  
        case D_FMT:
-               ret = (char *) __get_current_time_locale()->x_fmt;
+               s = _CurrentTimeLocale->d_fmt;
                break;
        case T_FMT:
-               ret = (char *) __get_current_time_locale()->X_fmt;
+               s = _CurrentTimeLocale->t_fmt;
                break;
        case T_FMT_AMPM:
-               ret = (char *) __get_current_time_locale()->ampm_fmt;
+               s = _CurrentTimeLocale->t_fmt_ampm;
                break;
        case AM_STR:
-               ret = (char *) __get_current_time_locale()->am;
-               break;
        case PM_STR:
-               ret = (char *) __get_current_time_locale()->pm;
-               break;
-       case DAY_1: case DAY_2: case DAY_3:
-       case DAY_4: case DAY_5: case DAY_6: case DAY_7:
-               ret = (char*) __get_current_time_locale()->weekday[_REL(DAY_1)];
-               break;
-       case ABDAY_1: case ABDAY_2: case ABDAY_3:
-       case ABDAY_4: case ABDAY_5: case ABDAY_6: case ABDAY_7:
-               ret = (char*) __get_current_time_locale()->wday[_REL(ABDAY_1)];
-               break;
-       case MON_1: case MON_2: case MON_3: case MON_4:
-       case MON_5: case MON_6: case MON_7: case MON_8:
-       case MON_9: case MON_10: case MON_11: case MON_12:
-               ret = (char*) __get_current_time_locale()->month[_REL(MON_1)];
-               break;
-       case ABMON_1: case ABMON_2: case ABMON_3: case ABMON_4:
-       case ABMON_5: case ABMON_6: case ABMON_7: case ABMON_8:
-       case ABMON_9: case ABMON_10: case ABMON_11: case ABMON_12:
-               ret = (char*) __get_current_time_locale()->mon[_REL(ABMON_1)];
-               break;
-       case ERA:
-               /* XXX: need to be implemented  */
-               ret = "";
-               break;
-       case ERA_D_FMT:
-               /* XXX: need to be implemented  */
-               ret = "";
-               break;
-       case ERA_D_T_FMT:
-               /* XXX: need to be implemented  */
-               ret = "";
-               break;
-       case ERA_T_FMT:
-               /* XXX: need to be implemented  */
-               ret = "";
-               break;
-       case ALT_DIGITS:
-               /* XXX: need to be implemented  */
-               ret = "";
+               s = _CurrentTimeLocale->am_pm[(size_t)(item - AM_STR)];
+               break;
+       case DAY_1:
+       case DAY_2:
+       case DAY_3:
+       case DAY_4:
+       case DAY_5:
+       case DAY_6:
+       case DAY_7:
+               s = _CurrentTimeLocale->day[(size_t)(item - DAY_1)];
+               break;
+       case ABDAY_1:
+       case ABDAY_2:
+       case ABDAY_3:
+       case ABDAY_4:
+       case ABDAY_5:
+       case ABDAY_6:
+       case ABDAY_7:
+               s = _CurrentTimeLocale->abday[(size_t)(item - ABDAY_1)];
+               break;
+       case MON_1:
+       case MON_2:
+       case MON_3:
+       case MON_4:
+       case MON_5:
+       case MON_6:
+       case MON_7:
+       case MON_8:
+       case MON_9:
+       case MON_10:
+       case MON_11:
+       case MON_12:
+               s = _CurrentTimeLocale->mon[(size_t)(item - MON_1)];
+               break;
+       case ABMON_1:
+       case ABMON_2:
+       case ABMON_3:
+       case ABMON_4:
+       case ABMON_5:
+       case ABMON_6:
+       case ABMON_7:
+       case ABMON_8:
+       case ABMON_9:
+       case ABMON_10:
+       case ABMON_11:
+       case ABMON_12:
+               s = _CurrentTimeLocale->abmon[(size_t)(item - ABMON_1)];
                break;
        case RADIXCHAR:
-               ret = (char*) __get_current_numeric_locale()->decimal_point;
+               s = _CurrentNumericLocale->decimal_point;
                break;
        case THOUSEP:
-               ret = (char*) __get_current_numeric_locale()->thousands_sep;
+               s = _CurrentNumericLocale->thousands_sep;
+               break;
+       case YESSTR:
+               s = _CurrentMessagesLocale->yesstr;
                break;
        case YESEXPR:
-               ret = (char*) __get_current_messages_locale()->yesexpr;
+               s = _CurrentMessagesLocale->yesexpr;
+               break;
+       case NOSTR:
+               s = _CurrentMessagesLocale->nostr;
                break;
        case NOEXPR:
-               ret = (char*) __get_current_messages_locale()->noexpr;
-               break;
-       /*
-        * All items marked with LEGACY are available, but not recomended
-        * by SUSv2 to be used in portable applications since they're subject
-        * to remove in future specification editions
-        */
-       case YESSTR:            /* LEGACY  */
-               ret = (char*) __get_current_messages_locale()->yesstr;
-               break;
-       case NOSTR:             /* LEGACY  */
-               ret = (char*) __get_current_messages_locale()->nostr;
-               break;
-       case CRNCYSTR:
-               ret = "";
-               cs = (char*) __get_current_monetary_locale()->currency_symbol;
-               if (*cs != '\0') {
-                       char pos = localeconv()->p_cs_precedes;
-
-                       if (pos == localeconv()->n_cs_precedes) {
-                               char psn = '\0';
-
-                               if (pos == CHAR_MAX) {
-                                       if (strcmp(cs, __get_current_monetary_locale()->mon_decimal_point) == 0)
-                                               psn = '.';
-                               } else
-                                       psn = pos ? '-' : '+';
-                               if (psn != '\0') {
-                                       int clen = strlen(cs);
-
-                                       if ((csym = reallocf(csym, clen + 2)) != NULL) {
-                                               *csym = psn;
-                                               strcpy(csym + 1, cs);
-                                               ret = csym;
-                                       }
-                               }
-                       }
-               }
-               break;
-       case D_MD_ORDER:        /* local extension */
-               ret = (char *) __get_current_time_locale()->md_order;
+               s = _CurrentMessagesLocale->noexpr;
+               break;
+       case CRNCYSTR:                          /* XXX */
+               s = "";
+               break;
+       case CODESET:
+               s = _CurrentRuneLocale->rl_codeset;
+               if (!s)
+                       s = "";
                break;
        case _DATE_FMT:        /* local extension */
-               ret = (char *) __get_current_time_locale()->date_fmt;
+               s = _CurrentTimeLocale->date_fmt;
                break;
        default:
-               ret = "";
-   }
-   return (ret);
+               s = "";
+               break;
+       }
+
+       /* The return value should be really const, but the interface says OW */
+       /* LINTED const castaway. */
+       return((char *) s);
 }
diff --git a/lib/libc/locale/nomacros.c b/lib/libc/locale/nomacros.c
deleted file mode 100644 (file)
index 45c0db7..0000000
+++ /dev/null
@@ -1,9 +0,0 @@
-/*
- * Tell <ctype.h> to generate extern versions of all its inline
- * functions.  The extern versions get called if the system doesn't
- * support inlines or the user defines _DONT_USE_CTYPE_INLINE_
- * before including <ctype.h>.
- */
-#define _EXTERNALIZE_CTYPE_INLINES_
-
-#include <ctype.h>
diff --git a/lib/libc/locale/none.c b/lib/libc/locale/none.c
deleted file mode 100644 (file)
index fba1ec5..0000000
+++ /dev/null
@@ -1,91 +0,0 @@
-/*-
- * Copyright (c) 1993
- *     The Regents of the University of California.  All rights reserved.
- *
- * This code is derived from software contributed to Berkeley by
- * Paul Borman at Krystal Technologies.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- * 3. All advertising materials mentioning features or use of this software
- *    must display the following acknowledgement:
- *     This product includes software developed by the University of
- *     California, Berkeley and its contributors.
- * 4. Neither the name of the University nor the names of its contributors
- *    may be used to endorse or promote products derived from this software
- *    without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- *
- * $FreeBSD: src/lib/libc/locale/none.c,v 1.2.8.1 2001/03/05 10:25:03 obrien Exp $
- * $DragonFly: src/lib/libc/locale/Attic/none.c,v 1.3 2003/11/12 20:21:24 eirikn Exp $
- *
- * @(#)none.c  8.1 (Berkeley) 6/4/93
- */
-
-#include <stddef.h>
-#include <stdio.h>
-#include <rune.h>
-#include <stdlib.h>
-
-rune_t _none_sgetrune (const char *, size_t, char const **);
-int    _none_sputrune (rune_t, char *, size_t, char **);
-
-int
-_none_init(rl)
-       _RuneLocale *rl;
-{
-       rl->sgetrune = _none_sgetrune;
-       rl->sputrune = _none_sputrune;
-       _CurrentRuneLocale = rl;
-       __mb_cur_max = 1;
-       return(0);
-}
-
-rune_t
-_none_sgetrune(string, n, result)
-       const char *string;
-       size_t n;
-       char const **result;
-{
-       if (n < 1) {
-               if (result)
-                       *result = string;
-               return(_INVALID_RUNE);
-       }
-       if (result)
-               *result = string + 1;
-       return(*string & 0xff);
-}
-
-int
-_none_sputrune(c, string, n, result)
-       rune_t c;
-       char *string, **result;
-       size_t n;
-{
-       if (n >= 1) {
-               if (string)
-                       *string = c;
-               if (result)
-                       *result = string + 1;
-       } else if (result)
-               *result = (char *)0;
-       return(1);
-}
diff --git a/lib/libc/locale/rune.3 b/lib/libc/locale/rune.3
deleted file mode 100644 (file)
index b767d1f..0000000
+++ /dev/null
@@ -1,275 +0,0 @@
-.\" Copyright (c) 1993
-.\"    The Regents of the University of California.  All rights reserved.
-.\"
-.\" This code is derived from software contributed to Berkeley by
-.\" Paul Borman at Krystal Technologies.
-.\"
-.\" Redistribution and use in source and binary forms, with or without
-.\" modification, are permitted provided that the following conditions
-.\" are met:
-.\" 1. Redistributions of source code must retain the above copyright
-.\"    notice, this list of conditions and the following disclaimer.
-.\" 2. Redistributions in binary form must reproduce the above copyright
-.\"    notice, this list of conditions and the following disclaimer in the
-.\"    documentation and/or other materials provided with the distribution.
-.\" 3. All advertising materials mentioning features or use of this software
-.\"    must display the following acknowledgement:
-.\"    This product includes software developed by the University of
-.\"    California, Berkeley and its contributors.
-.\" 4. Neither the name of the University nor the names of its contributors
-.\"    may be used to endorse or promote products derived from this software
-.\"    without specific prior written permission.
-.\"
-.\" THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
-.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
-.\" ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
-.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
-.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
-.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
-.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
-.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
-.\" SUCH DAMAGE.
-.\"
-.\"    @(#)rune.3      8.2 (Berkeley) 12/11/93
-.\" $FreeBSD: src/lib/libc/locale/rune.3,v 1.10.2.7 2002/08/07 06:24:14 ache Exp $
-.\" $DragonFly: src/lib/libc/locale/Attic/rune.3,v 1.3 2005/03/24 12:48:04 swildner Exp $
-.\"
-.Dd December 11, 1993
-.Dt RUNE 3
-.Os
-.Sh NAME
-.Nm setrunelocale ,
-.Nm setinvalidrune ,
-.Nm sgetrune ,
-.Nm sputrune ,
-.Nm fgetrune ,
-.Nm fungetrune ,
-.Nm fputrune
-.Nd rune support for C
-.Sh LIBRARY
-.Lb libc
-.Sh SYNOPSIS
-.In rune.h
-.In errno.h
-.Ft int
-.Fn setrunelocale "char *locale"
-.Ft void
-.Fn setinvalidrune "rune_t rune"
-.Ft rune_t
-.Fn sgetrune "const char *string" "size_t n" "char const **result"
-.Ft int
-.Fn sputrune "rune_t rune" "char *string" "size_t n" "char **result"
-.Pp
-.In stdio.h
-.Ft long
-.Fn fgetrune "FILE *stream"
-.Ft int
-.Fn fungetrune "rune_t rune" "FILE *stream"
-.Ft int
-.Fn fputrune "rune_t rune" "FILE *stream"
-.Sh DESCRIPTION
-The
-.Fn setrunelocale
-controls the type of encoding used to represent runes as multibyte strings
-as well as the properties of the runes as defined in
-.Aq Pa ctype.h .
-The
-.Fa locale
-argument indicates which locale to load.
-If the locale is successfully loaded,
-.Dv 0
-is returned, otherwise an errno value is returned to indicate the
-type of error.
-.Pp
-The
-.Fn setinvalidrune
-function sets the value of the global value
-.Dv _INVALID_RUNE
-to be
-.Fa rune .
-.Pp
-The
-.Fn sgetrune
-function tries to read a single multibyte character from
-.Fa string ,
-which is at most
-.Fa n
-bytes long.
-If
-.Fn sgetrune
-is successful, the rune is returned.
-If
-.Fa result
-is not
-.Dv NULL ,
-.Fa *result
-will point to the first byte which was not converted in
-.Fa string .
-If the first
-.Fa n
-bytes of
-.Fa string
-do not describe a full multibyte character,
-.Dv _INVALID_RUNE
-is returned and
-.Fa *result
-will point to
-.Fa string .
-If there is an encoding error at the start of
-.Fa string ,
-.Dv _INVALID_RUNE
-is returned and
-.Fa *result
-will point to the second character of
-.Fa string .
-.Pp
-the
-.Fn sputrune
-function tries to encode
-.Fa rune
-as a multibyte string and store it at
-.Fa string ,
-but no more than
-.Fa n
-bytes will be stored.
-If
-.Fa result
-is not
-.Dv NULL ,
-.Fa *result
-will be set to point to the first byte in string following the new
-multibyte character.
-If
-.Fa string
-is
-.Dv NULL ,
-.Fa *result
-will point to
-.Dv "(char *)0 +"
-.Fa x ,
-where
-.Fa x
-is the number of bytes that would be needed to store the multibyte value.
-If the multibyte character would consist of more than
-.Fa n
-bytes and
-.Fa result
-is not
-.Dv NULL ,
-.Fa *result
-will be set to
-.Dv NULL .
-In all cases,
-.Fn sputrune
-will return the number of bytes which would be needed to store
-.Fa rune
-as a multibyte character.
-.Pp
-The
-.Fn fgetrune
-function operates the same as
-.Fn sgetrune
-with the exception that it attempts to read enough bytes from
-.Fa stream
-to decode a single rune.  It returns either
-.Dv EOF
-on end of file,
-.Dv _INVALID_RUNE
-on an encoding error, or the rune decoded if all went well.
-.Pp
-The
-.Fn fungetrune
-function pushes the multibyte encoding, as provided by
-.Fn sputrune ,
-of
-.Fa rune
-onto
-.Fa stream
-such that the next
-.Fn fgetrune
-call will return
-.Fa rune .
-It returns
-.Dv EOF
-if it fails and
-.Dv 0
-on success.
-.Pp
-The
-.Fn fputrune
-function writes the multibyte encoding of
-.Fa rune ,
-as provided by
-.Fn sputrune ,
-onto
-.Fa stream .
-It returns
-.Dv EOF
-on failure and
-.Dv 0
-on success.
-.Sh RETURN VALUES
-The
-.Fn setrunelocale
-function returns one of the following values:
-.Bl -tag -width Er
-.It Er 0
-.Fn setrunelocale
-was successful.
-.It Bq Er EINVAL
-.Fa locale
-name was incorrect.
-.It Bq Er ENOENT
-The locale could not be found.
-.It Bq Er EFTYPE
-The file found was not a valid file.
-.El
-.Pp
-The
-.Fn sgetrune
-function either returns the rune read or
-.Dv _INVALID_RUNE .
-The
-.Fn sputrune
-function returns the number of bytes needed to store
-.Fa rune
-as a multibyte string.
-.Sh FILES
-.Bl -tag -width /usr/share/locale/locale/LC_CTYPE -compact
-.It Pa $PATH_LOCALE/ Ns Em locale Ns /LC_CTYPE
-.It Pa /usr/share/locale/ Ns Em locale Ns /LC_CTYPE
-binary LC_CTYPE file for the locale
-.Em locale .
-.El
-.Sh SEE ALSO
-.Xr mbrune 3 ,
-.Xr setlocale 3 ,
-.Xr euc 5 ,
-.Xr utf2 5
-.Sh NOTES
-The ANSI C type
-.Em wchar_t
-is the same as
-.Em rune_t .
-.Em Rune_t
-was chosen to accent the purposeful choice of not basing the
-system with the ANSI C
-primitives, which were, shall we say, less aesthetic.
-.Sh HISTORY
-These functions first appeared in
-.Bx 4.4 .
-.Pp
-The
-.Fn setrunelocale
-function and the other non-ANSI rune functions were inspired by
-.Sy "Plan 9 from Bell Labs"
-as a much more sane alternative to the ANSI multibyte and
-wide character support.
-.\"They were conceived at the San Diego 1993 Summer USENIX conference by
-.\"Paul Borman of Krystal Technologies, Keith Bostic of CSRG and Andrew Hume
-.\"of Bell Labs.
-.Pp
-All of the ANSI multibyte and wide character
-support functions are built using the rune functions.
index 951fd46..9de061e 100644 (file)
@@ -1,3 +1,32 @@
+/*     $NetBSD: src/lib/libc/locale/rune.c,v 1.26 2004/05/09 11:26:33 kleink Exp $     */
+/*     $DragonFly: src/lib/libc/locale/rune.c,v 1.4 2005/04/21 16:36:34 joerg Exp $
+
+/*-
+ * Copyright (c)1999 Citrus Project,
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ */
+
 /*-
  * Copyright (c) 1993
  *     The Regents of the University of California.  All rights reserved.
  * 2. Redistributions in binary form must reproduce the above copyright
  *    notice, this list of conditions and the following disclaimer in the
  *    documentation and/or other materials provided with the distribution.
- * 3. All advertising materials mentioning features or use of this software
- *    must display the following acknowledgement:
- *     This product includes software developed by the University of
- *     California, Berkeley and its contributors.
- * 4. Neither the name of the University nor the names of its contributors
+ * 3. Neither the name of the University nor the names of its contributors
  *    may be used to endorse or promote products derived from this software
  *    without specific prior written permission.
  *
  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  * SUCH DAMAGE.
- *
- * @(#)rune.c  8.1 (Berkeley) 6/4/93
- * $FreeBSD: src/lib/libc/locale/rune.c,v 1.5.8.2 2002/08/12 11:17:38 ache Exp $
- * $DragonFly: src/lib/libc/locale/rune.c,v 1.3 2005/01/31 22:29:31 dillon Exp $
  */
 
-#include "namespace.h"
-#include <arpa/inet.h>
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <assert.h>
 #include <errno.h>
-#include <rune.h>
 #include <stdio.h>
-#include <string.h>
 #include <stdlib.h>
-#include <sys/types.h>
-#include <sys/stat.h>
-#include "un-namespace.h"
+#include <string.h>
+#include <wchar.h>
 
-_RuneLocale *
-_Read_RuneMagi(fp)
-       FILE *fp;
+#include <arpa/inet.h>
+
+#include "../citrus/citrus_module.h"
+#include "../citrus/citrus_ctype.h"
+#include "rune.h"
+#include "rune_local.h"
+
+static int     readrange(_RuneLocale *, _RuneRange *, _FileRuneRange *,
+                         void *, FILE *);
+static void    _freeentry(_RuneRange *);
+static void    _wctype_init(_RuneLocale *rl);
+
+static int
+readrange(_RuneLocale *rl, _RuneRange *rr, _FileRuneRange *frr, void *lastp,
+         FILE *fp)
 {
-       char *data;
-       void *lastp;
-       _RuneLocale *rl;
-       _RuneEntry *rr;
-       struct stat sb;
-       int x, saverr;
+       uint32_t i;
+       _RuneEntry *re;
+       _FileRuneEntry fre;
+
+       _DIAGASSERT(rl != NULL);
+       _DIAGASSERT(rr != NULL);
+       _DIAGASSERT(frr != NULL);
+       _DIAGASSERT(lastp != NULL);
+       _DIAGASSERT(fp != NULL);
 
-       if (_fstat(fileno(fp), &sb) < 0)
-               return (NULL);
+       re = (_RuneEntry *)rl->rl_variable;
 
-       if (sb.st_size < sizeof(_RuneLocale)) {
-               errno = EFTYPE;
-               return (NULL);
+       rr->rr_nranges = ntohl(frr->frr_nranges);
+       if (rr->rr_nranges == 0) {
+               rr->rr_rune_ranges = NULL;
+               return(0);
        }
 
-       if ((data = malloc(sb.st_size)) == NULL)
-               return (NULL);
+       rr->rr_rune_ranges = re;
+       for (i = 0; i < rr->rr_nranges; i++) {
+               if (fread(&fre, sizeof(fre), 1, fp) != 1)
+                       return(-1);
 
-       errno = 0;
-       rewind(fp); /* Someone might have read the magic number once already */
-       if (errno) {
-               saverr = errno;
-               free(data);
-               errno = saverr;
-               return (NULL);
-       }
+               re->re_min = ntohl((uint32_t)fre.fre_min);
+               re->re_max = ntohl((uint32_t)fre.fre_max);
+               re->re_map = ntohl((uint32_t)fre.fre_map);
+               re++;
 
-       if (fread(data, sb.st_size, 1, fp) != 1) {
-               saverr = errno;
-               free(data);
-               errno = saverr;
-               return (NULL);
+               if ((void *)re > lastp)
+                       return(-1);
        }
+       rl->rl_variable = re;
+       return(0);
+}
 
-       rl = (_RuneLocale *)data;
-       lastp = data + sb.st_size;
+static int
+readentry(_RuneRange *rr, FILE *fp)
+{
+       _RuneEntry *re;
+       size_t l, i, j;
+       int error;
 
-       rl->variable = rl + 1;
+       _DIAGASSERT(rr != NULL);
+       _DIAGASSERT(fp != NULL);
 
-       if (memcmp(rl->magic, _RUNE_MAGIC_1, sizeof(rl->magic))) {
-               free(data);
-               errno = EFTYPE;
-               return (NULL);
+       re = rr->rr_rune_ranges;
+       for (i = 0; i < rr->rr_nranges; i++) {
+               if (re[i].re_map != 0) {
+                       re[i].re_rune_types = NULL;
+                       continue;
+               }
+
+               l = re[i].re_max - re[i].re_min + 1;
+               re[i].re_rune_types = malloc(l * sizeof(_RuneType));
+               if (!re[i].re_rune_types) {
+                       error = ENOMEM;
+                       goto fail;
+               }
+               memset(re[i].re_rune_types, 0, l * sizeof(_RuneType));
+
+               if (fread(re[i].re_rune_types, sizeof(_RuneType), l, fp) != l)
+                       goto fail2;
+
+               for (j = 0; j < l; j++)
+                       re[i].re_rune_types[j] = ntohl(re[i].re_rune_types[j]);
        }
+       return(0);
 
-       rl->invalid_rune = ntohl(rl->invalid_rune);
-       rl->variable_len = ntohl(rl->variable_len);
-       rl->runetype_ext.nranges = ntohl(rl->runetype_ext.nranges);
-       rl->maplower_ext.nranges = ntohl(rl->maplower_ext.nranges);
-       rl->mapupper_ext.nranges = ntohl(rl->mapupper_ext.nranges);
+fail:
+       for (j = 0; j < i; j++) {
+               free(re[j].re_rune_types);
+               re[j].re_rune_types = NULL;
+       }
+       return(error);
 
-       for (x = 0; x < _CACHED_RUNES; ++x) {
-               rl->runetype[x] = ntohl(rl->runetype[x]);
-               rl->maplower[x] = ntohl(rl->maplower[x]);
-               rl->mapupper[x] = ntohl(rl->mapupper[x]);
+fail2:
+       for (j = 0; j <= i; j++) {
+               free(re[j].re_rune_types);
+               re[j].re_rune_types = NULL;
        }
+       return(errno);
+}
+
+/* XXX: temporary implementation */
+static void
+find_codeset(_RuneLocale *rl)
+{
+       char *top, *codeset, *tail, *ep;
 
-       rl->runetype_ext.ranges = (_RuneEntry *)rl->variable;
-       rl->variable = rl->runetype_ext.ranges + rl->runetype_ext.nranges;
-       if (rl->variable > lastp) {
-               free(data);
-               errno = EFTYPE;
-               return (NULL);
+       /* end of rl_variable region */
+       ep = (char *)rl->rl_variable;
+       ep += rl->rl_variable_len;
+       rl->rl_codeset = NULL;
+       if (!(top = strstr(rl->rl_variable, _RUNE_CODESET)))
+               return;
+       tail = strpbrk(top, " \t");
+       codeset = top + sizeof(_RUNE_CODESET) - 1;
+       if (tail) {
+               *top = *tail;
+               *tail = '\0';
+               rl->rl_codeset = strdup(codeset);
+               strlcpy(top + 1, tail + 1, (unsigned)(ep - (top + 1)));
+       } else {
+               *top = '\0';
+               rl->rl_codeset = strdup(codeset);
        }
+}
+
+static void
+_freeentry(_RuneRange *rr)
+{
+       _RuneEntry *re;
+       uint32_t i;
 
-       rl->maplower_ext.ranges = (_RuneEntry *)rl->variable;
-       rl->variable = rl->maplower_ext.ranges + rl->maplower_ext.nranges;
-       if (rl->variable > lastp) {
-               free(data);
-               errno = EFTYPE;
-               return (NULL);
+       _DIAGASSERT(rr != NULL);
+
+       re = rr->rr_rune_ranges;
+       for (i = 0; i < rr->rr_nranges; i++) {
+               if (re[i].re_rune_types)
+                       free(re[i].re_rune_types);
+               re[i].re_rune_types = NULL;
        }
+}
+
+void
+_wctype_init(_RuneLocale *rl)
+{
+       memcpy(&rl->rl_wctype, &_DefaultRuneLocale.rl_wctype,
+              sizeof(rl->rl_wctype));
+}
+
+
+_RuneLocale *
+_Read_RuneMagi(FILE *fp)
+{
+       /* file */
+       _FileRuneLocale frl;
+       /* host data */
+       char *hostdata;
+       size_t hostdatalen;
+       void *lastp;
+       _RuneLocale *rl;
+       struct stat sb;
+       int x;
+
+       _DIAGASSERT(fp != NULL);
+
+       if (fstat(fileno(fp), &sb) < 0)
+               return(NULL);
+
+       if (sb.st_size < sizeof(_FileRuneLocale))
+               return(NULL);
+       /* XXX more validation? */
+
+       /* Someone might have read the magic number once already */
+       rewind(fp);
+
+       if (fread(&frl, sizeof(frl), 1, fp) != 1)
+               return(NULL);
+       if (memcmp(frl.frl_magic, _RUNE_MAGIC_1, sizeof(frl.frl_magic)))
+               return(NULL);
+
+       hostdatalen = sizeof(*rl) + ntohl((u_int32_t)frl.frl_variable_len) +
+           ntohl(frl.frl_runetype_ext.frr_nranges) * sizeof(_RuneEntry) +
+           ntohl(frl.frl_maplower_ext.frr_nranges) * sizeof(_RuneEntry) +
+           ntohl(frl.frl_mapupper_ext.frr_nranges) * sizeof(_RuneEntry);
 
-       rl->mapupper_ext.ranges = (_RuneEntry *)rl->variable;
-       rl->variable = rl->mapupper_ext.ranges + rl->mapupper_ext.nranges;
-       if (rl->variable > lastp) {
-               free(data);
-               errno = EFTYPE;
-               return (NULL);
+       if ((hostdata = malloc(hostdatalen)) == NULL)
+               return(NULL);
+       memset(hostdata, 0, hostdatalen);
+       lastp = hostdata + hostdatalen;
+
+       rl = (_RuneLocale *)(void *)hostdata;
+       rl->rl_variable = rl + 1;
+
+       memcpy(rl->rl_magic, frl.frl_magic, sizeof(rl->rl_magic));
+       memcpy(rl->rl_encoding, frl.frl_encoding, sizeof(rl->rl_encoding));
+
+       rl->rl_invalid_rune = ntohl((u_int32_t)frl.frl_invalid_rune);
+       rl->rl_variable_len = ntohl((u_int32_t)frl.frl_variable_len);
+
+       for (x = 0; x < _CACHED_RUNES; ++x) {
+               rl->rl_runetype[x] = ntohl(frl.frl_runetype[x]);
+
+               /* XXX assumes rune_t = u_int32_t */
+               rl->rl_maplower[x] = ntohl((uint32_t)frl.frl_maplower[x]);
+               rl->rl_mapupper[x] = ntohl((uint32_t)frl.frl_mapupper[x]);
        }
 
-       for (x = 0; x < rl->runetype_ext.nranges; ++x) {
-               rr = rl->runetype_ext.ranges;
+       if (readrange(rl, &rl->rl_runetype_ext, &frl.frl_runetype_ext,
+                     lastp, fp)) {
+               free(hostdata);
+               return(NULL);
+       }
+       if (readrange(rl, &rl->rl_maplower_ext, &frl.frl_maplower_ext,
+                     lastp, fp)) {
+               free(hostdata);
+               return(NULL);
+       }
+       if (readrange(rl, &rl->rl_mapupper_ext, &frl.frl_mapupper_ext,
+                     lastp, fp)) {
+               free(hostdata);
+               return(NULL);
+       }
 
-               rr[x].min = ntohl(rr[x].min);
-               rr[x].max = ntohl(rr[x].max);
-               if ((rr[x].map = ntohl(rr[x].map)) == 0) {
-                       int len = rr[x].max - rr[x].min + 1;
-                       rr[x].types = rl->variable;
-                       rl->variable = rr[x].types + len;
-                       if (rl->variable > lastp) {
-                               free(data);
-                               errno = EFTYPE;
-                               return (NULL);
-                       }
-                       while (len-- > 0)
-                               rr[x].types[len] = ntohl(rr[x].types[len]);
-               } else
-                       rr[x].types = 0;
+       if (readentry(&rl->rl_runetype_ext, fp) != 0) {
+               free(hostdata);
+               return(NULL);
        }
 
-       for (x = 0; x < rl->maplower_ext.nranges; ++x) {
-               rr = rl->maplower_ext.ranges;
+       if ((uint8_t *)rl->rl_variable + rl->rl_variable_len >
+           (uint8_t *)lastp) {
+               _freeentry(&rl->rl_runetype_ext);
+               free(hostdata);
+               return(NULL);
+       }
+       if (rl->rl_variable_len == 0)
+               rl->rl_variable = NULL;
+       else if (fread(rl->rl_variable, rl->rl_variable_len, 1, fp) != 1) {
+               _freeentry(&rl->rl_runetype_ext);
+               free(hostdata);
+               return(NULL);
+       }
+       find_codeset(rl);
+       _wctype_init(rl);
 
-               rr[x].min = ntohl(rr[x].min);
-               rr[x].max = ntohl(rr[x].max);
-               rr[x].map = ntohl(rr[x].map);
+       /* error if we have junk at the tail */
+       if (ftell(fp) != sb.st_size) {
+               _freeentry(&rl->rl_runetype_ext);
+               free(hostdata);
+               return(NULL);
        }
 
-       for (x = 0; x < rl->mapupper_ext.nranges; ++x) {
-               rr = rl->mapupper_ext.ranges;
+       return(rl);
+}
+
+void
+_NukeRune(_RuneLocale *rl)
+{
+       _DIAGASSERT(rl != NULL);
 
-               rr[x].min = ntohl(rr[x].min);
-               rr[x].max = ntohl(rr[x].max);
-               rr[x].map = ntohl(rr[x].map);
+       if (rl != &_DefaultRuneLocale) {
+               _freeentry(&rl->rl_runetype_ext);
+               if (rl->rl_codeset != NULL)
+                       free(rl->rl_codeset);
+               if (rl->rl_citrus_ctype)
+                       _citrus_ctype_close(rl->rl_citrus_ctype);
+               free(rl);
        }
-       if (((char *)rl->variable) + rl->variable_len > (char *)lastp) {
-               free(data);
-               errno = EFTYPE;
-               return (NULL);
+}
+
+/*
+ * read in old LC_CTYPE declaration file, convert into runelocale info
+ */
+#define _CTYPE_PRIVATE
+#include <limits.h>
+#include <ctype.h>
+
+_RuneLocale *
+_Read_CTypeAsRune(fp)
+       FILE *fp;
+{
+       char id[sizeof(_CTYPE_ID) - 1];
+       uint32_t i, len;
+       uint16_t *new_ctype = NULL;
+       int16_t *new_toupper = NULL, *new_tolower = NULL;
+       /* host data */
+       char *hostdata = NULL;
+       size_t hostdatalen;
+       _RuneLocale *rl;
+       struct stat sb;
+       int x;
+
+       _DIAGASSERT(fp != NULL);
+
+       if (fstat(fileno(fp), &sb) < 0)
+               return(NULL);
+
+       if (sb.st_size < sizeof(id))
+               return(NULL);
+       /* XXX more validation? */
+
+       /* Someone might have read the magic number once already */
+       rewind(fp);
+
+       if (fread(id, sizeof(id), 1, fp) != 1)
+               goto bad;
+       if (memcmp(id, _CTYPE_ID, sizeof(id)) != 0)
+               goto bad;
+
+       if (fread(&i, sizeof(uint32_t), 1, fp) != 1) 
+               goto bad;
+       if ((i = ntohl(i)) != _CTYPE_REV)
+               goto bad;
+
+       if (fread(&len, sizeof(uint32_t), 1, fp) != 1)
+               goto bad;
+       if ((len = ntohl(len)) != _CTYPE_NUM_CHARS)
+               goto bad;
+
+       if ((new_ctype = malloc(sizeof(uint8_t) * (1 + len))) == NULL ||
+           (new_toupper = malloc(sizeof(int16_t) * (1 + len))) == NULL ||
+           (new_tolower = malloc(sizeof(int16_t) * (1 + len))) == NULL)
+               goto bad;
+       new_ctype[0] = 0;
+       if (fread(&new_ctype[1], sizeof(uint8_t), len, fp) != len)
+               goto bad;
+       new_toupper[0] = EOF;
+       if (fread(&new_toupper[1], sizeof(int16_t), len, fp) != len)
+               goto bad;
+       new_tolower[0] = EOF;
+       if (fread(&new_tolower[1], sizeof(int16_t), len, fp) != len)
+               goto bad;
+
+       hostdatalen = sizeof(*rl);
+
+       if ((hostdata = malloc(hostdatalen)) == NULL)
+               goto bad;
+       memset(hostdata, 0, hostdatalen);
+       rl = (_RuneLocale *)(void *)hostdata;
+       rl->rl_variable = NULL;
+
+       memcpy(rl->rl_magic, _RUNE_MAGIC_1, sizeof(rl->rl_magic));
+       memcpy(rl->rl_encoding, "NONE", 4);
+
+       rl->rl_invalid_rune = _DefaultRuneLocale.rl_invalid_rune;       /*XXX*/
+       rl->rl_variable_len = 0;
+
+       for (x = 0; x < _CACHED_RUNES; ++x) {
+               if ((uint32_t) x > len)
+                       continue;
+
+               /*
+                * TWEAKS!
+                * - _X and _CTYPE_X have negligible difference in meaning.
+                * - we don't set digit value, fearing that it would be
+                *   too much of hardcoding.  we may need to revisit it.
+                */
+
+               if (new_ctype[1 + x] & _U)
+                       rl->rl_runetype[x] |= _CTYPE_U;
+               if (new_ctype[1 + x] & _L)
+                       rl->rl_runetype[x] |= _CTYPE_L;
+               if (new_ctype[1 + x] & _N)
+                       rl->rl_runetype[x] |= _CTYPE_D;
+               if (new_ctype[1 + x] & _S)
+                       rl->rl_runetype[x] |= _CTYPE_S;
+               if (new_ctype[1 + x] & _P)
+                       rl->rl_runetype[x] |= _CTYPE_P;
+               if (new_ctype[1 + x] & _C)
+                       rl->rl_runetype[x] |= _CTYPE_C;
+               /* derived flag bits, duplicate of ctype.h */
+               if (new_ctype[1 + x] & (_U | _L))
+                       rl->rl_runetype[x] |= _CTYPE_A;
+               if (new_ctype[1 + x] & (_N | _X))
+                       rl->rl_runetype[x] |= _CTYPE_X;
+               if (new_ctype[1 + x] & (_P|_U|_L|_N))
+                       rl->rl_runetype[x] |= _CTYPE_G;
+               if (new_ctype[1 + x] & _B)
+                       rl->rl_runetype[x] |= _CTYPE_B;
+               if ((new_ctype[1 + x] & (_P|_U|_L|_N|_B)) || x == ' ')
+                       rl->rl_runetype[x] |= (_CTYPE_R | _CTYPE_SW1);
+
+               /* XXX may fail on non-8bit encoding only */
+               rl->rl_mapupper[x] = ntohs(new_toupper[1 + x]);
+               rl->rl_maplower[x] = ntohs(new_tolower[1 + x]);
        }
 
+       _wctype_init(rl);
+
        /*
-        * Go out and zero pointers that should be zero.
+        * __runetable_to_netbsd_ctype() will be called from
+        * setlocale.c:loadlocale(), and fill old ctype table.
         */
-       if (!rl->variable_len)
-               rl->variable = 0;
-
-       if (!rl->runetype_ext.nranges)
-               rl->runetype_ext.ranges = 0;
-
-       if (!rl->maplower_ext.nranges)
-               rl->maplower_ext.ranges = 0;
 
-       if (!rl->mapupper_ext.nranges)
-               rl->mapupper_ext.ranges = 0;
+       free(new_ctype);
+       free(new_toupper);
+       free(new_tolower);
+       return(rl);
 
-       return (rl);
+bad:
+       if (new_ctype)
+               free(new_ctype);
+       if (new_toupper)
+               free(new_toupper);
+       if (new_tolower)
+               free(new_tolower);
+       if (hostdata)
+               free(hostdata);
+       return(NULL);
 }
similarity index 50%
rename from include/rune.h
rename to lib/libc/locale/rune.h
index 3701bb7..c101e18 100644 (file)
@@ -1,3 +1,6 @@
+/*     $NetBSD: src/lib/libc/locale/rune.h,v 1.9 2003/08/07 16:43:04 agc Exp $ */
+/*     $DragonFly: src/lib/libc/locale/rune.h,v 1.1 2005/04/21 16:36:34 joerg Exp $ */
+
 /*-
  * Copyright (c) 1993
  *     The Regents of the University of California.  All rights reserved.
  * 2. Redistributions in binary form must reproduce the above copyright
  *    notice, this list of conditions and the following disclaimer in the
  *    documentation and/or other materials provided with the distribution.
- * 3. All advertising materials mentioning features or use of this software
- *    must display the following acknowledgement:
- *     This product includes software developed by the University of
- *     California, Berkeley and its contributors.
- * 4. Neither the name of the University nor the names of its contributors
+ * 3. Neither the name of the University nor the names of its contributors
  *    may be used to endorse or promote products derived from this software
  *    without specific prior written permission.
  *
  * SUCH DAMAGE.
  *
  *     @(#)rune.h      8.1 (Berkeley) 6/27/93
- * $DragonFly: src/include/Attic/rune.h,v 1.2 2003/11/14 01:01:43 dillon Exp $
  */
 
 #ifndef        _RUNE_H_
 #define        _RUNE_H_
 
-#include <runetype.h>
 #include <stdio.h>
+#include <wchar.h>
+#include "runetype.h"
 
-#define        _PATH_LOCALE    "/usr/share/locale"
+/*
+ * map _RTYPE_x to _CTYPE_x
+ *
+ * XXX: these should be defined in ctype.h and used in isxxx macros.
+ *      (note: current isxxx macros use "old" NetBSD masks and
+ *       _CTYPE_x are not public.)
+ */
+#define        _CTYPE_A        _RUNETYPE_A
+#define        _CTYPE_C        _RUNETYPE_C
+#define        _CTYPE_D        _RUNETYPE_D
+#define        _CTYPE_G        _RUNETYPE_G
+#define        _CTYPE_L        _RUNETYPE_L
+#define        _CTYPE_P        _RUNETYPE_P
+#define        _CTYPE_S        _RUNETYPE_S
+#define        _CTYPE_U        _RUNETYPE_U
+#define        _CTYPE_X        _RUNETYPE_X
+#define        _CTYPE_B        _RUNETYPE_B
+#define        _CTYPE_R        _RUNETYPE_R
+#define        _CTYPE_I        _RUNETYPE_I
+#define        _CTYPE_T        _RUNETYPE_T
+#define        _CTYPE_Q        _RUNETYPE_Q
+#define        _CTYPE_SWM      _RUNETYPE_SWM
+#define        _CTYPE_SWS      _RUNETYPE_SWS
+#define        _CTYPE_SW0      _RUNETYPE_SW0
+#define        _CTYPE_SW1      _RUNETYPE_SW1
+#define        _CTYPE_SW2      _RUNETYPE_SW2
+#define        _CTYPE_SW3      _RUNETYPE_SW3
 
-#define _INVALID_RUNE   _CurrentRuneLocale->invalid_rune
+/*
+ * Other namespace conversion.
+ */
 
-#define __sgetrune      _CurrentRuneLocale->sgetrune
-#define __sputrune      _CurrentRuneLocale->sputrune
+#define        rune_t                  __nbrune_t
+#define        _RUNE_ISCACHED          _NB_RUNE_ISCACHED
+#define        _CACHED_RUNES           _NB_CACHED_RUNES
+#define        _DEFAULT_INVALID_RUNE   _NB_DEFAULT_INVALID_RUNE
+#define        _RuneEntry              _NBRuneEntry
+#define        _RuneRange              _NBRuneRange
+#define        _RuneLocale             _NBRuneLocale
+#define        _RUNE_MAGIC_1           _NB_RUNE_MAGIC_1
+#define        _RUNE_MODULE_1          _NB_RUNE_MODULE_1
+#define        _RUNE_CODESET           _NB_RUNE_CODESET
 
-#define sgetrune(s, n, r)       (*__sgetrune)((s), (n), (r))
-#define sputrune(c, s, n, r)    (*__sputrune)((c), (s), (n), (r))
+/*
+ * global variables
+ */
+extern size_t __mb_len_max_runtime;
+#define __MB_LEN_MAX_RUNTIME   __mb_len_max_runtime
 
-__BEGIN_DECLS
-char   *mbrune (const char *, rune_t);
-char   *mbrrune (const char *, rune_t);
-char   *mbmb (const char *, char *);
-long    fgetrune (FILE *);
-int     fputrune (rune_t, FILE *);
-int     fungetrune (rune_t, FILE *);
-int     setrunelocale (char *);
-void    setinvalidrune (rune_t);
-__END_DECLS
+extern _RuneLocale _DefaultRuneLocale;
+extern _RuneLocale *_CurrentRuneLocale;
+extern const char *_PathLocale;
 
 #endif /*! _RUNE_H_ */
similarity index 63%
rename from lib/libc/locale/ldpart.h
rename to lib/libc/locale/rune_local.h
index 561e4c7..bd9b364 100644 (file)
@@ -1,5 +1,8 @@
+/*     $NetBSD: src/lib/libc/locale/rune_local.h,v 1.7 2003/03/02 22:18:15 tshiozak Exp $      */
+/*     $DragonFly: src/lib/libc/locale/rune_local.h,v 1.1 2005/04/21 16:36:34 joerg Exp $ */
+
 /*-
- * Copyright (c) 2000, 2001 Alexey Zelkin <phantom@FreeBSD.org>
+ * Copyright (c) 2000 Citrus Project,
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  * SUCH DAMAGE.
- *
- * $FreeBSD: src/lib/libc/locale/ldpart.h,v 1.4.2.2 2002/08/12 11:17:37 ache Exp $
- * $DragonFly: src/lib/libc/locale/Attic/ldpart.h,v 1.2 2003/06/17 04:26:44 dillon Exp $
  */
 
-#ifndef _LDPART_H_
-#define        _LDPART_H_
+#ifndef _RUNE_LOCAL_H_
+#define _RUNE_LOCAL_H_
+
+/* rune.c */
+_RuneLocale *_Read_RuneMagi(FILE *fp);
+_RuneLocale *_Read_CTypeAsRune(FILE *fp);
+void   _NukeRune(_RuneLocale *);
+
+/* setrunelocale.c */
+int    _xpg4_setrunelocale(const char *);
+_RuneLocale *_findrunelocale(char *);
+int    _newrunelocale(char *);
+
+/* runeglue.c */
+int    __runetable_to_netbsd_ctype(const char *);
+
+/* ___runetype_mb.c */
+_RuneType ___runetype_mb(wint_t);
 
-#define _LDP_LOADED 0
-#define _LDP_ERROR  (-1)
-#define _LDP_CACHE  1
+/* ___tolower_mb.c */
+wint_t ___tolower_mb(wint_t);
 
-int    __part_load_locale(const char *, int*, char *, const char *,
-                   int, int, const char **);
+/* ___toupper_mb.c */
+wint_t ___toupper_mb(wint_t);
 
-#endif /* !_LDPART_H_ */
+#endif
diff --git a/lib/libc/locale/runetype.c b/lib/libc/locale/runetype.c
deleted file mode 100644 (file)
index 1ddb880..0000000
+++ /dev/null
@@ -1,65 +0,0 @@
-/*-
- * Copyright (c) 1993
- *     The Regents of the University of California.  All rights reserved.
- *
- * This code is derived from software contributed to Berkeley by
- * Paul Borman at Krystal Technologies.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- * 3. All advertising materials mentioning features or use of this software
- *    must display the following acknowledgement:
- *     This product includes software developed by the University of
- *     California, Berkeley and its contributors.
- * 4. Neither the name of the University nor the names of its contributors
- *    may be used to endorse or promote products derived from this software
- *    without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- *
- * $FreeBSD: src/lib/libc/locale/runetype.c,v 1.5.8.1 2000/06/04 21:47:39 ache Exp $
- * $DragonFly: src/lib/libc/locale/Attic/runetype.c,v 1.3 2003/11/09 02:34:01 dillon Exp $
- */
-
-#include <stdio.h>
-#include <rune.h>
-
-unsigned long
-___runetype(__ct_rune_t c)
-{
-       int x;
-       _RuneRange *rr = &_CurrentRuneLocale->runetype_ext;
-       _RuneEntry *re = rr->ranges;
-
-       if (c < 0 || c == EOF)
-               return(0L);
-
-       for (x = 0; x < rr->nranges; ++x, ++re) {
-               if (c < re->min)
-                       return(0L);
-               if (c <= re->max) {
-                       if (re->types)
-                           return(re->types[c - re->min]);
-                       else
-                           return(re->map);
-               }
-       }
-
-       return(0L);
-}
diff --git a/lib/libc/locale/runetype.h b/lib/libc/locale/runetype.h
new file mode 100644 (file)
index 0000000..9019fd9
--- /dev/null
@@ -0,0 +1,221 @@
+/*     $NetBSD: src/lib/libc/locale/runetype.h,v 1.18 2003/08/07 16:43:04 agc Exp $    */
+/*     $DragonFly: src/lib/libc/locale/runetype.h,v 1.1 2005/04/21 16:36:34 joerg Exp $ */
+
+/*-
+ * Copyright (c) 1993
+ *     The Regents of the University of California.  All rights reserved.
+ *
+ * This code is derived from software contributed to Berkeley by
+ * Paul Borman at Krystal Technologies.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. Neither the name of the University nor the names of its contributors
+ *    may be used to endorse or promote products derived from this software
+ *    without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ *
+ *     @(#)runetype.h  8.1 (Berkeley) 6/2/93
+ */
+
+#ifndef        _NB_RUNETYPE_H_
+#define        _NB_RUNETYPE_H_
+
+#include <sys/types.h>
+
+#ifndef UINT32_C
+/* assumes sizeof(unsigned int)>=4 */
+#define        UINT32_C(c) ((uint32_t)(c##U))
+#endif
+
+typedef uint32_t       __nbrune_t;
+typedef uint64_t       __runepad_t;
+
+#define        _NB_CACHED_RUNES        (1 << 8)        /* Must be a power of 2 */
+#define        _NB_RUNE_ISCACHED(c)    ((c) >= 0 && (c) < _CACHED_RUNES)
+
+#define        _NB_DEFAULT_INVALID_RUNE ((__nbrune_t)(-3))
+
+/*
+ * The lower 8 bits of runetype[] contain the digit value of the rune.
+ */
+typedef uint32_t _RuneType;
+#define        _RUNETYPE_A     UINT32_C(0x00000100)    /* Alpha */
+#define        _RUNETYPE_C     UINT32_C(0x00000200)    /* Control */
+#define        _RUNETYPE_D     UINT32_C(0x00000400)    /* Digit */
+#define        _RUNETYPE_G     UINT32_C(0x00000800)    /* Graph */
+#define        _RUNETYPE_L     UINT32_C(0x00001000)    /* Lower */
+#define        _RUNETYPE_P     UINT32_C(0x00002000)    /* Punct */
+#define        _RUNETYPE_S     UINT32_C(0x00004000)    /* Space */
+#define        _RUNETYPE_U     UINT32_C(0x00008000)    /* Upper */
+#define        _RUNETYPE_X     UINT32_C(0x00010000)    /* X digit */
+#define        _RUNETYPE_B     UINT32_C(0x00020000)    /* Blank */
+#define        _RUNETYPE_R     UINT32_C(0x00040000)    /* Print */
+#define        _RUNETYPE_I     UINT32_C(0x00080000)    /* Ideogram */
+#define        _RUNETYPE_T     UINT32_C(0x00100000)    /* Special */
+#define        _RUNETYPE_Q     UINT32_C(0x00200000)    /* Phonogram */
+#define        _RUNETYPE_SWM   UINT32_C(0xc0000000)/* Mask to get screen width data */
+#define        _RUNETYPE_SWS   30              /* Bits to shift to get width */
+#define        _RUNETYPE_SW0   UINT32_C(0x00000000)    /* 0 width character */
+#define        _RUNETYPE_SW1   UINT32_C(0x40000000)    /* 1 width character */
+#define        _RUNETYPE_SW2   UINT32_C(0x80000000)    /* 2 width character */
+#define        _RUNETYPE_SW3   UINT32_C(0xc0000000)    /* 3 width character */
+
+
+/*
+ * rune file format.  network endian.
+ */
+typedef struct {
+       int32_t         fre_min;        /* First rune of the range */
+       int32_t         fre_max;        /* Last rune (inclusive) of the range */
+       int32_t         fre_map;        /* What first maps to in maps */
+       uint32_t        fre_pad1;       /* backward compatibility */
+       __runepad_t     fre_pad2;       /* backward compatibility */
+} __packed _FileRuneEntry;
+
+
+typedef struct {
+       uint32_t        frr_nranges;    /* Number of ranges stored */
+       uint32_t        frr_pad1;       /* backward compatibility */
+       __runepad_t     frr_pad2;       /* backward compatibility */
+} __packed _FileRuneRange;
+
+
+typedef struct {
+       char            frl_magic[8];   /* Magic saying what version we are */
+       char            frl_encoding[32];/* ASCII name of this encoding */
+
+       __runepad_t     frl_pad1;       /* backward compatibility */
+       __runepad_t     frl_pad2;       /* backward compatibility */
+       int32_t         frl_invalid_rune;
+       uint32_t        frl_pad3;       /* backward compatibility */
+
+       _RuneType       frl_runetype[_NB_CACHED_RUNES];
+       int32_t         frl_maplower[_NB_CACHED_RUNES];
+       int32_t         frl_mapupper[_NB_CACHED_RUNES];
+
+       /*
+        * The following are to deal with Runes larger than _CACHED_RUNES - 1.
+        * Their data is actually contiguous with this structure so as to make
+        * it easier to read/write from/to disk.
+        */
+       _FileRuneRange  frl_runetype_ext;
+       _FileRuneRange  frl_maplower_ext;
+       _FileRuneRange  frl_mapupper_ext;
+
+       __runepad_t     frl_pad4;       /* backward compatibility */
+       int32_t         frl_variable_len;/* how long that data is */
+       uint32_t        frl_pad5;       /* backward compatibility */
+
+       /* variable size data follows */
+} __packed _FileRuneLocale;
+
+
+/*
+ * expanded rune locale declaration.  local to the host.  host endian.
+ */
+typedef struct {
+       __nbrune_t      re_min;         /* First rune of the range */
+       __nbrune_t      re_max;         /* Last rune (inclusive) of the range */
+       __nbrune_t      re_map;         /* What first maps to in maps */
+       _RuneType       *re_rune_types; /* Array of types in range */
+} _NBRuneEntry;
+
+
+typedef struct {
+       uint32_t        rr_nranges;     /* Number of ranges stored */
+       _NBRuneEntry    *rr_rune_ranges;
+} _NBRuneRange;
+
+
+/*
+ * wctrans stuffs.
+ */
+typedef struct _WCTransEntry {
+       const char      *te_name;
+       __nbrune_t      *te_cached;
+       _NBRuneRange    *te_extmap;
+} _WCTransEntry;
+#define _WCTRANS_INDEX_LOWER   0
+#define _WCTRANS_INDEX_UPPER   1
+#define _WCTRANS_NINDEXES      2
+
+/*
+ * wctype stuffs.
+ */
+typedef struct _WCTypeEntry {
+       const char      *te_name;
+       _RuneType       te_mask;
+} _WCTypeEntry;
+#define _WCTYPE_INDEX_ALNUM    0
+#define _WCTYPE_INDEX_ALPHA    1
+#define _WCTYPE_INDEX_BLANK    2
+#define _WCTYPE_INDEX_CNTRL    3
+#define _WCTYPE_INDEX_DIGIT    4
+#define _WCTYPE_INDEX_GRAPH    5
+#define _WCTYPE_INDEX_LOWER    6
+#define _WCTYPE_INDEX_PRINT    7
+#define _WCTYPE_INDEX_PUNCT    8
+#define _WCTYPE_INDEX_SPACE    9
+#define _WCTYPE_INDEX_UPPER    10
+#define _WCTYPE_INDEX_XDIGIT   11
+#define _WCTYPE_NINDEXES       12
+
+/*
+ * ctype stuffs
+ */
+
+typedef struct _NBRuneLocale {
+       /*
+        * copied from _FileRuneLocale
+        */
+       char            rl_magic[8];    /* Magic saying what version we are */
+       char            rl_encoding[32];/* ASCII name of this encoding */
+       __nbrune_t      rl_invalid_rune;
+       _RuneType       rl_runetype[_NB_CACHED_RUNES];
+       __nbrune_t      rl_maplower[_NB_CACHED_RUNES];
+       __nbrune_t      rl_mapupper[_NB_CACHED_RUNES];
+       _NBRuneRange    rl_runetype_ext;
+       _NBRuneRange    rl_maplower_ext;
+       _NBRuneRange    rl_mapupper_ext;
+
+       void            *rl_variable;
+       size_t          rl_variable_len;
+
+       /*
+        * the following portion is generated on the fly
+        */
+       char                            *rl_codeset;
+       struct _citrus_ctype_rec        *rl_citrus_ctype;
+       _WCTransEntry                   rl_wctrans[_WCTRANS_NINDEXES];
+       _WCTypeEntry                    rl_wctype[_WCTYPE_NINDEXES];
+} _NBRuneLocale;
+
+
+/* magic number for LC_CTYPE (rune)locale declaration */
+#define        _NB_RUNE_MAGIC_1 "RuneCT10"     /* Indicates version 0 of RuneLocale */
+
+/* magic string for dynamic link module - type should be like "LC_CTYPE" */
+#define        _NB_RUNE_MODULE_1(type) "RuneModule10." type
+
+/* codeset tag */
+#define _NB_RUNE_CODESET "CODESET="
+
+#endif /* !_NB_RUNETYPE_H_ */
diff --git a/lib/libc/locale/setinvalidrune.c b/lib/libc/locale/setinvalidrune.c
deleted file mode 100644 (file)
index 45a2a47..0000000
+++ /dev/null
@@ -1,44 +0,0 @@
-/*-
- * Copyright (c) 1993
- *     The Regents of the University of California.  All rights reserved.
- *
- * This code is derived from software contributed to Berkeley by
- * Paul Borman at Krystal Technologies.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- * 3. All advertising materials mentioning features or use of this software
- *    must display the following acknowledgement:
- *     This product includes software developed by the University of
- *     California, Berkeley and its contributors.
- * 4. Neither the name of the University nor the names of its contributors
- *    may be used to endorse or promote products derived from this software
- *    without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- */
-
-#include <rune.h>
-
-void
-setinvalidrune(ir)
-       rune_t ir;
-{
-       _INVALID_RUNE = ir;
-}
index 9b87002..0ce6c90 100644 (file)
@@ -1,5 +1,7 @@
+/*     $NetBSD: src/lib/libc/locale/setlocale.c,v 1.47 2004/07/21 20:27:46 tshiozak Exp $      */
+/*     $DragonFly: src/lib/libc/locale/setlocale.c,v 1.3 2005/04/21 16:36:34 joerg Exp $ */
+
 /*
- * Copyright (c) 1996 - 2002 FreeBSD Project
  * Copyright (c) 1991, 1993
  *     The Regents of the University of California.  All rights reserved.
  *
  * 2. Redistributions in binary form must reproduce the above copyright
  *    notice, this list of conditions and the following disclaimer in the
  *    documentation and/or other materials provided with the distribution.
- * 3. All advertising materials mentioning features or use of this software
- *    must display the following acknowledgement:
- *     This product includes software developed by the University of
- *     California, Berkeley and its contributors.
- * 4. Neither the name of the University nor the names of its contributors
+ * 3. Neither the name of the University nor the names of its contributors
  *    may be used to endorse or promote products derived from this software
  *    without specific prior written permission.
  *
  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  * SUCH DAMAGE.
- *
- * @(#)setlocale.c     8.1 (Berkeley) 7/4/93
- * $FreeBSD: src/lib/libc/locale/setlocale.c,v 1.25.2.8 2002/08/12 11:17:38 ache Exp $
- * $DragonFly: src/lib/libc/locale/setlocale.c,v 1.2 2003/06/17 04:26:44 dillon Exp $
  */
 
+#define _CTYPE_PRIVATE
+
 #include <sys/types.h>
+#include <sys/localedef.h>
 #include <sys/stat.h>
-#include <errno.h>
+#include <assert.h>
+#include <ctype.h>
 #include <limits.h>
 #include <locale.h>
-#include <rune.h>
+#include <paths.h>
+#include <stdio.h>
 #include <stdlib.h>
 #include <string.h>
 #include <unistd.h>
 #include "collate.h"
-#include "lmonetary.h" /* for __monetary_load_locale() */
-#include "lnumeric.h"  /* for __numeric_load_locale() */
-#include "lmessages.h" /* for __messages_load_locale() */
-#include "setlocale.h"
-#include "ldpart.h"
-#include "../stdtime/timelocal.h" /* for __time_load_locale() */
+#include "rune.h"
+#include "rune_local.h"
 
-/*
- * Category names for getenv()
- */
-static char *categories[_LC_LAST] = {
-    "LC_ALL",
-    "LC_COLLATE",
-    "LC_CTYPE",
-    "LC_MONETARY",
-    "LC_NUMERIC",
-    "LC_TIME",
-    "LC_MESSAGES",
+#include "../citrus/citrus_namespace.h"
+#include "../citrus/citrus_region.h"
+#include "../citrus/citrus_lookup.h"
+#include "../citrus/citrus_bcs.h"
+
+#define _LOCALE_ALIAS_NAME     "locale.alias"
+#define _LOCALE_SYM_FORCE      "/force"
+
+static char    *currentlocale(void);
+static void    revert_to_default(int);
+static int     force_locale_enable(int);
+static int     load_locale_sub(int, const char *, int);
+static char    *loadlocale(int);
+static const char *__get_locale_env(int);
+
+static void    revert_collate(void);
+static int     load_ctype(const char *);
+static void    revert_ctype(void);
+static int     load_messages(const char *);
+
+static const struct  {
+       const char *name;
+       int (*load_function)(const char *);
+       void (*revert_function)(void);
+} categories[] = {
+       { "LC_ALL", NULL, NULL },
+       { "LC_COLLATE", __collate_load_tables, revert_collate },
+       { "LC_CTYPE", load_ctype, revert_ctype },
+       { "LC_MONETARY", NULL, NULL },
+       { "LC_NUMERIC", NULL, NULL },
+       { "LC_TIME", NULL, NULL },
+       { "LC_MESSAGES", load_messages, NULL }
 };
 
 /*
  * Current locales for each category
  */
-static char current_categories[_LC_LAST][ENCODING_LEN + 1] = {
-    "C",
-    "C",
-    "C",
-    "C",
-    "C",
-    "C",
-    "C",
+static char current_categories[_LC_LAST][32] = {
+       "C",
+        "C",
+        "C",
+        "C",
+        "C",
+       "C",
+        "C"
 };
 
 /*
  * The locales we are going to try and load
  */
-static char new_categories[_LC_LAST][ENCODING_LEN + 1];
-static char saved_categories[_LC_LAST][ENCODING_LEN + 1];
+static char new_categories[_LC_LAST][32];
 
-static char current_locale_string[_LC_LAST * (ENCODING_LEN + 1/*"/"*/ + 1)];
+static char current_locale_string[_LC_LAST * 33];
+const char *_PathLocale;
 
-static char    *currentlocale(void);
-static int     wrap_setrunelocale(const char *);
-static char    *loadlocale(int);
+static int
+load_ctype(const char *locale)
+{
+       if (_xpg4_setrunelocale(locale))
+               return(-1);
+       if (__runetable_to_netbsd_ctype(locale)) {
+               /* very unfortunate, but need to go to "C" locale */
+               revert_ctype();
+               return(-1);
+       }
+
+       return(0);
+}
+
+static void
+revert_ctype(void)
+{
+       _xpg4_setrunelocale("C");
+       __runetable_to_netbsd_ctype("C");
+}
+
+static void
+revert_collate(void)
+{
+       __collate_load_tables("C");
+}
+
+static int
+load_messages(const char *locale)
+{
+       char name[PATH_MAX];
+       struct stat st;
+
+       /*
+        * XXX we don't have LC_MESSAGES support yet,
+        * but catopen may use the value of LC_MESSAGES category.
+        * so return successfully if locale directory is present.
+        */
+       snprintf(name, sizeof(name), "%s/%s", _PathLocale, locale);
+
+       if (stat(name, &st) < 0)
+               return(-1);
+       if (!S_ISDIR(st.st_mode))
+               return(-1);
+       return(0);
+}
 
 char *
-setlocale(category, locale)
-       int category;
-       const char *locale;
+setlocale(int category, const char *locale)
 {
-       int i, j, len, saverr;
-       char *env, *r;
+       int i, loadlocale_success;
+       size_t len;
+       const char *env, *r;
 
-       if (category < LC_ALL || category >= _LC_LAST) {
-               errno = EINVAL;
-               return (NULL);
-       }
+       __mb_len_max_runtime = 32;
+
+       if (issetugid() ||
+           (!_PathLocale && !(_PathLocale = getenv("PATH_LOCALE"))))
+               _PathLocale = _PATH_LOCALE;
+
+       if (category < 0 || category >= (int)__arysize(categories))
+               return(NULL);
 
        if (locale == NULL)
-               return (category != LC_ALL ?
+               return(category ?
                    current_categories[category] : currentlocale());
 
        /*
         * Default to the current locale for everything.
         */
        for (i = 1; i < _LC_LAST; ++i)
-               (void)strcpy(new_categories[i], current_categories[i]);
+               strlcpy(new_categories[i], current_categories[i],
+                       sizeof(new_categories[i]));
 
        /*
         * Now go fill up new_categories from the locale argument
         */
-       if (!*locale) {
-               env = getenv("LC_ALL");
-
-               if (category != LC_ALL && (env == NULL || !*env))
-                       env = getenv(categories[category]);
-
-               if (env == NULL || !*env)
-                       env = getenv("LANG");
-
-               if (env == NULL || !*env)
-                       env = "C";
-
-               if (strlen(env) > ENCODING_LEN) {
-                       errno = EINVAL;
-                       return (NULL);
-               }
-               (void)strcpy(new_categories[category], env);
-
+       if (*locale == '\0') {
                if (category == LC_ALL) {
                        for (i = 1; i < _LC_LAST; ++i) {
-                               if ((env = getenv(categories[i])) == NULL ||
-                                   !*env)
-                                       env = new_categories[LC_ALL];
-                               else if (strlen(env) > ENCODING_LEN) {
-                                       errno = EINVAL;
-                                       return (NULL);
-                               }
-                               (void)strcpy(new_categories[i], env);
+                               env = __get_locale_env(i);
+                               strlcpy(new_categories[i], env,
+                                   sizeof(new_categories[i]));
                        }
                }
-       } else if (category != LC_ALL) {
-               if (strlen(locale) > ENCODING_LEN) {
-                       errno = EINVAL;
-                       return (NULL);
+               else {
+                       env = __get_locale_env(category);
+                       strlcpy(new_categories[category], env,
+                               sizeof(new_categories[category]));
                }
-               (void)strcpy(new_categories[category], locale);
+       } else if (category) {
+               strlcpy(new_categories[category], locale,
+                       sizeof(new_categories[category]));
        } else {
-               if ((r = strchr(locale, '/')) == NULL) {
-                       if (strlen(locale) > ENCODING_LEN) {
-                               errno = EINVAL;
-                               return (NULL);
+               if ((r = strchr(locale, '/')) == 0) {
+                       for (i = 1; i < _LC_LAST; ++i) {
+                               strlcpy(new_categories[i], locale,
+                                       sizeof(new_categories[i]));
                        }
-                       for (i = 1; i < _LC_LAST; ++i)
-                               (void)strcpy(new_categories[i], locale);
                } else {
-                       for (i = 1; r[1] == '/'; ++r)
-                               ;
-                       if (!r[1]) {
-                               errno = EINVAL;
-                               return (NULL);  /* Hmm, just slashes... */
-                       }
-                       do {
-                               if (i == _LC_LAST)
-                                       break;  /* Too many slashes... */
-                               if ((len = r - locale) > ENCODING_LEN) {
-                                       errno = EINVAL;
-                                       return (NULL);
-                               }
-                               (void)strlcpy(new_categories[i], locale,
-                                             len + 1);
-                               i++;
-                               locale = r;
-                               while (*locale == '/')
-                                       ++locale;
-                               while (*++r && *r != '/')
-                                       ;
-                       } while (*locale);
-                       while (i < _LC_LAST) {
-                               (void)strcpy(new_categories[i],
-                                            new_categories[i-1]);
-                               i++;
+                       for (i = 1;;) {
+                               _DIAGASSERT(*r == '/' || *r == 0);
+                               _DIAGASSERT(*locale != 0);
+                               if (*locale == '/')
+                                       return(NULL);   /* invalid format. */
+                               len = r - locale;
+                               if (len + 1 > sizeof(new_categories[i]))
+                                       return(NULL);   /* too long */
+                               memcpy(new_categories[i], locale, len);
+                               new_categories[i][len] = '\0';
+                               if (*r == 0)
+                                       break;
+                               _DIAGASSERT(*r == '/');
+                               if (*(locale = ++r) == 0)
+                                       /* slash followed by NUL */
+                                       return(NULL);
+                               /* skip until NUL or '/' */
+                               while (*r && *r != '/')
+                                       r++;
+                               if (++i == _LC_LAST)
+                                       return(NULL);   /* too many slashes. */
                        }
+                       if (i + 1 != _LC_LAST)
+                               return(NULL);   /* too few slashes. */
                }
        }
 
-       if (category != LC_ALL)
-               return (loadlocale(category));
+       if (category)
+               return(loadlocale(category));
 
+       loadlocale_success = 0;
        for (i = 1; i < _LC_LAST; ++i) {
-               (void)strcpy(saved_categories[i], current_categories[i]);
-               if (loadlocale(i) == NULL) {
-                       saverr = errno;
-                       for (j = 1; j < i; j++) {
-                               (void)strcpy(new_categories[j],
-                                            saved_categories[j]);
-                               if (loadlocale(j) == NULL) {
-                                       (void)strcpy(new_categories[j], "C");
-                                       (void)loadlocale(j);
-                               }
-                       }
-                       errno = saverr;
-                       return (NULL);
-               }
+               if (loadlocale(i) != NULL)
+                       loadlocale_success = 1;
        }
-       return (currentlocale());
+
+       /*
+        * If all categories failed, return NULL; we don't need to back
+        * changes off, since none happened.
+        */
+       if (!loadlocale_success)
+               return(NULL);
+
+       return(currentlocale());
 }
 
 static char *
-currentlocale()
+currentlocale(void)
 {
        int i;
 
-       (void)strcpy(current_locale_string, current_categories[1]);
+       strlcpy(current_locale_string, current_categories[1],
+               sizeof(current_locale_string));
 
        for (i = 2; i < _LC_LAST; ++i)
                if (strcmp(current_categories[1], current_categories[i])) {
-                       for (i = 2; i < _LC_LAST; ++i) {
-                               (void)strcat(current_locale_string, "/");
-                               (void)strcat(current_locale_string,
-                                            current_categories[i]);
-                       }
+                       snprintf(current_locale_string,
+                           sizeof(current_locale_string), "%s/%s/%s/%s/%s/%s",
+                           current_categories[1], current_categories[2],
+                           current_categories[3], current_categories[4],
+                           current_categories[5], current_categories[6]);
                        break;
                }
-       return (current_locale_string);
+       return(current_locale_string);
+}
+
+static void
+revert_to_default(int category)
+{
+       _DIAGASSERT(category >= 0 && category < _LC_LAST);
+
+       if (categories[category].revert_function != NULL)
+               categories[category].revert_function();
 }
 
 static int
-wrap_setrunelocale(const char *locale)
+force_locale_enable(int category)
 {
-       int ret = setrunelocale((char *)locale);
+       revert_to_default(category);
 
-       if (ret != 0) {
-               errno = ret;
-               return (_LDP_ERROR);
-       }
-       return (_LDP_LOADED);
+       return(0);
 }
 
-static char *
-loadlocale(category)
-       int category;
+static int
+load_locale_sub(int category, const char *locname, int isspecial)
 {
-       char *new = new_categories[category];
-       char *old = current_categories[category];
-       int (*func)(const char *);
-
-       if ((new[0] == '.' &&
-            (new[1] == '\0' || (new[1] == '.' && new[2] == '\0'))) ||
-           strchr(new, '/') != NULL) {
-               errno = EINVAL;
-               return (NULL);
-       }
+       char name[PATH_MAX];
 
-       if (_PathLocale == NULL) {
-               char *p = getenv("PATH_LOCALE");
-
-               if (p != NULL
-#ifndef __NETBSD_SYSCALLS
-                       && !issetugid()
-#endif
-                       ) {
-                       if (strlen(p) + 1/*"/"*/ + ENCODING_LEN +
-                           1/*"/"*/ + CATEGORY_LEN >= PATH_MAX) {
-                               errno = ENAMETOOLONG;
-                               return (NULL);
-                       }
-                       _PathLocale = strdup(p);
-                       if (_PathLocale == NULL) {
-                               errno = ENOMEM;
-                               return (NULL);
-                       }
-               } else
-                       _PathLocale = _PATH_LOCALE;
+       /* check for the default locales */
+       if (!strcmp(new_categories[category], "C") ||
+           !strcmp(new_categories[category], "POSIX")) {
+               revert_to_default(category);
+               return(0);
        }
 
-       switch (category) {
-       case LC_CTYPE:
-               func = wrap_setrunelocale;
-               break;
-       case LC_COLLATE:
-               func = __collate_load_tables;
-               break;
-       case LC_TIME:
-               func = __time_load_locale;
-               break;
-       case LC_NUMERIC:
-               func = __numeric_load_locale;
-               break;
-       case LC_MONETARY:
-               func = __monetary_load_locale;
-               break;
-       case LC_MESSAGES:
-               func = __messages_load_locale;
-               break;
-       default:
-               errno = EINVAL;
-               return (NULL);
-       }
+       /* check whether special symbol */
+       if (isspecial && _bcs_strcasecmp(locname, _LOCALE_SYM_FORCE) == 0)
+               return(force_locale_enable(category));
 
-       if (strcmp(new, old) == 0)
-               return (old);
+       /* sanity check */
+       if (strchr(locname, '/') != NULL)
+               return(-1);
 
-       if (func(new) != _LDP_ERROR) {
-               (void)strcpy(old, new);
-               return (old);
-       }
+       snprintf(name, sizeof(name), "%s/%s/%s", _PathLocale, locname,
+                categories[category].name);
 
-       return (NULL);
+       if (category > 0 && category < (int)__arysize(categories) &&
+           categories[category].load_function != NULL)
+               return(categories[category].load_function(locname));
+
+       return(0);
+}
+
+static char *
+loadlocale(int category)
+{
+       char aliaspath[PATH_MAX], loccat[PATH_MAX], buf[PATH_MAX];
+       const char *alias;
+
+       _DIAGASSERT(0 < category && category < __arysize(categories));
+
+       if (strcmp(new_categories[category], current_categories[category]) == 0)
+               return(current_categories[category]);
+
+       /* (1) non-aliased file */
+       if (!load_locale_sub(category, new_categories[category], 0))
+               goto success;
+
+       /* (2) lookup locname/catname type alias */
+       snprintf(aliaspath, sizeof(aliaspath), "%s/" _LOCALE_ALIAS_NAME,
+                _PathLocale);
+       snprintf(loccat, sizeof(loccat), "%s/%s", new_categories[category],
+                categories[category].name);
+       alias = _lookup_alias(aliaspath, loccat, buf, sizeof(buf),
+                             _LOOKUP_CASE_SENSITIVE);
+       if (!load_locale_sub(category, alias, 1))
+               goto success;
+
+       /* (3) lookup locname type alias */
+       alias = _lookup_alias(aliaspath, new_categories[category],
+                             buf, sizeof(buf), _LOOKUP_CASE_SENSITIVE);
+       if (!load_locale_sub(category, alias, 1))
+               goto success;
+
+       return(NULL);
+
+success:
+       strlcpy(current_categories[category], new_categories[category],
+               sizeof(current_categories[category]));
+       return(current_categories[category]);
 }
 
+static const char *
+__get_locale_env(int category)
+{
+       const char *env;
+
+       _DIAGASSERT(category != LC_ALL);
+
+       /* 1. check LC_ALL. */
+       env = getenv(categories[0].name);
+
+       /* 2. check LC_* */
+       if (env == NULL || *env == '\0')
+               env = getenv(categories[category].name);
+
+       /* 3. check LANG */
+       if (env == NULL || *env == '\0')
+               env = getenv("LANG");
+
+       /* 4. if none is set, fall to "C" */
+       if (env == NULL || *env == '\0' || strchr(env, '/'))
+               env = "C";
+
+       return(env);
+}
diff --git a/lib/libc/locale/setlocale.h b/lib/libc/locale/setlocale.h
deleted file mode 100644 (file)
index f3b2a22..0000000
+++ /dev/null
@@ -1,34 +0,0 @@
-#ifndef _SETLOCALE_H
-#define _SETLOCALE_H
-/*
- * Copyright (C) 1997 by Andrey A. Chernov, Moscow, Russia.
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- */
-
-#define ENCODING_LEN 31
-#define CATEGORY_LEN 11
-
-extern char *_PathLocale;
-
-#endif /* SETLOCALE_H */
index a676ba6..540d2a7 100644 (file)
@@ -1,3 +1,68 @@
+/*     $NetBSD: src/lib/libc/locale/setrunelocale.c,v 1.14 2003/08/07 16:43:07 agc Exp $       */
+/*     $DragonFly: src/lib/libc/locale/setrunelocale.c,v 1.5 2005/04/21 16:36:34 joerg Exp $ */
+
+/*-
+ * Copyright (c)1999 Citrus Project,
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ */
+
+/*-
+ * Copyright (c) 1998 The NetBSD Foundation, Inc.
+ * All rights reserved.
+ *
+ * This code is derived from software contributed to The NetBSD Foundation
+ * by Paul Kranenburg.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. All advertising materials mentioning features or use of this software
+ *    must display the following acknowledgement:
+ *        This product includes software developed by the NetBSD
+ *        Foundation, Inc. and its contributors.
+ * 4. Neither the name of The NetBSD Foundation nor the names of its
+ *    contributors may be used to endorse or promote products derived
+ *    from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
+ * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
+ * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ */
+
 /*-
  * Copyright (c) 1993
  *     The Regents of the University of California.  All rights reserved.
  * 2. Redistributions in binary form must reproduce the above copyright
  *    notice, this list of conditions and the following disclaimer in the
  *    documentation and/or other materials provided with the distribution.
- * 3. All advertising materials mentioning features or use of this software
- *    must display the following acknowledgement:
- *     This product includes software developed by the University of
- *     California, Berkeley and its contributors.
- * 4. Neither the name of the University nor the names of its contributors
+ * 3. Neither the name of the University nor the names of its contributors
  *    may be used to endorse or promote products derived from this software
  *    without specific prior written permission.
  *
  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  * SUCH DAMAGE.
- *
- * $FreeBSD: src/lib/libc/locale/setrunelocale.c,v 1.14.6.4 2002/10/24 11:00:52 tjr Exp $
- * $DragonFly: src/lib/libc/locale/setrunelocale.c,v 1.4 2003/12/01 23:38:23 drhodus Exp $
  */
 
-#include <rune.h>
+#include <assert.h>
 #include <errno.h>
 #include <limits.h>
-#include <string.h>
+#include <locale.h>
+#include <stddef.h>
 #include <stdio.h>
 #include <stdlib.h>
+#include <string.h>
 #include <unistd.h>
-#include "setlocale.h"
-
-extern int             _none_init(_RuneLocale *);
-extern int             _UTF2_init(_RuneLocale *);
-extern int             _UTF8_init(_RuneLocale *);
-extern int             _EUC_init(_RuneLocale *);
-extern int             _GB18030_init(_RuneLocale *);
-extern int             _GBK_init(_RuneLocale *);
-extern int             _BIG5_init(_RuneLocale *);
-extern int             _MSKanji_init(_RuneLocale *);
-extern _RuneLocale      *_Read_RuneMagi(FILE *);
+#include <wchar.h>
+#include "../citrus/citrus_module.h"
+#include "../citrus/citrus_ctype.h"
+#include "rune.h"
+#include "rune_local.h"
+#include "multibyte.h"
+
+struct localetable {
+       char path[PATH_MAX];
+       _RuneLocale *runelocale;
+       struct localetable *next;
+};
+static struct localetable *localetable_head;
+
+_RuneLocale *
+_findrunelocale(char *path)
+{
+       struct localetable *lt;
+
+       _DIAGASSERT(path != NULL);
+
+       /* ones which we have seen already */
+       for (lt = localetable_head; lt; lt = lt->next) {
+               if (strcmp(path, lt->path) == 0)
+                       return(lt->runelocale);
+       }
+
+       return(NULL);
+}
 
 int
-setrunelocale(char *encoding)
+_newrunelocale(char *path)
 {
+       struct localetable *lt;
        FILE *fp;
-       char name[PATH_MAX];
        _RuneLocale *rl;
-       int saverr, ret;
-       static char ctype_encoding[ENCODING_LEN + 1];
-       static _RuneLocale *CachedRuneLocale;
-       static int Cached__mb_cur_max;
-
-       if (!encoding || !*encoding || strlen(encoding) > ENCODING_LEN ||
-           (encoding[0] == '.' &&
-            (encoding[1] == '\0' ||
-             (encoding[1] == '.' && encoding[2] == '\0'))) ||
-           strchr(encoding, '/') != NULL)
-               return (EINVAL);
-
-       /*
-        * The "C" and "POSIX" locale are always here.
-        */
-       if (strcmp(encoding, "C") == 0 || strcmp(encoding, "POSIX") == 0) {
-               _CurrentRuneLocale = &_DefaultRuneLocale;
-               __mb_cur_max = 1;
-               return (0);
-       }
+       int ret;
 
-       /*
-        * If the locale name is the same as our cache, use the cache.
-        */
-       if (CachedRuneLocale != NULL &&
-           strcmp(encoding, ctype_encoding) == 0) {
-               _CurrentRuneLocale = CachedRuneLocale;
-               __mb_cur_max = Cached__mb_cur_max;
-               return (0);
-       }
+       /* path may be NULL (actually, it's checked below) */
+
+       if (path == NULL || strlen(path) + 1 > sizeof(lt->path))
+               return(EFAULT);
+
+       rl = _findrunelocale(path);
+       if (rl)
+               return(0);
 
-       /*
-        * Slurp the locale file into the cache.
-        */
-       if (_PathLocale == NULL) {
-               char *p = getenv("PATH_LOCALE");
-
-               if (p != NULL
-#ifndef __NETBSD_SYSCALLS
-                       && !issetugid()
-#endif
-                       ) {
-                       if (strlen(p) + 1/*"/"*/ + ENCODING_LEN +
-                           1/*"/"*/ + CATEGORY_LEN >= PATH_MAX)
-                               return (ENAMETOOLONG);
-                       _PathLocale = strdup(p);
-                       if (_PathLocale == NULL)
-                               return (errno == 0 ? ENOMEM : errno);
-               } else
-                       _PathLocale = _PATH_LOCALE;
+       if ((fp = fopen(path, "r")) == NULL)
+               return(ENOENT);
+
+       if ((rl = _Read_RuneMagi(fp)) != NULL)
+               goto found;
+       /* necessary for backward compatibility */
+       if ((rl = _Read_CTypeAsRune(fp)) != NULL)
+               goto found;
+
+       fclose(fp);
+       return(EFTYPE);
+
+found:
+       fclose(fp);
+
+       rl->rl_citrus_ctype = NULL;
+       ret = _citrus_ctype_open(&rl->rl_citrus_ctype, rl->rl_encoding,
+                                rl->rl_variable, rl->rl_variable_len,
+                                _PRIVSIZE);
+       if (ret) {
+               _NukeRune(rl);
+               return(ret);
+       }
+       if (__MB_LEN_MAX_RUNTIME <
+           _citrus_ctype_get_mb_cur_max(rl->rl_citrus_ctype)) {
+               _NukeRune(rl);
+               return(EINVAL);
        }
-       /* Range checking not needed, encoding length already checked above */
-       (void) strcpy(name, _PathLocale);
-       (void) strcat(name, "/");
-       (void) strcat(name, encoding);
-       (void) strcat(name, "/LC_CTYPE");
-
-       if ((fp = fopen(name, "r")) == NULL)
-               return (errno == 0 ? ENOENT : errno);
-
-       if ((rl = _Read_RuneMagi(fp)) == NULL) {
-               saverr = (errno == 0 ? EFTYPE : errno);
-               (void)fclose(fp);
-               return (saverr);
+
+       /* register it */
+       lt = malloc(sizeof(struct localetable));
+       if (lt == NULL) {
+               _NukeRune(rl);
+               return(ENOMEM);
        }
-       (void)fclose(fp);
-
-       if (strcmp(rl->encoding, "NONE") == 0)
-               ret = _none_init(rl);
-       else if (strcmp(rl->encoding, "UTF2") == 0)
-               ret = _UTF2_init(rl);
-       else if (strcmp(rl->encoding, "UTF-8") == 0)
-               ret = _UTF8_init(rl);
-       else if (strcmp(rl->encoding, "EUC") == 0)
-               ret = _EUC_init(rl);
-       else if (strcmp(rl->encoding, "GB18030") == 0)
-               ret = _GB18030_init(rl);
-       else if (strcmp(rl->encoding, "GBK") == 0)
-               ret = _GBK_init(rl);
-       else if (strcmp(rl->encoding, "BIG5") == 0)
-               ret = _BIG5_init(rl);
-       else if (strcmp(rl->encoding, "MSKanji") == 0)
-               ret = _MSKanji_init(rl);
-       else
-               ret = EFTYPE;
-       if (ret == 0) {
-               if (CachedRuneLocale != NULL) {
-                       /* See euc.c */
-                       if (strcmp(CachedRuneLocale->encoding, "EUC") == 0)
-                               free(CachedRuneLocale->variable);
-                       free(CachedRuneLocale);
-               }
-               CachedRuneLocale = _CurrentRuneLocale;
-               Cached__mb_cur_max = __mb_cur_max;
-               (void)strcpy(ctype_encoding, encoding);
-       } else
-               free(rl);
-
-       return (ret);
+       strlcpy(lt->path, path, sizeof(lt->path));
+       lt->runelocale = rl;
+       lt->next = localetable_head;
+       localetable_head = lt;
+
+       return(0);
 }
 
+int
+_xpg4_setrunelocale(const char *encoding)
+{
+       char path[PATH_MAX];
+       _RuneLocale *rl;
+       int error;
+
+       _DIAGASSERT(encoding != NULL);
+
+       if (strcmp(encoding, "C") == 0 || strcmp(encoding, "POSIX") == 0) {
+               rl = &_DefaultRuneLocale;
+               goto found;
+       }
+
+       snprintf(path, sizeof(path), "%s/%s/LC_CTYPE", _PathLocale, encoding);
+
+       error = _newrunelocale(path);
+       if (error)
+               return(error);
+       rl = _findrunelocale(path);
+       if (!rl)
+               return(ENOENT);
+
+found:
+       _CurrentRuneLocale = rl;
+       __mb_cur_max = _citrus_ctype_get_mb_cur_max(rl->rl_citrus_ctype);
+
+       return(0);
+}
diff --git a/lib/libc/locale/table.c b/lib/libc/locale/table.c
deleted file mode 100644 (file)
index 430473e..0000000
+++ /dev/null
@@ -1,258 +0,0 @@
-/*-
- * Copyright (c) 1993
- *     The Regents of the University of California.  All rights reserved.
- *
- * This code is derived from software contributed to Berkeley by
- * Paul Borman at Krystal Technologies.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- * 3. All advertising materials mentioning features or use of this software
- *    must display the following acknowledgement:
- *     This product includes software developed by the University of
- *     California, Berkeley and its contributors.
- * 4. Neither the name of the University nor the names of its contributors
- *    may be used to endorse or promote products derived from this software
- *    without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- *
- * $FreeBSD: src/lib/libc/locale/table.c,v 1.13.2.1 2000/06/04 21:47:39 ache Exp $
- * $DragonFly: src/lib/libc/locale/Attic/table.c,v 1.4 2003/11/12 20:21:24 eirikn Exp $
- *
- * @(#)table.c 8.1 (Berkeley) 6/27/93
- */
-
-#include <ctype.h>
-#include <rune.h>
-#include <stdlib.h>
-
-extern rune_t  _none_sgetrune (const char *, size_t, char const **);
-extern int     _none_sputrune (rune_t, char *, size_t, char **);
-extern int     _none_init (char *, char **);
-
-_RuneLocale _DefaultRuneLocale = {
-    _RUNE_MAGIC_1,
-    "NONE",
-    _none_sgetrune,
-    _none_sputrune,
-    0xFFFD,
-
-    {  /*00*/  _CTYPE_C,
-               _CTYPE_C,
-               _CTYPE_C,
-               _CTYPE_C,
-               _CTYPE_C,
-               _CTYPE_C,
-               _CTYPE_C,
-               _CTYPE_C,
-       /*08*/  _CTYPE_C,
-               _CTYPE_C|_CTYPE_S|_CTYPE_B,
-               _CTYPE_C|_CTYPE_S,
-               _CTYPE_C|_CTYPE_S,
-               _CTYPE_C|_CTYPE_S,
-               _CTYPE_C|_CTYPE_S,
-               _CTYPE_C,
-               _CTYPE_C,
-       /*10*/  _CTYPE_C,
-               _CTYPE_C,
-               _CTYPE_C,
-               _CTYPE_C,
-               _CTYPE_C,
-               _CTYPE_C,
-               _CTYPE_C,
-               _CTYPE_C,
-       /*18*/  _CTYPE_C,
-               _CTYPE_C,
-               _CTYPE_C,
-               _CTYPE_C,
-               _CTYPE_C,
-               _CTYPE_C,
-               _CTYPE_C,
-               _CTYPE_C,
-       /*20*/  _CTYPE_S|_CTYPE_B|_CTYPE_R,
-               _CTYPE_P|_CTYPE_R|_CTYPE_G,
-               _CTYPE_P|_CTYPE_R|_CTYPE_G,
-               _CTYPE_P|_CTYPE_R|_CTYPE_G,
-               _CTYPE_P|_CTYPE_R|_CTYPE_G,
-               _CTYPE_P|_CTYPE_R|_CTYPE_G,
-               _CTYPE_P|_CTYPE_R|_CTYPE_G,
-               _CTYPE_P|_CTYPE_R|_CTYPE_G,
-       /*28*/  _CTYPE_P|_CTYPE_R|_CTYPE_G,
-               _CTYPE_P|_CTYPE_R|_CTYPE_G,
-               _CTYPE_P|_CTYPE_R|_CTYPE_G,
-               _CTYPE_P|_CTYPE_R|_CTYPE_G,
-               _CTYPE_P|_CTYPE_R|_CTYPE_G,
-               _CTYPE_P|_CTYPE_R|_CTYPE_G,
-               _CTYPE_P|_CTYPE_R|_CTYPE_G,
-               _CTYPE_P|_CTYPE_R|_CTYPE_G,
-       /*30*/  _CTYPE_D|_CTYPE_R|_CTYPE_G|_CTYPE_X|0,
-               _CTYPE_D|_CTYPE_R|_CTYPE_G|_CTYPE_X|1,
-               _CTYPE_D|_CTYPE_R|_CTYPE_G|_CTYPE_X|2,
-               _CTYPE_D|_CTYPE_R|_CTYPE_G|_CTYPE_X|3,
-               _CTYPE_D|_CTYPE_R|_CTYPE_G|_CTYPE_X|4,
-               _CTYPE_D|_CTYPE_R|_CTYPE_G|_CTYPE_X|5,
-               _CTYPE_D|_CTYPE_R|_CTYPE_G|_CTYPE_X|6,
-               _CTYPE_D|_CTYPE_R|_CTYPE_G|_CTYPE_X|7,
-       /*38*/  _CTYPE_D|_CTYPE_R|_CTYPE_G|_CTYPE_X|8,
-               _CTYPE_D|_CTYPE_R|_CTYPE_G|_CTYPE_X|9,
-               _CTYPE_P|_CTYPE_R|_CTYPE_G,
-               _CTYPE_P|_CTYPE_R|_CTYPE_G,
-               _CTYPE_P|_CTYPE_R|_CTYPE_G,
-               _CTYPE_P|_CTYPE_R|_CTYPE_G,
-               _CTYPE_P|_CTYPE_R|_CTYPE_G,
-               _CTYPE_P|_CTYPE_R|_CTYPE_G,
-       /*40*/  _CTYPE_P|_CTYPE_R|_CTYPE_G,
-               _CTYPE_U|_CTYPE_X|_CTYPE_R|_CTYPE_G|_CTYPE_A|10,
-               _CTYPE_U|_CTYPE_X|_CTYPE_R|_CTYPE_G|_CTYPE_A|11,
-               _CTYPE_U|_CTYPE_X|_CTYPE_R|_CTYPE_G|_CTYPE_A|12,
-               _CTYPE_U|_CTYPE_X|_CTYPE_R|_CTYPE_G|_CTYPE_A|13,
-               _CTYPE_U|_CTYPE_X|_CTYPE_R|_CTYPE_G|_CTYPE_A|14,
-               _CTYPE_U|_CTYPE_X|_CTYPE_R|_CTYPE_G|_CTYPE_A|15,
-               _CTYPE_U|_CTYPE_R|_CTYPE_G|_CTYPE_A,
-       /*48*/  _CTYPE_U|_CTYPE_R|_CTYPE_G|_CTYPE_A,
-               _CTYPE_U|_CTYPE_R|_CTYPE_G|_CTYPE_A,
-               _CTYPE_U|_CTYPE_R|_CTYPE_G|_CTYPE_A,
-               _CTYPE_U|_CTYPE_R|_CTYPE_G|_CTYPE_A,
-               _CTYPE_U|_CTYPE_R|_CTYPE_G|_CTYPE_A,
-               _CTYPE_U|_CTYPE_R|_CTYPE_G|_CTYPE_A,
-               _CTYPE_U|_CTYPE_R|_CTYPE_G|_CTYPE_A,
-               _CTYPE_U|_CTYPE_R|_CTYPE_G|_CTYPE_A,
-       /*50*/  _CTYPE_U|_CTYPE_R|_CTYPE_G|_CTYPE_A,
-               _CTYPE_U|_CTYPE_R|_CTYPE_G|_CTYPE_A,
-               _CTYPE_U|_CTYPE_R|_CTYPE_G|_CTYPE_A,
-               _CTYPE_U|_CTYPE_R|_CTYPE_G|_CTYPE_A,
-               _CTYPE_U|_CTYPE_R|_CTYPE_G|_CTYPE_A,
-               _CTYPE_U|_CTYPE_R|_CTYPE_G|_CTYPE_A,
-               _CTYPE_U|_CTYPE_R|_CTYPE_G|_CTYPE_A,
-               _CTYPE_U|_CTYPE_R|_CTYPE_G|_CTYPE_A,
-       /*58*/  _CTYPE_U|_CTYPE_R|_CTYPE_G|_CTYPE_A,
-               _CTYPE_U|_CTYPE_R|_CTYPE_G|_CTYPE_A,
-               _CTYPE_U|_CTYPE_R|_CTYPE_G|_CTYPE_A,
-               _CTYPE_P|_CTYPE_R|_CTYPE_G,
-               _CTYPE_P|_CTYPE_R|_CTYPE_G,
-               _CTYPE_P|_CTYPE_R|_CTYPE_G,
-               _CTYPE_P|_CTYPE_R|_CTYPE_G,
-               _CTYPE_P|_CTYPE_R|_CTYPE_G,
-       /*60*/  _CTYPE_P|_CTYPE_R|_CTYPE_G,
-               _CTYPE_L|_CTYPE_X|_CTYPE_R|_CTYPE_G|_CTYPE_A|10,
-               _CTYPE_L|_CTYPE_X|_CTYPE_R|_CTYPE_G|_CTYPE_A|11,
-               _CTYPE_L|_CTYPE_X|_CTYPE_R|_CTYPE_G|_CTYPE_A|12,
-               _CTYPE_L|_CTYPE_X|_CTYPE_R|_CTYPE_G|_CTYPE_A|13,
-               _CTYPE_L|_CTYPE_X|_CTYPE_R|_CTYPE_G|_CTYPE_A|14,
-               _CTYPE_L|_CTYPE_X|_CTYPE_R|_CTYPE_G|_CTYPE_A|15,
-               _CTYPE_L|_CTYPE_R|_CTYPE_G|_CTYPE_A,
-       /*68*/  _CTYPE_L|_CTYPE_R|_CTYPE_G|_CTYPE_A,
-               _CTYPE_L|_CTYPE_R|_CTYPE_G|_CTYPE_A,
-               _CTYPE_L|_CTYPE_R|_CTYPE_G|_CTYPE_A,
-               _CTYPE_L|_CTYPE_R|_CTYPE_G|_CTYPE_A,
-               _CTYPE_L|_CTYPE_R|_CTYPE_G|_CTYPE_A,
-               _CTYPE_L|_CTYPE_R|_CTYPE_G|_CTYPE_A,
-               _CTYPE_L|_CTYPE_R|_CTYPE_G|_CTYPE_A,
-               _CTYPE_L|_CTYPE_R|_CTYPE_G|_CTYPE_A,
-       /*70*/  _CTYPE_L|_CTYPE_R|_CTYPE_G|_CTYPE_A,
-               _CTYPE_L|_CTYPE_R|_CTYPE_G|_CTYPE_A,
-               _CTYPE_L|_CTYPE_R|_CTYPE_G|_CTYPE_A,
-               _CTYPE_L|_CTYPE_R|_CTYPE_G|_CTYPE_A,
-               _CTYPE_L|_CTYPE_R|_CTYPE_G|_CTYPE_A,
-               _CTYPE_L|_CTYPE_R|_CTYPE_G|_CTYPE_A,
-               _CTYPE_L|_CTYPE_R|_CTYPE_G|_CTYPE_A,
-               _CTYPE_L|_CTYPE_R|_CTYPE_G|_CTYPE_A,
-       /*78*/  _CTYPE_L|_CTYPE_R|_CTYPE_G|_CTYPE_A,
-               _CTYPE_L|_CTYPE_R|_CTYPE_G|_CTYPE_A,
-               _CTYPE_L|_CTYPE_R|_CTYPE_G|_CTYPE_A,
-               _CTYPE_P|_CTYPE_R|_CTYPE_G,
-               _CTYPE_P|_CTYPE_R|_CTYPE_G,
-               _CTYPE_P|_CTYPE_R|_CTYPE_G,
-               _CTYPE_P|_CTYPE_R|_CTYPE_G,
-               _CTYPE_C,
-    },
-    {  0x00,   0x01,   0x02,   0x03,   0x04,   0x05,   0x06,   0x07,
-       0x08,   0x09,   0x0a,   0x0b,   0x0c,   0x0d,   0x0e,   0x0f,
-       0x10,   0x11,   0x12,   0x13,   0x14,   0x15,   0x16,   0x17,
-       0x18,   0x19,   0x1a,   0x1b,   0x1c,   0x1d,   0x1e,   0x1f,
-       0x20,   0x21,   0x22,   0x23,   0x24,   0x25,   0x26,   0x27,
-       0x28,   0x29,   0x2a,   0x2b,   0x2c,   0x2d,   0x2e,   0x2f,
-       0x30,   0x31,   0x32,   0x33,   0x34,   0x35,   0x36,   0x37,
-       0x38,   0x39,   0x3a,   0x3b,   0x3c,   0x3d,   0x3e,   0x3f,
-       0x40,   'a',    'b',    'c',    'd',    'e',    'f',    'g',
-       'h',    'i',    'j',    'k',    'l',    'm',    'n',    'o',
-       'p',    'q',    'r',    's',    't',    'u',    'v',    'w',
-       'x',    'y',    'z',    0x5b,   0x5c,   0x5d,   0x5e,   0x5f,
-       0x60,   'a',    'b',    'c',    'd',    'e',    'f',    'g',
-       'h',    'i',    'j',    'k',    'l',    'm',    'n',    'o',
-       'p',    'q',    'r',    's',    't',    'u',    'v',    'w',
-       'x',    'y',    'z',    0x7b,   0x7c,   0x7d,   0x7e,   0x7f,
-       0x80,   0x81,   0x82,   0x83,   0x84,   0x85,   0x86,   0x87,
-       0x88,   0x89,   0x8a,   0x8b,   0x8c,   0x8d,   0x8e,   0x8f,
-       0x90,   0x91,   0x92,   0x93,   0x94,   0x95,   0x96,   0x97,
-       0x98,   0x99,   0x9a,   0x9b,   0x9c,   0x9d,   0x9e,   0x9f,
-       0xa0,   0xa1,   0xa2,   0xa3,   0xa4,   0xa5,   0xa6,   0xa7,
-       0xa8,   0xa9,   0xaa,   0xab,   0xac,   0xad,   0xae,   0xaf,
-       0xb0,   0xb1,   0xb2,   0xb3,   0xb4,   0xb5,   0xb6,   0xb7,
-       0xb8,   0xb9,   0xba,   0xbb,   0xbc,   0xbd,   0xbe,   0xbf,
-       0xc0,   0xc1,   0xc2,   0xc3,   0xc4,   0xc5,   0xc6,   0xc7,
-       0xc8,   0xc9,   0xca,   0xcb,   0xcc,   0xcd,   0xce,   0xcf,
-       0xd0,   0xd1,   0xd2,   0xd3,   0xd4,   0xd5,   0xd6,   0xd7,
-       0xd8,   0xd9,   0xda,   0xdb,   0xdc,   0xdd,   0xde,   0xdf,
-       0xe0,   0xe1,   0xe2,   0xe3,   0xe4,   0xe5,   0xe6,   0xe7,
-       0xe8,   0xe9,   0xea,   0xeb,   0xec,   0xed,   0xee,   0xef,
-       0xf0,   0xf1,   0xf2,   0xf3,   0xf4,   0xf5,   0xf6,   0xf7,
-       0xf8,   0xf9,   0xfa,   0xfb,   0xfc,   0xfd,   0xfe,   0xff,
-    },
-    {  0x00,   0x01,   0x02,   0x03,   0x04,   0x05,   0x06,   0x07,
-       0x08,   0x09,   0x0a,   0x0b,   0x0c,   0x0d,   0x0e,   0x0f,
-       0x10,   0x11,   0x12,   0x13,   0x14,   0x15,   0x16,   0x17,
-       0x18,   0x19,   0x1a,   0x1b,   0x1c,   0x1d,   0x1e,   0x1f,
-       0x20,   0x21,   0x22,   0x23,   0x24,   0x25,   0x26,   0x27,
-       0x28,   0x29,   0x2a,   0x2b,   0x2c,   0x2d,   0x2e,   0x2f,
-       0x30,   0x31,   0x32,   0x33,   0x34,   0x35,   0x36,   0x37,
-       0x38,   0x39,   0x3a,   0x3b,   0x3c,   0x3d,   0x3e,   0x3f,
-       0x40,   'A',    'B',    'C',    'D',    'E',    'F',    'G',
-       'H',    'I',    'J',    'K',    'L',    'M',    'N',    'O',
-       'P',    'Q',    'R',    'S',    'T',    'U',    'V',    'W',
-       'X',    'Y',    'Z',    0x5b,   0x5c,   0x5d,   0x5e,   0x5f,
-       0x60,   'A',    'B',    'C',    'D',    'E',    'F',    'G',
-       'H',    'I',    'J',    'K',    'L',    'M',    'N',    'O',
-       'P',    'Q',    'R',    'S',    'T',    'U',    'V',    'W',
-       'X',    'Y',    'Z',    0x7b,   0x7c,   0x7d,   0x7e,   0x7f,
-       0x80,   0x81,   0x82,   0x83,   0x84,   0x85,   0x86,   0x87,
-       0x88,   0x89,   0x8a,   0x8b,   0x8c,   0x8d,   0x8e,   0x8f,
-       0x90,   0x91,   0x92,   0x93,   0x94,   0x95,   0x96,   0x97,
-       0x98,   0x99,   0x9a,   0x9b,   0x9c,   0x9d,   0x9e,   0x9f,
-       0xa0,   0xa1,   0xa2,   0xa3,   0xa4,   0xa5,   0xa6,   0xa7,
-       0xa8,   0xa9,   0xaa,   0xab,   0xac,   0xad,   0xae,   0xaf,
-       0xb0,   0xb1,   0xb2,   0xb3,   0xb4,   0xb5,   0xb6,   0xb7,
-       0xb8,   0xb9,   0xba,   0xbb,   0xbc,   0xbd,   0xbe,   0xbf,
-       0xc0,   0xc1,   0xc2,   0xc3,   0xc4,   0xc5,   0xc6,   0xc7,
-       0xc8,   0xc9,   0xca,   0xcb,   0xcc,   0xcd,   0xce,   0xcf,
-       0xd0,   0xd1,   0xd2,   0xd3,   0xd4,   0xd5,   0xd6,   0xd7,
-       0xd8,   0xd9,   0xda,   0xdb,   0xdc,   0xdd,   0xde,   0xdf,
-       0xe0,   0xe1,   0xe2,   0xe3,   0xe4,   0xe5,   0xe6,   0xe7,
-       0xe8,   0xe9,   0xea,   0xeb,   0xec,   0xed,   0xee,   0xef,
-       0xf0,   0xf1,   0xf2,   0xf3,   0xf4,   0xf5,   0xf6,   0xf7,
-       0xf8,   0xf9,   0xfa,   0xfb,   0xfc,   0xfd,   0xfe,   0xff,
-    },
-};
-
-_RuneLocale *_CurrentRuneLocale = &_DefaultRuneLocale;
-
-int __mb_cur_max = 1;
-
-char   *_PathLocale;
diff --git a/lib/libc/locale/tolower.c b/lib/libc/locale/tolower.c
deleted file mode 100644 (file)
index 17324bc..0000000
+++ /dev/null
@@ -1,64 +0,0 @@
-/*-
- * Copyright (c) 1993
- *     The Regents of the University of California.  All rights reserved.
- *
- * This code is derived from software contributed to Berkeley by
- * Paul Borman at Krystal Technologies.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- * 3. All advertising materials mentioning features or use of this software
- *    must display the following acknowledgement:
- *     This product includes software developed by the University of
- *     California, Berkeley and its contributors.
- * 4. Neither the name of the University nor the names of its contributors
- *    may be used to endorse or promote products derived from this software
- *    without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- *
- * $FreeBSD: src/lib/libc/locale/tolower.c,v 1.5.8.1 2000/06/04 21:47:39 ache Exp $
- * $DragonFly: src/lib/libc/locale/Attic/tolower.c,v 1.3 2003/11/09 02:34:01 dillon Exp $
- */
-
-#include <stdio.h>
-#include <rune.h>
-#ifndef _SYS_STDINT_H_
-#include <sys/stdint.h>
-#endif
-
-__ct_rune_t
-___tolower(__ct_rune_t c)
-{
-       int x;
-       _RuneRange *rr = &_CurrentRuneLocale->maplower_ext;
-       _RuneEntry *re = rr->ranges;
-
-       if (c < 0 || c == EOF)
-               return(c);
-
-       for (x = 0; x < rr->nranges; ++x, ++re) {
-               if (c < re->min)
-                       return(c);
-               if (c <= re->max)
-                       return(re->map + c - re->min);
-       }
-
-       return(c);
-}
diff --git a/lib/libc/locale/toupper.c b/lib/libc/locale/toupper.c
deleted file mode 100644 (file)
index 2eff49f..0000000
+++ /dev/null
@@ -1,64 +0,0 @@
-/*-
- * Copyright (c) 1993
- *     The Regents of the University of California.  All rights reserved.
- *
- * This code is derived from software contributed to Berkeley by
- * Paul Borman at Krystal Technologies.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- * 3. All advertising materials mentioning features or use of this software
- *    must display the following acknowledgement:
- *     This product includes software developed by the University of
- *     California, Berkeley and its contributors.
- * 4. Neither the name of the University nor the names of its contributors
- *    may be used to endorse or promote products derived from this software
- *    without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- *
- * $FreeBSD: src/lib/libc/locale/toupper.c,v 1.5.8.1 2000/06/04 21:47:39 ache Exp $
- * $DragonFly: src/lib/libc/locale/Attic/toupper.c,v 1.3 2003/11/09 02:34:01 dillon Exp $
- */
-
-#include <stdio.h>
-#include <rune.h>
-#ifndef _SYS_STDINT_H_
-#include <sys/stdint.h>
-#endif
-
-__ct_rune_t
-___toupper(__ct_rune_t c)
-{
-       int x;
-       _RuneRange *rr = &_CurrentRuneLocale->mapupper_ext;
-       _RuneEntry *re = rr->ranges;
-
-       if (c < 0 || c == EOF)
-               return(c);
-
-       for (x = 0; x < rr->nranges; ++x, ++re) {
-               if (c < re->min)
-                       return(c);
-               if (c <= re->max)
-                       return(re->map + c - re->min);
-       }
-
-       return(c);
-}
diff --git a/lib/libc/locale/utf2.c b/lib/libc/locale/utf2.c
deleted file mode 100644 (file)
index 052f039..0000000
+++ /dev/null
@@ -1,148 +0,0 @@
-/*-
- * Copyright (c) 1993
- *     The Regents of the University of California.  All rights reserved.
- *
- * This code is derived from software contributed to Berkeley by
- * Paul Borman at Krystal Technologies.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- * 3. All advertising materials mentioning features or use of this software
- *    must display the following acknowledgement:
- *     This product includes software developed by the University of
- *     California, Berkeley and its contributors.
- * 4. Neither the name of the University nor the names of its contributors
- *    may be used to endorse or promote products derived from this software
- *    without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- *
- * $FreeBSD: src/lib/libc/locale/utf2.c,v 1.3.2.2 2001/03/05 10:27:18 obrien Exp $
- * $DragonFly: src/lib/libc/locale/Attic/utf2.c,v 1.3 2003/11/12 20:21:24 eirikn Exp $
- *
- * @(#)utf2.c  8.1 (Berkeley) 6/4/93
- */
-
-#include <rune.h>
-#include <stddef.h>
-#include <stdio.h>
-#include <stdlib.h>
-
-rune_t _UTF2_sgetrune (const char *, size_t, char const **);
-int    _UTF2_sputrune (rune_t, char *, size_t, char **);
-
-static int _utf_count[16] = {
-       1, 1, 1, 1, 1, 1, 1, 1,
-       0, 0, 0, 0, 2, 2, 3, 0,
-};
-
-int
-_UTF2_init(rl)
-       _RuneLocale *rl;
-{
-       rl->sgetrune = _UTF2_sgetrune;
-       rl->sputrune = _UTF2_sputrune;
-       _CurrentRuneLocale = rl;
-       __mb_cur_max = 3;
-       return (0);
-}
-
-rune_t
-_UTF2_sgetrune(string, n, result)
-       const char *string;
-       size_t n;
-       char const **result;
-{
-       int c;
-
-       if (n < 1 || (c = _utf_count[(*string >> 4) & 0xf]) > n) {
-               if (result)
-                       *result = string;
-               return (_INVALID_RUNE);
-       }
-       switch (c) {
-       case 1:
-               if (result)
-                       *result = string + 1;
-               return (*string & 0xff);
-       case 2:
-               if ((string[1] & 0xC0) != 0x80)
-                       goto encoding_error;
-               if (result)
-                       *result = string + 2;
-               return (((string[0] & 0x1F) << 6) | (string[1] & 0x3F));
-       case 3:
-               if ((string[1] & 0xC0) != 0x80 || (string[2] & 0xC0) != 0x80)
-                       goto encoding_error;
-               if (result)
-                       *result = string + 3;
-               return (((string[0] & 0x1F) << 12) | ((string[1] & 0x3F) << 6)
-                   | (string[2] & 0x3F));
-       default:
-encoding_error:        if (result)
-                       *result = string + 1;
-               return (_INVALID_RUNE);
-       }
-}
-
-int
-_UTF2_sputrune(c, string, n, result)
-       rune_t c;
-       char *string, **result;
-       size_t n;
-{
-       if (c & 0xF800) {
-               if (n >= 3) {
-                       if (string) {
-                               string[0] = 0xE0 | ((c >> 12) & 0x0F);
-                               string[1] = 0x80 | ((c >> 6) & 0x3F);
-                               string[2] = 0x80 | ((c) & 0x3F);
-                       }
-                       if (result)
-                               *result = string + 3;
-               } else
-                       if (result)
-                               *result = NULL;
-
-               return (3);
-       } else
-               if (c & 0x0780) {
-                       if (n >= 2) {
-                               if (string) {
-                                       string[0] = 0xC0 | ((c >> 6) & 0x1F);
-                                       string[1] = 0x80 | ((c) & 0x3F);
-                               }
-                               if (result)
-                                       *result = string + 2;
-                       } else
-                               if (result)
-                                       *result = NULL;
-                       return (2);
-               } else {
-                       if (n >= 1) {
-                               if (string)
-                                       string[0] = c;
-                               if (result)
-                                       *result = string + 1;
-                       } else
-                               if (result)
-                                       *result = NULL;
-                       return (1);
-               }
-}
diff --git a/lib/libc/locale/utf8.c b/lib/libc/locale/utf8.c
deleted file mode 100644 (file)
index 8fb3bde..0000000
+++ /dev/null
@@ -1,204 +0,0 @@
-/*-
- * Copyright (c) 2002 Tim J. Robbins
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- *
- * $FreeBSD: src/lib/libc/locale/utf8.c,v 1.1.2.1 2002/10/24 11:00:52 tjr Exp $
- * $DragonFly: src/lib/libc/locale/Attic/utf8.c,v 1.2 2003/06/17 04:26:44 dillon Exp $
- */
-
-#include <rune.h>
-#include <stddef.h>
-#include <stdio.h>
-#include <stdlib.h>
-
-rune_t _UTF8_sgetrune(const char *, size_t, char const **);
-int    _UTF8_sputrune(rune_t, char *, size_t, char **);
-
-int
-_UTF8_init(_RuneLocale *rl)
-{
-
-       rl->sgetrune = _UTF8_sgetrune;
-       rl->sputrune = _UTF8_sputrune;
-       _CurrentRuneLocale = rl;
-       __mb_cur_max = 6;
-
-       return (0);
-}
-
-rune_t
-_UTF8_sgetrune(const char *string, size_t n, const char **result)
-{
-       int ch, len, mask, siglen;
-       rune_t lbound, wch;
-
-       if (n < 1) {
-               if (result != NULL)
-                       *result = string;
-               return (_INVALID_RUNE);
-       }
-
-       /*
-        * Determine the number of octets that make up this character from
-        * the first octet, and a mask that extracts the interesting bits of
-        * the first octet.
-        *
-        * We also specify a lower bound for the character code to detect
-        * redundant, non-"shortest form" encodings. For example, the
-        * sequence C0 80 is _not_ a legal representation of the null
-        * character. This enforces a 1-to-1 mapping between character
-        * codes and their multibyte representations.
-        */
-       ch = (unsigned char)*string;
-       if ((ch & 0x80) == 0) {
-               mask = 0x7f;
-               len = 1;
-               lbound = 0;
-       } else if ((ch & 0xe0) == 0xc0) {
-               mask = 0x1f;
-               len = 2;
-               lbound = 0x80;
-       } else if ((ch & 0xf0) == 0xe0) {
-               mask = 0x0f;
-               len = 3;
-               lbound = 0x800;
-       } else if ((ch & 0xf8) == 0xf0) {
-               mask = 0x07;
-               len = 4;
-               lbound = 0x10000;
-       } else if ((ch & 0xfc) == 0xf8) {
-               mask = 0x03;
-               len = 5;
-               lbound = 0x200000;
-       } else if ((ch & 0xfc) == 0xfc) {
-               mask = 0x01;
-               len = 6;
-               lbound = 0x4000000;
-       } else {
-               /*
-                * Malformed input; input is not UTF-8.
-                */
-               if (result != NULL)
-                       *result = string + 1;
-               return (_INVALID_RUNE);
-       }
-
-       if (n < len) {
-               /*
-                * Truncated or partial input.
-                */
-               if (result != NULL)
-                       *result = string;
-               return (_INVALID_RUNE);
-       }
-
-       /*
-        * Decode the octet sequence representing the character in chunks
-        * of 6 bits, most significant first.
-        */
-       wch = (unsigned char)*string++ & mask;
-       while (--len != 0) {
-               if ((*string & 0xc0) != 0x80) {
-                       /*
-                        * Malformed input; bad characters in the middle
-                        * of a character.
-                        */
-                       wch = _INVALID_RUNE;
-                       if (result != NULL)
-                               *result = string + 1;
-                       return (_INVALID_RUNE);
-               }
-               wch <<= 6;
-               wch |= *string++ & 0x3f;
-       }
-       if (wch != _INVALID_RUNE && wch < lbound)
-               /*
-                * Malformed input; redundant encoding.
-                */
-               wch = _INVALID_RUNE;
-       if (result != NULL)
-               *result = string;
-       return (wch);
-}
-
-int
-_UTF8_sputrune(rune_t c, char *string, size_t n, char **result)
-{
-       unsigned char lead;
-       int i, len;
-
-       /*
-        * Determine the number of octets needed to represent this character.
-        * We always output the shortest sequence possible. Also specify the
-        * first few bits of the first octet, which contains the information
-        * about the sequence length.
-        */
-       if ((c & ~0x7f) == 0) {
-               lead = 0;
-               len = 1;
-       } else if ((c & ~0x7ff) == 0) {
-               lead = 0xc0;
-               len = 2;
-       } else if ((c & ~0xffff) == 0) {
-               lead = 0xe0;
-               len = 3;
-       } else if ((c & ~0x1fffff) == 0) {
-               lead = 0xf0;
-               len = 4;
-       } else if ((c & ~0x3ffffff) == 0) {
-               lead = 0xf8;
-               len = 5;
-       } else if ((c & ~0x7fffffff) == 0) {
-               lead = 0xfc;
-               len = 6;
-       } else {
-               /*
-                * Wide character code is out of range.
-                */
-               if (result != NULL)
-                       *result = NULL;
-               return (0);
-       }
-
-       if (n < len) {
-               if (result != NULL)
-                       *result = NULL;
-       } else {
-               /*
-                * Output the octets representing the character in chunks
-                * of 6 bits, least significant last. The first octet is
-                * a special case because it contains the sequence length
-                * information.
-                */
-               for (i = len - 1; i > 0; i--) {
-                       string[i] = (c & 0x3f) | 0x80;
-                       c >>= 6;
-               }
-               *string = (c & 0xff) | lead;
-               if (result != NULL)
-                       *result = string + len;
-       }
-
-       return (len);
-}
index 79b9ba8..c3745eb 100644 (file)
@@ -1,10 +1,11 @@
 #      from $NetBSD: Makefile.inc,v 1.7 1995/02/27 13:06:20 cgd Exp $
 # $FreeBSD: src/lib/libc/nls/Makefile.inc,v 1.5.2.2 2001/04/25 10:04:07 ru Exp $
-# $DragonFly: src/lib/libc/nls/Makefile.inc,v 1.2 2003/06/17 04:26:44 dillon Exp $
+# $DragonFly: src/lib/libc/nls/Makefile.inc,v 1.3 2005/04/21 16:36:34 joerg Exp $
 
+.PATH: ${.CURDIR}/../libc/iconv
 .PATH: ${.CURDIR}/../libc/nls
 
-SRCS+= msgcat.c
+SRCS+= catclose.c catgets.c catopen.c
 
 .if ${LIB} == "c"
 MAN+=  catclose.3 catgets.3 catopen.3
diff --git a/lib/libc/nls/msgcat.c b/lib/libc/nls/msgcat.c
deleted file mode 100644 (file)
index c0226e6..0000000
+++ /dev/null
@@ -1,504 +0,0 @@
-/***********************************************************
-Copyright 1990, by Alfalfa Software Incorporated, Cambridge, Massachusetts.
-
-                        All Rights Reserved
-
-Permission to use, copy, modify, and distribute this software and its
-documentation for any purpose and without fee is hereby granted,
-provided that the above copyright notice appear in all copies and that
-both that copyright notice and this permission notice appear in
-supporting documentation, and that Alfalfa's name not be used in
-advertising or publicity pertaining to distribution of the software
-without specific, written prior permission.
-
-ALPHALPHA DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING
-ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL
-ALPHALPHA BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR
-ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
-WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION,
-ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS
-SOFTWARE.
-
-If you make any modifications, bugfixes or other changes to this software
-we'd appreciate it if you could send a copy to us so we can keep things
-up-to-date.  Many thanks.
-                               Kee Hinckley
-                               Alfalfa Software, Inc.
-                               267 Allston St., #3
-                               Cambridge, MA 02139  USA
-                               nazgul@alfalfa.com
-
-******************************************************************/
-/*
- * $FreeBSD: src/lib/libc/nls/msgcat.c,v 1.21.2.6 2002/08/12 11:23:54 ache Exp $
- * $DragonFly: src/lib/libc/nls/Attic/msgcat.c,v 1.4 2005/01/31 22:29:36 dillon Exp $
- */
-
-/*
- * We need a better way of handling errors than printing text.  I need
- * to add an error handling routine.
- */
-
-#include "namespace.h"
-#include <sys/types.h>
-#include <sys/stat.h>
-#include <sys/syslimits.h>
-#include <errno.h>
-#include <fcntl.h>
-#include <locale.h>
-#include <nl_types.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <unistd.h>
-#include "un-namespace.h"
-
-#include "msgcat.h"
-#include "../locale/setlocale.h"        /* for ENCODING_LEN */
-
-#define _DEFAULT_NLS_PATH "/usr/share/nls/%L/%N.cat:/usr/share/nls/%N/%L:/usr/local/share/nls/%L/%N.cat:/usr/local/share/nls/%N/%L"
-
-#define        TRUE    1
-#define        FALSE   0
-
-#define        NLERR           ((nl_catd) -1)
-#define NLRETERR(errc)  { errno = errc; return (NLERR); }
-
-static nl_catd  loadCat();
-static int      loadSet();
-static void     __nls_free_resources();
-
-nl_catd
-catopen(name, type)
-       const char      *name;
-       int             type;
-{
-       int             spcleft, saverr;
-       char            path[PATH_MAX];
-       char            *nlspath, *lang, *base, *cptr, *pathP, *tmpptr;
-       char            *cptr1, *plang, *pter, *pcode;
-       struct stat     sbuf;
-
-       if (name == NULL || *name == '\0')
-               NLRETERR(EINVAL);
-
-       /* is it absolute path ? if yes, load immediately */
-       if (strchr(name, '/') != NULL)
-               return (loadCat(name));
-
-       if (type == NL_CAT_LOCALE)
-               lang = setlocale(LC_MESSAGES, NULL);
-       else
-               lang = getenv("LANG");
-
-       if (lang == NULL || *lang == '\0' || strlen(lang) > ENCODING_LEN ||
-           (lang[0] == '.' &&
-            (lang[1] == '\0' || (lang[1] == '.' && lang[2] == '\0'))) ||
-           strchr(lang, '/') != NULL)
-               lang = "C";
-
-       if ((plang = cptr1 = strdup(lang)) == NULL) {
-               errno = ENOMEM;
-               return (NLERR);
-       }
-       if ((cptr = strchr(cptr1, '@')) != NULL)
-               *cptr = '\0';
-       pter = pcode = "";
-       if ((cptr = strchr(cptr1, '_')) != NULL) {
-               *cptr++ = '\0';
-               pter = cptr1 = cptr;
-       }
-       if ((cptr = strchr(cptr1, '.')) != NULL) {
-               *cptr++ = '\0';
-               pcode = cptr;
-       }
-
-       if ((nlspath = getenv("NLSPATH")) == NULL
-#ifndef __NETBSD_SYSCALLS
-           || issetugid()
-#endif
-          )
-               nlspath = _DEFAULT_NLS_PATH;
-
-       if ((base = cptr = strdup(nlspath)) == NULL) {
-               free(plang);
-               errno = ENOMEM;
-               return (NLERR);
-       }
-
-       while ((nlspath = strsep(&cptr, ":")) != NULL) {
-               pathP = path;
-               if (*nlspath) {
-                       for (; *nlspath; ++nlspath) {
-                               if (*nlspath == '%') {
-                                       switch (*(nlspath + 1)) {
-                                       case 'l':
-                                               tmpptr = plang;
-                                               break;
-                                       case 't':
-                                               tmpptr = pter;
-                                               break;
-                                       case 'c':
-                                               tmpptr = pcode;
-                                               break;
-                                       case 'L':
-                                               tmpptr = lang;
-                                               break;
-                                       case 'N':
-                                               tmpptr = (char *)name;
-                                               break;
-                                       case '%':
-                                               ++nlspath;
-                                               /* fallthrough */
-                                       default:
-                                               if (pathP - path >=
-                                                   sizeof(path) - 1)
-                                                       goto too_long;
-                                               *(pathP++) = *nlspath;
-                                               continue;
-                                       }
-                                       ++nlspath;
-                       put_tmpptr:
-                                       spcleft = sizeof(path) -
-                                                 (pathP - path) - 1;
-                                       if (strlcpy(pathP, tmpptr, spcleft) >=
-                                           spcleft) {
-                               too_long:
-                                               free(plang);
-                                               free(base);
-                                               NLRETERR(ENAMETOOLONG);
-                                       }
-                                       pathP += strlen(tmpptr);
-                               } else {
-                                       if (pathP - path >= sizeof(path) - 1)
-                                               goto too_long;
-                                       *(pathP++) = *nlspath;
-                               }
-                       }
-                       *pathP = '\0';
-                       if (stat(path, &sbuf) == 0) {
-                               free(plang);
-                               free(base);
-