Commit Graph

64 Commits

Author SHA1 Message Date
joerg
bdfde3da9a Redo the locale cache to be constant. It now contains the localeconv()
data and which LC_MONETARY and LC_NUMERIC values it is derived from.
In newlocale(3) and setlocale(3), check for the existing entries and on
miss, create a new entry. This is currently not using a lock for the
list as the worst case is a small memory leak.
2013-09-13 13:13:32 +00:00
joerg
e0ac190e1e Provide explicit LC_C_LOCALE accessor and drop the various NULL checks.
Provide LC_GLOBAL_LOCALE in a way that works with all locale functions.
Merge constant data used by the initial global locale and the C locale.
Drop function call layer for _current_locale() and directly return the
locale reference, not a pointer to it. Use protected access for global
variables, so that libc references can avoid the GOT overhead.
2013-05-17 12:55:56 +00:00
joerg
81d0329e8d Make that to process PATH_LOCALE the first time _find_category is
called. Use this to implement newlocale and provide duplocale/freelocale
as well. Based on patches by Takehiko Nozaki with simplications and fix
for the init order by myself.
2013-04-30 00:45:04 +00:00
joerg
14b179f1c9 Rename struct _locale_impl_t to struct _locale, since it will end up as
locale_t later.
2013-04-14 23:30:15 +00:00
tnozaki
2f142eb3e0 don't use __link_set_* stuff for locale implementation.
patch reviewed by matt@, thanks.
2012-03-04 21:14:55 +00:00
joerg
0f5f511fae Remove code for CITRUS!=yes. 2012-01-20 16:31:29 +00:00
tnozaki
9efec5bce3 1. MB_LEN_MAX switch MD to MI.
2. unfortunately hppa's MB_LEN_MAX is defined incorrectly 6 instead of 32
   so we have to add more setlocale(3) __RENAME func, __setlocale50.
3. move setlocale1.c and setlocale32.c to lib/libc/compat/locale/*
   prepareing for next libc major crunk.
4. bump libc minor version.
2010-06-07 13:52:28 +00:00
tnozaki
c7281b0c86 fix static linking setlocale(3) problem, reported by Aran Clauson
at current-users, thanks a lot!
2009-03-09 02:22:25 +00:00
christos
461a86f9bd merge christos-time_t 2009-01-11 02:45:45 +00:00
tnozaki
52ed7b035f Fixes PR lib/39662, shortcomings in LC_{MONETARY,NUMERIC,TIME,MESSAGES} db format.
ok'ed by core and releng.
(thanks for agc@, snj@ and i'm sorry for long time patience).

[libc]
- localeio.[ch] and lc*.[ch] in src/lib/libc/locale was replaced by
  new locale-db implementation using citrus_db backend,
  see src/lib/libc/citrus/citrus_lc_*.[ch].
- add citrus_bcs_strtou?l.c. don't use strtou?l locale implementation
  internally, because they're locale-aware function.
- add some stubs for multi-locale issue, see {current,global}_locale.c.
- remove some obsolete file, setrunelocale.c, ___runetype_mb.c.
- remove __savectype() from ctypeio.[ch].

[tools]
- mklocale(1): add new option ``-t'' that generates new style
  LC_{MONETARY,NUMERIC,TIME,MESSAGES} locale-db format.
- chrtbl(1): added ctypeio.[ch] for __savectype().

[locale-db]
- added en_US.US-ASCII locale.
- removed some shareable locale definition file:
    en_US.US-ASCII -> en_US.ISO8859-1, en_US.UTF-8
    zh_CN.eucCN -> zh_CN.GB18030
    and more...see src/share/locale/*/Makefile.
- remove obsoleted locale sr_YU, added new locale sr_ME, sr_RS.
- change locale name ja_JP.ISO2022-JP* -> ja_JP.ISO-2022-JP*
  for X11's locale.alias file alignments.
- fix regression test, wrong wcs?width(3), NAN/INF usage.

i tested release-build following arch:
  i386, amd64, hpc{mips,arm,sh}, sparc64, vax.

citrus_lc_*.[ch] also can read old-plain-text style locale-db.
so that backward compatibility is keeped, but lc*.[ch] can't read
new citrus_db'ed locale-db and localeio.c never check sanity,
so forward compatibility is broken ;-<

old mklocale(1) doesn't know -t option, so you have to rebuild toolchain.
2009-01-02 00:20:18 +00:00
ginsbach
0f112a8437 The category LC_MESSAGES is already a directory possibly containing
gencat(1) generated message catalogs.  Make sure that it is handled
properly.  (I missed this previously.)

Add some additional sanity checks on the locale path as the value may
come from the envrionment.
2008-06-12 20:33:23 +00:00
ginsbach
bcd54758b8 Add support for additional locale categories: LC_MESSAGES, LC_MONETARY,
LC_NUMERIC.

The code used to load LC_TIME was refactored in to a more general routine.
This common routine is now used to load LC_TIME along with the newly added
categories.

Changes discussed with/reviewed by christos.
2008-05-17 03:49:54 +00:00
tnozaki
059d600590 1. add workaround for ctype.h is* funcs problem.
isspace((int)0xA0) should return false under LC_CTYPE=en_US.UTF-8,
   see: http://www.freebsd.org/cgi/query-pr.cgi?pr=116363&cat=gnu
2. change __runtable_to_netbsd_ctype() as reentrant.

patch ok'ed by tshiozak-san, thanks!
2007-09-29 07:55:45 +00:00
manu
7e349f87af Add support for LC_TIME, from Joachim Kuebart, through PR lib/10877 2007-03-28 19:05:47 +00:00
tnozaki
f87e6eb1f0 make "locale -a" read locale.alias file. 2006-02-16 19:19:49 +00:00
yamt
6efd91c498 constify and remove an __UNCONST. 2005-12-02 11:10:45 +00:00
christos
03256c6e55 WARNS=4 2005-11-29 03:11:58 +00:00
tshiozak
09e09c2c2c make sure CITRUS=no to work. 2004-07-21 20:27:46 +00:00
tshiozak
f1849eeaba - add support for "/force" symbol on locale.alias.
- a bit clean-up.
2004-07-21 18:51:30 +00:00
tshiozak
7b7f96b642 add prototype for load_locale_sub(). 2004-07-21 17:49:49 +00:00
tshiozak
335bc6323f add support for locale.alias file. 2004-07-21 14:18:16 +00:00
agc
eb7c1594f1 Move UCB-licensed code from 4-clause to 3-clause licence.
Patches provided by Joel Baker in PR 22280, verified by myself.
2003-08-07 16:42:00 +00:00
enami
8be6c4876d Rearrange code to avoid core dump and just return an error instead
when parsing a locale string previously returned by setlocale.
2002-08-07 04:42:42 +00:00
yamt
88a7c37398 remove a global variable "saved_categories" as it isn't necessary anymore. 2002-08-03 06:12:30 +00:00
tshiozak
0b03f5f98b remove an obstructive ?: operator of the check added in the last commit by
itojun-san.
2002-08-02 12:27:32 +00:00
itojun
73811081f9 correct use of strlcpy (really need to enforce length, so use memcpy) 2002-08-02 08:02:36 +00:00
tshiozak
19debadf5c fix a bug of setlocale when changing locales with LC_ALL for the first
argunemt and with a string containing many slashes for the second argument.
This bug may cause setlocale() to destroy static datas.

If a setuid program calls this function as 'setlocale(LC_ALL, "");',
this might be vulnerable, although there are few programs having such
vulnerability.  This bug probably affects every versions of NetBSD,
including 1.4, 1.5 and 1.6.

XXX: This part of setlocale is unseemly, thus we had better rewrite it in
the future.
2002-08-02 07:12:51 +00:00
yamt
9ddf6eb6f6 - give the precedence to LC_ALL environment variable
than other LC_* variables.
- add a hack for LC_MESSAGES for nls.
  (this will be removed when we have a real LC_MESSAGES support.)
2002-02-13 07:59:45 +00:00
yamt
9827e287a7 fix a long standing bug that setlocale(LC_ALL, NULL)
returns only 5 categories while we have 6 categories.
2002-01-22 17:08:02 +00:00
kleink
08c6392504 Need <limits.h> in _CTYPE_PRIVATE environments. 2001-04-17 20:12:31 +00:00
itojun
1aba0c48bc split setlocale.c for smaller footprint (do not pull things in too much).
have magic number check in locale modules.
rename: lib/libc/locale/setlocale_sb.c -> setlocale1.c

NOTE: this commit does not enable multibyte locale support, yet.
2001-01-25 01:25:05 +00:00
itojun
f972083e05 move __mb_cur_max to dedicated *.o, so that we do not pull in
locale stuff just by calling printf().
2001-01-22 00:29:46 +00:00
itojun
bb629fd1e5 byte default, use (non-citrus) singlebyte locale. if we compile
ld.elf_so with citrus locale, it bombs.
XXX this is shortterm workaround.  if you are willing to test citrus locale,
use RUNE=yes in libc/locale/Makefile.inc.
2000-12-25 23:30:58 +00:00
itojun
37fc5e01b9 fix LC_ALL behavior again... 2000-12-24 22:24:04 +00:00
itojun
48fa1b17ab error code check mistake in LC_CTYPE handling 2000-12-23 08:22:40 +00:00
itojun
ce0a5e58ed cope with runeglue.c failure better 2000-12-22 22:51:22 +00:00
itojun
85339e75d6 for setlocale(LC_CTYPE) failure, make sure to return NULL. 2000-12-22 22:28:09 +00:00
jdolecek
b5590faec8 previous change was not complete enough, so finish and make more correct:
for LC_ALL, return success if at least on of categories was loaded
successfully, error if no category was loaded; in the latter case, we don't
need to back off locale changes, since none happened
2000-12-22 16:50:08 +00:00
jdolecek
675dc9d35b __setlocale(): ignore errors in locale category load for LC_ALL - doing so
is not useful. This is same change as in rev 1.17.
2000-12-22 15:25:11 +00:00
itojun
c2cb892f34 handle $LANG and $LC_xx consistently (slash is forbidden). 2000-12-21 17:16:20 +00:00
itojun
408f4697a6 first import of citrus LC_CTYPE locale. singlebyte only at this moment.
shot-term TODO:
- enable multibyte locales.  this includes loadable locale modules
  (#ifdef DLRUNE).
- populate LC_CTYPE definition files.
- other functions such as iconv()
- make libc functions more friendly with multibyte.
- multilingualize other LC_xx
- torture tests

XXX don't forget to "make depend" when you rebuild libc, multibyte.c is
moved from lib/libc/stdlib to lib/libc/locale.
2000-12-21 11:29:47 +00:00
itojun
eb0bc4a58e use strlcpy to guarantee string termination 2000-12-20 11:48:58 +00:00
itojun
1545be872f on setlocale() failure, back out changes made to current_locale[],
and return NULL.  from: From: Shingo WATANABE <nabe@nabechan.org>
2000-12-20 11:44:36 +00:00
veego
ba8461727b Include <unistd.h> for the issetugid prototype.
Fix a compile problem on the alpha.
2000-09-09 20:50:33 +00:00
tshiozak
fcc188c19e Disallow '/' character in LC_* and LANG environment variable, and
prevent to look up PATH_LOCALE and NLSPATH on setuid/setgid executable.
This is important to prevent to cause some kind of security hole.
2000-09-08 20:56:36 +00:00
kleink
bc3eaa0a03 ISO/IEC 9899:1999: MB_CUR_MAX expands to a positive integer expression with
type size_t (not int).

(Incompatible ABI change, ignored due to a window of just two days.)
2000-08-10 10:03:43 +00:00
tshiozak
51a53de0d5 Preparation for the future introduction of multibyte locale.
- MB_LEN_MAX is increased to 32.
 - To ensure binary compatibility for old executables
   under multibyte locale, versioned setlocale is added.
 - __mb_len_cur definision is added in setlocale.c
   and enable it in stdlib.h .
   It is also important for multibyte locale stuffs,
   but I just forgot.
2000-08-08 22:31:13 +00:00
jdolecek
9fc25cf0bc when loading all locale categories (called with LC_ALL), ignore if
loadlocale() fails - since only LC_CTYPE is implemented and all
other categories return error, code never got to actually
load the ctype locales, as first category tried was LC_COLLATE
and it always failed
1999-10-15 17:17:07 +00:00
christos
2c89343c25 delint 1998-11-13 15:46:52 +00:00
kleink
044e791152 Declaration vs. definition consistency. 1998-10-23 09:44:34 +00:00