* libc/include/langinfo.h: New file.
* libc/include/wchar.h: Likewise. * libc/include/sys/syslimits.h: Likewise. * libc/locale/fix_grouping.c: Likewise. * libc/locale/ldpart.c: Likewise. * libc/locale/ldpart.h: Likewise. * libc/locale/lmessages.c: Likewise. * libc/locale/lmessages.h: Likewise. * libc/locale/lmonetary.c: Likewise. * libc/locale/lmonetary.h: Likewise. * libc/locale/lnumeric.c: Likewise. * libc/locale/lnumeric.h: Likewise. * libc/locale/nl_langinfo.3: Likewise. * libc/locale/nl_langinfo.c: Likewise. * libc/locale/timelocal.c: Likewise. * libc/locale/timelocal.h: Likewise. * libc/stdlib/btowc.c: Likewise. * libc/stdlib/mbrlen.c: Likewise. * libc/stdlib/mbrtowc.c: Likewise. * libc/stdlib/mbsinit.c: Likewise. * libc/stdlib/mbsrtowcs.c: Likewise. * libc/stdlib/wcrtomb.c: Likewise. * libc/stdlib/wcsrtombs.c: Likewise. * libc/stdlib/wctob.c: Likewise. * libc/sys/linux/prof-freq.c: Likewise. * libc/sys/linux/profile.c: Likewise. * libc/sys/linux/machine/i386/dl-procinfo.c: Likewise. * libc/sys/linux/machine/i386/dl-procinfo.h: Likewise. * libc/include/stdlib.h: Change re-entrant functions to take mbstate_t pointers. * libc/include/sys/_types.h: Define _mbstate_t. * libc/include/sys/config.h (MB_LEN_MAX): New macro. * libc/include/sys/errno.h (EILSEQ): New error code. * libc/include/sys/reent.h: Include wchar.h. Change reentrant structure to use mbstate_t. * libc/locale/Makefile.am (LIB_SOURCES): Add new files. * libc/machine/powerpc/vfprintf.c: Use mbstate_t. * libc/machine/powerpc/vfscanf.c: Likewise. * libc/stdio/getdelim.c: Reallocate buffer only when necessary. * libc/stdio/vfprintf.c: Likewise. * libc/stdio/vfscanf.c: Likewise. * libc/stdlib/Makefile.am (LIB_SOURCES): Add new files. * libc/stdlib/mblen.c: Use mbstate_t. * libc/stdlib/mblen_r.c: Likewise. * libc/stdlib/mbstowcs.c: Likewise. * libc/stdlib/mbstowcs_r.c: Likewise. * libc/stdlib/mbtowc.c: Likewise. * libc/stdlib/mbtowc_r.c: Likewise. * libc/stdlib/wcstombs.c: Likewise. * libc/stdlib/wcstombs_r.c: Likewise. * libc/stdlib/wctomb_r.c: Likewise. * libc/sys/linux/Makefile.am (LIB_SOURCES): Add prof-freq.c and profile.c. * libc/sys/linux/machine/i386/Makefile.am (LIB_SOURCES): Add dl-procinfo.c. * libc/sys/linux/sys/errno.h (EILSEQ): New error code. * libc/sys/linux/sys/types.h (off_t): Define type. * testsuite/newlib.locale/UTF-8.c: Change locale name from UTF-8 to C-UTF-8. * testsuite/newlib.locale/UTF-8.exp: Likewise.
This commit is contained in:
parent
1c5dcf3b0a
commit
8d9112f2f3
|
@ -1,3 +1,66 @@
|
||||||
|
2002-08-22 Thomas Fitzsimmons <fitzsim@redhat.com>
|
||||||
|
|
||||||
|
* libc/include/langinfo.h: New file.
|
||||||
|
* libc/include/wchar.h: Likewise.
|
||||||
|
* libc/include/sys/syslimits.h: Likewise.
|
||||||
|
* libc/locale/fix_grouping.c: Likewise.
|
||||||
|
* libc/locale/ldpart.c: Likewise.
|
||||||
|
* libc/locale/ldpart.h: Likewise.
|
||||||
|
* libc/locale/lmessages.c: Likewise.
|
||||||
|
* libc/locale/lmessages.h: Likewise.
|
||||||
|
* libc/locale/lmonetary.c: Likewise.
|
||||||
|
* libc/locale/lmonetary.h: Likewise.
|
||||||
|
* libc/locale/lnumeric.c: Likewise.
|
||||||
|
* libc/locale/lnumeric.h: Likewise.
|
||||||
|
* libc/locale/nl_langinfo.3: Likewise.
|
||||||
|
* libc/locale/nl_langinfo.c: Likewise.
|
||||||
|
* libc/locale/timelocal.c: Likewise.
|
||||||
|
* libc/locale/timelocal.h: Likewise.
|
||||||
|
* libc/stdlib/btowc.c: Likewise.
|
||||||
|
* libc/stdlib/mbrlen.c: Likewise.
|
||||||
|
* libc/stdlib/mbrtowc.c: Likewise.
|
||||||
|
* libc/stdlib/mbsinit.c: Likewise.
|
||||||
|
* libc/stdlib/mbsrtowcs.c: Likewise.
|
||||||
|
* libc/stdlib/wcrtomb.c: Likewise.
|
||||||
|
* libc/stdlib/wcsrtombs.c: Likewise.
|
||||||
|
* libc/stdlib/wctob.c: Likewise.
|
||||||
|
* libc/sys/linux/prof-freq.c: Likewise.
|
||||||
|
* libc/sys/linux/profile.c: Likewise.
|
||||||
|
* libc/sys/linux/machine/i386/dl-procinfo.c: Likewise.
|
||||||
|
* libc/sys/linux/machine/i386/dl-procinfo.h: Likewise.
|
||||||
|
* libc/include/stdlib.h: Change re-entrant functions to take
|
||||||
|
mbstate_t pointers.
|
||||||
|
* libc/include/sys/_types.h: Define _mbstate_t.
|
||||||
|
* libc/include/sys/config.h (MB_LEN_MAX): New macro.
|
||||||
|
* libc/include/sys/errno.h (EILSEQ): New error code.
|
||||||
|
* libc/include/sys/reent.h: Include wchar.h. Change reentrant
|
||||||
|
structure to use mbstate_t.
|
||||||
|
* libc/locale/Makefile.am (LIB_SOURCES): Add new files.
|
||||||
|
* libc/machine/powerpc/vfprintf.c: Use mbstate_t.
|
||||||
|
* libc/machine/powerpc/vfscanf.c: Likewise.
|
||||||
|
* libc/stdio/getdelim.c: Reallocate buffer only when necessary.
|
||||||
|
* libc/stdio/vfprintf.c: Likewise.
|
||||||
|
* libc/stdio/vfscanf.c: Likewise.
|
||||||
|
* libc/stdlib/Makefile.am (LIB_SOURCES): Add new files.
|
||||||
|
* libc/stdlib/mblen.c: Use mbstate_t.
|
||||||
|
* libc/stdlib/mblen_r.c: Likewise.
|
||||||
|
* libc/stdlib/mbstowcs.c: Likewise.
|
||||||
|
* libc/stdlib/mbstowcs_r.c: Likewise.
|
||||||
|
* libc/stdlib/mbtowc.c: Likewise.
|
||||||
|
* libc/stdlib/mbtowc_r.c: Likewise.
|
||||||
|
* libc/stdlib/wcstombs.c: Likewise.
|
||||||
|
* libc/stdlib/wcstombs_r.c: Likewise.
|
||||||
|
* libc/stdlib/wctomb_r.c: Likewise.
|
||||||
|
* libc/sys/linux/Makefile.am (LIB_SOURCES): Add prof-freq.c and
|
||||||
|
profile.c.
|
||||||
|
* libc/sys/linux/machine/i386/Makefile.am (LIB_SOURCES): Add
|
||||||
|
dl-procinfo.c.
|
||||||
|
* libc/sys/linux/sys/errno.h (EILSEQ): New error code.
|
||||||
|
* libc/sys/linux/sys/types.h (off_t): Define type.
|
||||||
|
* testsuite/newlib.locale/UTF-8.c: Change locale name from UTF-8
|
||||||
|
to C-UTF-8.
|
||||||
|
* testsuite/newlib.locale/UTF-8.exp: Likewise.
|
||||||
|
|
||||||
2002-08-20 Casper S. Hornstrup <chorns@users.sourceforge.net>
|
2002-08-20 Casper S. Hornstrup <chorns@users.sourceforge.net>
|
||||||
|
|
||||||
* libc/stdlib/mallocr.c: #include windows.h on Win32.
|
* libc/stdlib/mallocr.c: #include windows.h on Win32.
|
||||||
|
|
|
@ -338,6 +338,7 @@ case "${host}" in
|
||||||
##newlib_cflags="${newlib_cflags} -I`newlib-flags --kernel-dir`/include"
|
##newlib_cflags="${newlib_cflags} -I`newlib-flags --kernel-dir`/include"
|
||||||
##newlib_cflags="${newlib_cflags} -idirafter ${gcc_dir}include"
|
##newlib_cflags="${newlib_cflags} -idirafter ${gcc_dir}include"
|
||||||
;;
|
;;
|
||||||
|
|
||||||
m68hc11-*-*|m6811-*-*|m6812-*-*|m68hc12-*-*)
|
m68hc11-*-*|m6811-*-*|m6812-*-*|m68hc12-*-*)
|
||||||
;;
|
;;
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,140 @@
|
||||||
|
/*-
|
||||||
|
* 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/include/langinfo.h,v 1.5 2002/03/23 17:24:53 imp Exp $
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef _LANGINFO_H_
|
||||||
|
#define _LANGINFO_H_
|
||||||
|
|
||||||
|
#include <sys/cdefs.h>
|
||||||
|
|
||||||
|
typedef int nl_item;
|
||||||
|
|
||||||
|
/* Extract the category and item index from a constructed `nl_item' value. */
|
||||||
|
#define _NL_ITEM_CATEGORY(item) ((int) (item) >> 16)
|
||||||
|
#define _NL_ITEM_INDEX(item) ((int) (item) & 0xffff)
|
||||||
|
|
||||||
|
#define CODESET 0 /* codeset name */
|
||||||
|
#define D_T_FMT 1 /* string for formatting date and time */
|
||||||
|
#define D_FMT 2 /* date format string */
|
||||||
|
#define T_FMT 3 /* time format string */
|
||||||
|
#define T_FMT_AMPM 4 /* a.m. or p.m. time formatting string */
|
||||||
|
#define AM_STR 5 /* Ante Meridian affix */
|
||||||
|
#define PM_STR 6 /* Post Meridian affix */
|
||||||
|
|
||||||
|
/* week day names */
|
||||||
|
#define DAY_1 7
|
||||||
|
#define DAY_2 8
|
||||||
|
#define DAY_3 9
|
||||||
|
#define DAY_4 10
|
||||||
|
#define DAY_5 11
|
||||||
|
#define DAY_6 12
|
||||||
|
#define DAY_7 13
|
||||||
|
|
||||||
|
/* abbreviated week day names */
|
||||||
|
#define ABDAY_1 14
|
||||||
|
#define ABDAY_2 15
|
||||||
|
#define ABDAY_3 16
|
||||||
|
#define ABDAY_4 17
|
||||||
|
#define ABDAY_5 18
|
||||||
|
#define ABDAY_6 19
|
||||||
|
#define ABDAY_7 20
|
||||||
|
|
||||||
|
/* month names */
|
||||||
|
#define MON_1 21
|
||||||
|
#define MON_2 22
|
||||||
|
#define MON_3 23
|
||||||
|
#define MON_4 24
|
||||||
|
#define MON_5 25
|
||||||
|
#define MON_6 26
|
||||||
|
#define MON_7 27
|
||||||
|
#define MON_8 28
|
||||||
|
#define MON_9 29
|
||||||
|
#define MON_10 30
|
||||||
|
#define MON_11 31
|
||||||
|
#define MON_12 32
|
||||||
|
|
||||||
|
/* abbreviated month names */
|
||||||
|
#define ABMON_1 33
|
||||||
|
#define ABMON_2 34
|
||||||
|
#define ABMON_3 35
|
||||||
|
#define ABMON_4 36
|
||||||
|
#define ABMON_5 37
|
||||||
|
#define ABMON_6 38
|
||||||
|
#define ABMON_7 39
|
||||||
|
#define ABMON_8 40
|
||||||
|
#define ABMON_9 41
|
||||||
|
#define ABMON_10 42
|
||||||
|
#define ABMON_11 43
|
||||||
|
#define ABMON_12 44
|
||||||
|
|
||||||
|
#define ERA 45 /* era description segments */
|
||||||
|
#define ERA_D_FMT 46 /* era date format string */
|
||||||
|
#define ERA_D_T_FMT 47 /* era date and time format string */
|
||||||
|
#define ERA_T_FMT 48 /* era time format string */
|
||||||
|
#define ALT_DIGITS 49 /* alternative symbols for digits */
|
||||||
|
|
||||||
|
#define RADIXCHAR 50 /* radix char */
|
||||||
|
#define THOUSEP 51 /* separator for thousands */
|
||||||
|
|
||||||
|
#define YESEXPR 52 /* affirmative response expression */
|
||||||
|
#define NOEXPR 53 /* negative response expression */
|
||||||
|
#define YESSTR 54 /* affirmative response for yes/no queries */
|
||||||
|
#define NOSTR 55 /* negative response for yes/no queries */
|
||||||
|
|
||||||
|
#define CRNCYSTR 56 /* currency symbol */
|
||||||
|
|
||||||
|
#define D_MD_ORDER 57 /* month/day order (local extension) */
|
||||||
|
|
||||||
|
#define _NL_CTYPE_TRANSLIT_TAB_SIZE 58
|
||||||
|
#define _NL_CTYPE_TRANSLIT_FROM_IDX 59
|
||||||
|
#define _NL_CTYPE_TRANSLIT_FROM_TBL 60
|
||||||
|
#define _NL_CTYPE_TRANSLIT_TO_IDX 61
|
||||||
|
#define _NL_CTYPE_TRANSLIT_TO_TBL 62
|
||||||
|
#define _NL_CTYPE_TRANSLIT_DEFAULT_MISSING_LEN 63
|
||||||
|
#define _NL_CTYPE_TRANSLIT_DEFAULT_MISSING 64
|
||||||
|
#define _NL_CTYPE_TRANSLIT_IGNORE_LEN 65
|
||||||
|
#define _NL_CTYPE_TRANSLIT_IGNORE 66
|
||||||
|
#define _NL_CTYPE_EXTRA_MAP_1 70
|
||||||
|
#define _NL_CTYPE_EXTRA_MAP_2 71
|
||||||
|
#define _NL_CTYPE_EXTRA_MAP_3 72
|
||||||
|
#define _NL_CTYPE_EXTRA_MAP_4 73
|
||||||
|
#define _NL_CTYPE_EXTRA_MAP_5 74
|
||||||
|
#define _NL_CTYPE_EXTRA_MAP_6 75
|
||||||
|
#define _NL_CTYPE_EXTRA_MAP_7 76
|
||||||
|
#define _NL_CTYPE_EXTRA_MAP_8 77
|
||||||
|
#define _NL_CTYPE_EXTRA_MAP_9 78
|
||||||
|
#define _NL_CTYPE_EXTRA_MAP_10 79
|
||||||
|
#define _NL_CTYPE_EXTRA_MAP_11 80
|
||||||
|
#define _NL_CTYPE_EXTRA_MAP_12 81
|
||||||
|
#define _NL_CTYPE_EXTRA_MAP_13 82
|
||||||
|
#define _NL_CTYPE_EXTRA_MAP_14 83
|
||||||
|
|
||||||
|
__BEGIN_DECLS
|
||||||
|
char *nl_langinfo(nl_item);
|
||||||
|
__END_DECLS
|
||||||
|
|
||||||
|
#endif /* !_LANGINFO_H_ */
|
|
@ -72,15 +72,15 @@ long _EXFUN(labs,(long));
|
||||||
ldiv_t _EXFUN(ldiv,(long __numer, long __denom));
|
ldiv_t _EXFUN(ldiv,(long __numer, long __denom));
|
||||||
_PTR _EXFUN(malloc,(size_t __size));
|
_PTR _EXFUN(malloc,(size_t __size));
|
||||||
int _EXFUN(mblen,(const char *, size_t));
|
int _EXFUN(mblen,(const char *, size_t));
|
||||||
int _EXFUN(_mblen_r,(struct _reent *, const char *, size_t, int *));
|
int _EXFUN(_mblen_r,(struct _reent *, const char *, size_t, _mbstate_t *));
|
||||||
int _EXFUN(mbtowc,(wchar_t *, const char *, size_t));
|
int _EXFUN(mbtowc,(wchar_t *, const char *, size_t));
|
||||||
int _EXFUN(_mbtowc_r,(struct _reent *, wchar_t *, const char *, size_t, int *));
|
int _EXFUN(_mbtowc_r,(struct _reent *, wchar_t *, const char *, size_t, _mbstate_t *));
|
||||||
int _EXFUN(wctomb,(char *, wchar_t));
|
int _EXFUN(wctomb,(char *, wchar_t));
|
||||||
int _EXFUN(_wctomb_r,(struct _reent *, char *, wchar_t, int *));
|
int _EXFUN(_wctomb_r,(struct _reent *, char *, wchar_t, _mbstate_t *));
|
||||||
size_t _EXFUN(mbstowcs,(wchar_t *, const char *, size_t));
|
size_t _EXFUN(mbstowcs,(wchar_t *, const char *, size_t));
|
||||||
size_t _EXFUN(_mbstowcs_r,(struct _reent *, wchar_t *, const char *, size_t, int *));
|
size_t _EXFUN(_mbstowcs_r,(struct _reent *, wchar_t *, const char *, size_t, _mbstate_t *));
|
||||||
size_t _EXFUN(wcstombs,(char *, const wchar_t *, size_t));
|
size_t _EXFUN(wcstombs,(char *, const wchar_t *, size_t));
|
||||||
size_t _EXFUN(_wcstombs_r,(struct _reent *, char *, const wchar_t *, size_t, int *));
|
size_t _EXFUN(_wcstombs_r,(struct _reent *, char *, const wchar_t *, size_t, _mbstate_t *));
|
||||||
#ifndef __STRICT_ANSI__
|
#ifndef __STRICT_ANSI__
|
||||||
#ifndef _REENT_ONLY
|
#ifndef _REENT_ONLY
|
||||||
int _EXFUN(mkstemp,(char *));
|
int _EXFUN(mkstemp,(char *));
|
||||||
|
|
|
@ -18,4 +18,29 @@ typedef int _ssize_t;
|
||||||
typedef long _ssize_t;
|
typedef long _ssize_t;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#define __need_wint_t
|
||||||
|
#include <stddef.h>
|
||||||
|
|
||||||
|
#ifndef _MBSTATE_T
|
||||||
|
#define _MBSTATE_T
|
||||||
|
/* Conversion state information. */
|
||||||
|
typedef struct
|
||||||
|
{
|
||||||
|
int __count;
|
||||||
|
union
|
||||||
|
{
|
||||||
|
wint_t __wch;
|
||||||
|
char __wchb[4];
|
||||||
|
} __value; /* Value so far. */
|
||||||
|
} _mbstate_t;
|
||||||
|
#endif /* _MBSTATE_T */
|
||||||
|
|
||||||
|
#ifdef __CYGWIN__
|
||||||
|
# ifndef MBSTATE_T
|
||||||
|
# define MBSTATE_T
|
||||||
|
typedef _mbstate_t mbstate_t;
|
||||||
|
# endif /* MBSTATE_T */
|
||||||
|
# define WEOF (0xffffffffu)
|
||||||
|
#endif /* __CYGWIN__ */
|
||||||
|
|
||||||
#endif /* _SYS__TYPES_H */
|
#endif /* _SYS__TYPES_H */
|
||||||
|
|
|
@ -3,6 +3,10 @@
|
||||||
|
|
||||||
#include <machine/ieeefp.h> /* floating point macros */
|
#include <machine/ieeefp.h> /* floating point macros */
|
||||||
|
|
||||||
|
/* Length of longest possible multibyte sequence among all supported
|
||||||
|
locales. */
|
||||||
|
#define MB_LEN_MAX 8
|
||||||
|
|
||||||
/* exceptions first */
|
/* exceptions first */
|
||||||
#if defined(__H8300__) || defined(__H8500__) || defined (__H8300H__) || defined(__W65__) || defined (__H8300S__)
|
#if defined(__H8300__) || defined(__H8500__) || defined (__H8300H__) || defined(__W65__) || defined (__H8300S__)
|
||||||
#define __SMALL_BITFIELDS
|
#define __SMALL_BITFIELDS
|
||||||
|
|
|
@ -146,6 +146,7 @@ extern __IMPORT int sys_nerr;
|
||||||
#define ENOMEDIUM 135 /* No medium (in tape drive) */
|
#define ENOMEDIUM 135 /* No medium (in tape drive) */
|
||||||
#define ENOSHARE 136 /* No such host or network path */
|
#define ENOSHARE 136 /* No such host or network path */
|
||||||
#define ECASECLASH 137 /* Filename exists with different case */
|
#define ECASECLASH 137 /* Filename exists with different case */
|
||||||
|
#define EILSEQ 138
|
||||||
|
|
||||||
/* From cygwin32. */
|
/* From cygwin32. */
|
||||||
#define EWOULDBLOCK EAGAIN /* Operation would block */
|
#define EWOULDBLOCK EAGAIN /* Operation would block */
|
||||||
|
|
|
@ -307,9 +307,9 @@ struct _misc_reent
|
||||||
{
|
{
|
||||||
/* miscellaneous reentrant data */
|
/* miscellaneous reentrant data */
|
||||||
char *_strtok_last;
|
char *_strtok_last;
|
||||||
int _mblen_state;
|
_mbstate_t _mblen_state;
|
||||||
int _wctomb_state;
|
_mbstate_t _wctomb_state;
|
||||||
int _mbtowc_state;
|
_mbstate_t _mbtowc_state;
|
||||||
char _l64a_buf[8];
|
char _l64a_buf[8];
|
||||||
int _getdate_err;
|
int _getdate_err;
|
||||||
};
|
};
|
||||||
|
@ -463,9 +463,12 @@ struct _reent
|
||||||
#define _REENT_INIT_MISC(var) do { \
|
#define _REENT_INIT_MISC(var) do { \
|
||||||
struct _reent *_r = (var); \
|
struct _reent *_r = (var); \
|
||||||
_r->_misc->_strtok_last = _NULL; \
|
_r->_misc->_strtok_last = _NULL; \
|
||||||
_r->_misc->_mblen_state = 0; \
|
_r->_misc->_mblen_state.__count = 0; \
|
||||||
_r->_misc->_wctomb_state = 0; \
|
_r->_misc->_mblen_state.__value.__wch = 0; \
|
||||||
_r->_misc->_mbtowc_state = 0; \
|
_r->_misc->_wctomb_state.__count = 0; \
|
||||||
|
_r->_misc->_wctomb_state.__value.__wch = 0; \
|
||||||
|
_r->_misc->_mbtowc_state.__count = 0; \
|
||||||
|
_r->_misc->_mbtowc_state.__value.__wch = 0; \
|
||||||
_r->_misc->_l64a_buf[0] = '\0'; \
|
_r->_misc->_l64a_buf[0] = '\0'; \
|
||||||
_r->_misc->_getdate_err = 0; \
|
_r->_misc->_getdate_err = 0; \
|
||||||
} while (0)
|
} while (0)
|
||||||
|
@ -537,9 +540,9 @@ struct _reent
|
||||||
int _gamma_signgam;
|
int _gamma_signgam;
|
||||||
__extension__ unsigned long long _rand_next;
|
__extension__ unsigned long long _rand_next;
|
||||||
struct _rand48 _r48;
|
struct _rand48 _r48;
|
||||||
int _mblen_state;
|
_mbstate_t _mblen_state;
|
||||||
int _mbtowc_state;
|
_mbstate_t _mbtowc_state;
|
||||||
int _wctomb_state;
|
_mbstate_t _wctomb_state;
|
||||||
char _l64a_buf[8];
|
char _l64a_buf[8];
|
||||||
char _signal_buf[_REENT_SIGNAL_SIZE];
|
char _signal_buf[_REENT_SIGNAL_SIZE];
|
||||||
int _getdate_err;
|
int _getdate_err;
|
||||||
|
@ -575,7 +578,7 @@ struct _reent
|
||||||
{ 0,0,0,0,0,0,0,0}, 0, 1, \
|
{ 0,0,0,0,0,0,0,0}, 0, 1, \
|
||||||
{{_RAND48_SEED_0, _RAND48_SEED_1, _RAND48_SEED_2}, \
|
{{_RAND48_SEED_0, _RAND48_SEED_1, _RAND48_SEED_2}, \
|
||||||
{_RAND48_MULT_0, _RAND48_MULT_1, _RAND48_MULT_2}, _RAND48_ADD}, \
|
{_RAND48_MULT_0, _RAND48_MULT_1, _RAND48_MULT_2}, _RAND48_ADD}, \
|
||||||
0, 0, 0, "", "", 0} } }
|
{0, {0}}, {0, {0}}, {0, {0}}, "", "", 0} } }
|
||||||
|
|
||||||
#define _REENT_INIT_PTR(var) \
|
#define _REENT_INIT_PTR(var) \
|
||||||
{ int i; \
|
{ int i; \
|
||||||
|
@ -612,9 +615,12 @@ struct _reent
|
||||||
var->_new._reent._r48._mult[1] = _RAND48_MULT_1; \
|
var->_new._reent._r48._mult[1] = _RAND48_MULT_1; \
|
||||||
var->_new._reent._r48._mult[2] = _RAND48_MULT_2; \
|
var->_new._reent._r48._mult[2] = _RAND48_MULT_2; \
|
||||||
var->_new._reent._r48._add = _RAND48_ADD; \
|
var->_new._reent._r48._add = _RAND48_ADD; \
|
||||||
var->_new._reent._mblen_state = 0; \
|
var->_new._reent._mblen_state.__count = 0; \
|
||||||
var->_new._reent._mbtowc_state = 0; \
|
var->_new._reent._mblen_state.__value.__wch = 0; \
|
||||||
var->_new._reent._wctomb_state = 0; \
|
var->_new._reent._mbtowc_state.__count = 0; \
|
||||||
|
var->_new._reent._mbtowc_state.__value.__wch = 0; \
|
||||||
|
var->_new._reent._wctomb_state.__count = 0; \
|
||||||
|
var->_new._reent._wctomb_state.__value.__wch = 0; \
|
||||||
var->_new._reent._l64a_buf[0] = '\0'; \
|
var->_new._reent._l64a_buf[0] = '\0'; \
|
||||||
var->_new._reent._signal_buf[0] = '\0'; \
|
var->_new._reent._signal_buf[0] = '\0'; \
|
||||||
var->_new._reent._getdate_err = 0; \
|
var->_new._reent._getdate_err = 0; \
|
||||||
|
|
|
@ -0,0 +1,65 @@
|
||||||
|
/*
|
||||||
|
* Copyright (c) 1988, 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.
|
||||||
|
*
|
||||||
|
* @(#)syslimits.h 8.1 (Berkeley) 6/2/93
|
||||||
|
* $FreeBSD: src/sys/sys/syslimits.h,v 1.10 2001/06/18 20:24:54 wollman Exp $
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef _SYS_SYSLIMITS_H_
|
||||||
|
#define _SYS_SYSLIMITS_H_
|
||||||
|
|
||||||
|
#define ARG_MAX 65536 /* max bytes for an exec function */
|
||||||
|
#ifndef CHILD_MAX
|
||||||
|
#define CHILD_MAX 40 /* max simultaneous processes */
|
||||||
|
#endif
|
||||||
|
#define LINK_MAX 32767 /* max file link count */
|
||||||
|
#define MAX_CANON 255 /* max bytes in term canon input line */
|
||||||
|
#define MAX_INPUT 255 /* max bytes in terminal input */
|
||||||
|
#define NAME_MAX 255 /* max bytes in a file name */
|
||||||
|
#define NGROUPS_MAX 16 /* max supplemental group id's */
|
||||||
|
#ifndef OPEN_MAX
|
||||||
|
#define OPEN_MAX 64 /* max open files per process */
|
||||||
|
#endif
|
||||||
|
#define PATH_MAX 1024 /* max bytes in pathname */
|
||||||
|
#define PIPE_BUF 512 /* max bytes for atomic pipe writes */
|
||||||
|
#define IOV_MAX 1024 /* max elements in i/o vector */
|
||||||
|
|
||||||
|
#define BC_BASE_MAX 99 /* max ibase/obase values in bc(1) */
|
||||||
|
#define BC_DIM_MAX 2048 /* max array elements in bc(1) */
|
||||||
|
#define BC_SCALE_MAX 99 /* max scale value in bc(1) */
|
||||||
|
#define BC_STRING_MAX 1000 /* max const string length in bc(1) */
|
||||||
|
#define COLL_WEIGHTS_MAX 0 /* max weights for order keyword */
|
||||||
|
#define EXPR_NEST_MAX 32 /* max expressions nested in expr(1) */
|
||||||
|
#define LINE_MAX 2048 /* max bytes in an input line */
|
||||||
|
#define RE_DUP_MAX 255 /* max RE's in interval notation */
|
||||||
|
|
||||||
|
#endif
|
|
@ -0,0 +1,30 @@
|
||||||
|
#ifndef _WCHAR_H_
|
||||||
|
#define _WCHAR_H_
|
||||||
|
|
||||||
|
#define __need_size_t
|
||||||
|
#define __need_wchar_t
|
||||||
|
#define __need_wint_t
|
||||||
|
#include <stddef.h>
|
||||||
|
|
||||||
|
/* For _mbstate_t definition. */
|
||||||
|
#include <sys/_types.h>
|
||||||
|
|
||||||
|
#ifndef WEOF
|
||||||
|
# define WEOF (0xffffffffu)
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef MBSTATE_T
|
||||||
|
#define MBSTATE_T
|
||||||
|
typedef _mbstate_t mbstate_t;
|
||||||
|
#endif /* MBSTATE_T */
|
||||||
|
|
||||||
|
wint_t btowc (int c);
|
||||||
|
int wctob (wint_t c);
|
||||||
|
int mbsinit(const mbstate_t *ps);
|
||||||
|
size_t mbrlen(const char *s, size_t n, mbstate_t *ps);
|
||||||
|
size_t mbrtowc(wchar_t *pwc, const char *s, size_t n, mbstate_t *ps);
|
||||||
|
size_t wcrtomb(char *s, wchar_t wc, mbstate_t *ps);
|
||||||
|
size_t mbsrtowcs(wchar_t *dst, const char **src, size_t len, mbstate_t *ps);
|
||||||
|
size_t wcsrtombs(char *dst, const wchar_t **src, size_t len, mbstate_t *ps);
|
||||||
|
|
||||||
|
#endif /* _WCHAR_H_ */
|
|
@ -4,7 +4,7 @@ AUTOMAKE_OPTIONS = cygnus
|
||||||
|
|
||||||
INCLUDES = $(NEWLIB_CFLAGS) $(CROSS_CFLAGS) $(TARGET_CFLAGS)
|
INCLUDES = $(NEWLIB_CFLAGS) $(CROSS_CFLAGS) $(TARGET_CFLAGS)
|
||||||
|
|
||||||
LIB_SOURCES = locale.c
|
LIB_SOURCES = timelocal.h timelocal.c ldpart.h ldpart.c fix_grouping.c locale.c nl_langinfo.c lnumeric.h lnumeric.c lmonetary.h lmonetary.c lmessages.h lmessages.c
|
||||||
|
|
||||||
liblocale_la_LDFLAGS = -Xcompiler -nostdlib
|
liblocale_la_LDFLAGS = -Xcompiler -nostdlib
|
||||||
|
|
||||||
|
|
|
@ -110,7 +110,7 @@ AUTOMAKE_OPTIONS = cygnus
|
||||||
|
|
||||||
INCLUDES = $(NEWLIB_CFLAGS) $(CROSS_CFLAGS) $(TARGET_CFLAGS)
|
INCLUDES = $(NEWLIB_CFLAGS) $(CROSS_CFLAGS) $(TARGET_CFLAGS)
|
||||||
|
|
||||||
LIB_SOURCES = locale.c
|
LIB_SOURCES = timelocal.h timelocal.c ldpart.h ldpart.c fix_grouping.c locale.c nl_langinfo.c lnumeric.h lnumeric.c lmonetary.h lmonetary.c lmessages.h lmessages.c
|
||||||
|
|
||||||
liblocale_la_LDFLAGS = -Xcompiler -nostdlib
|
liblocale_la_LDFLAGS = -Xcompiler -nostdlib
|
||||||
|
|
||||||
|
@ -139,11 +139,16 @@ DEFS = @DEFS@ -I. -I$(srcdir)
|
||||||
CPPFLAGS = @CPPFLAGS@
|
CPPFLAGS = @CPPFLAGS@
|
||||||
LIBS = @LIBS@
|
LIBS = @LIBS@
|
||||||
lib_a_LIBADD =
|
lib_a_LIBADD =
|
||||||
@USE_LIBTOOL_FALSE@lib_a_OBJECTS = locale.$(OBJEXT)
|
@USE_LIBTOOL_FALSE@lib_a_OBJECTS = timelocal.$(OBJEXT) ldpart.$(OBJEXT) \
|
||||||
|
@USE_LIBTOOL_FALSE@fix_grouping.$(OBJEXT) locale.$(OBJEXT) \
|
||||||
|
@USE_LIBTOOL_FALSE@nl_langinfo.$(OBJEXT) lnumeric.$(OBJEXT) \
|
||||||
|
@USE_LIBTOOL_FALSE@lmonetary.$(OBJEXT) lmessages.$(OBJEXT)
|
||||||
LTLIBRARIES = $(noinst_LTLIBRARIES)
|
LTLIBRARIES = $(noinst_LTLIBRARIES)
|
||||||
|
|
||||||
liblocale_la_LIBADD =
|
liblocale_la_LIBADD =
|
||||||
@USE_LIBTOOL_TRUE@liblocale_la_OBJECTS = locale.lo
|
@USE_LIBTOOL_TRUE@liblocale_la_OBJECTS = timelocal.lo ldpart.lo \
|
||||||
|
@USE_LIBTOOL_TRUE@fix_grouping.lo locale.lo nl_langinfo.lo lnumeric.lo \
|
||||||
|
@USE_LIBTOOL_TRUE@lmonetary.lo lmessages.lo
|
||||||
CFLAGS = @CFLAGS@
|
CFLAGS = @CFLAGS@
|
||||||
COMPILE = $(CC) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
|
COMPILE = $(CC) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
|
||||||
LTCOMPILE = $(LIBTOOL) --mode=compile $(CC) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
|
LTCOMPILE = $(LIBTOOL) --mode=compile $(CC) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
|
||||||
|
|
|
@ -0,0 +1,82 @@
|
||||||
|
/*
|
||||||
|
* 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.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <sys/cdefs.h>
|
||||||
|
|
||||||
|
#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;
|
||||||
|
}
|
|
@ -0,0 +1,183 @@
|
||||||
|
/*
|
||||||
|
* 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.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <sys/cdefs.h>
|
||||||
|
|
||||||
|
#include <sys/types.h>
|
||||||
|
#include <sys/stat.h>
|
||||||
|
#include <sys/syslimits.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 *);
|
||||||
|
static void set_from_buf(const char *, int, 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) {
|
||||||
|
|
||||||
|
static char locale_buf_C[] = "C";
|
||||||
|
static int num_lines;
|
||||||
|
|
||||||
|
int fd;
|
||||||
|
char *lbuf;
|
||||||
|
char *p;
|
||||||
|
const char *plim;
|
||||||
|
char filename[PATH_MAX];
|
||||||
|
struct stat st;
|
||||||
|
size_t namesize;
|
||||||
|
size_t bufsize;
|
||||||
|
int save_using_locale;
|
||||||
|
char *nptr;
|
||||||
|
|
||||||
|
save_using_locale = *using_locale;
|
||||||
|
*using_locale = 0;
|
||||||
|
|
||||||
|
if (name == NULL)
|
||||||
|
goto no_locale;
|
||||||
|
|
||||||
|
if (!strcmp(name, "C") || !strcmp(name, "POSIX"))
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* If the locale name is the same as our cache, use the cache.
|
||||||
|
*/
|
||||||
|
lbuf = locale_buf;
|
||||||
|
if (lbuf != NULL && strcmp(name, lbuf) == 0) {
|
||||||
|
set_from_buf(lbuf, num_lines, dst_localebuf);
|
||||||
|
*using_locale = 1;
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Slurp the locale file into the cache.
|
||||||
|
*/
|
||||||
|
namesize = strlen(name) + 1;
|
||||||
|
|
||||||
|
if (!_PathLocale)
|
||||||
|
goto no_locale;
|
||||||
|
/* Range checking not needed, 'name' size is limited */
|
||||||
|
strcpy(filename, _PathLocale);
|
||||||
|
strcat(filename, "/");
|
||||||
|
strcat(filename, name);
|
||||||
|
strcat(filename, "/");
|
||||||
|
strcat(filename, category_filename);
|
||||||
|
fd = open(filename, O_RDONLY);
|
||||||
|
if (fd < 0)
|
||||||
|
goto no_locale;
|
||||||
|
if (fstat(fd, &st) != 0)
|
||||||
|
goto bad_locale;
|
||||||
|
if (st.st_size <= 0)
|
||||||
|
goto bad_locale;
|
||||||
|
bufsize = namesize + st.st_size;
|
||||||
|
locale_buf = NULL;
|
||||||
|
|
||||||
|
if (lbuf == NULL || lbuf == locale_buf_C)
|
||||||
|
{
|
||||||
|
lbuf = malloc(bufsize);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
nptr = realloc(lbuf, bufsize);
|
||||||
|
if (!nptr && lbuf)
|
||||||
|
free (lbuf);
|
||||||
|
lbuf = nptr;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (lbuf == NULL)
|
||||||
|
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;
|
||||||
|
if (close(fd) != 0)
|
||||||
|
goto bad_lbuf;
|
||||||
|
/*
|
||||||
|
* Parse the locale file into localebuf.
|
||||||
|
*/
|
||||||
|
if (plim[-1] != '\n')
|
||||||
|
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
|
||||||
|
goto reset_locale;
|
||||||
|
set_from_buf(lbuf, num_lines, dst_localebuf);
|
||||||
|
/*
|
||||||
|
* Record the successful parse in the cache.
|
||||||
|
*/
|
||||||
|
locale_buf = lbuf;
|
||||||
|
|
||||||
|
*using_locale = 1;
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
reset_locale:
|
||||||
|
locale_buf = locale_buf_C;
|
||||||
|
save_using_locale = 0;
|
||||||
|
bad_lbuf:
|
||||||
|
free(lbuf);
|
||||||
|
bad_locale:
|
||||||
|
(void)close(fd);
|
||||||
|
no_locale:
|
||||||
|
*using_locale = save_using_locale;
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
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;
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
set_from_buf(const char *p, int num_lines, const char **dst_localebuf) {
|
||||||
|
|
||||||
|
const char **ap;
|
||||||
|
int i;
|
||||||
|
|
||||||
|
for (ap = dst_localebuf, i = 0; i < num_lines; ++ap, ++i)
|
||||||
|
*ap = p += strlen(p) + 1;
|
||||||
|
}
|
||||||
|
|
|
@ -0,0 +1,35 @@
|
||||||
|
/*-
|
||||||
|
* 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.h,v 1.4 2001/12/20 18:28:52 phantom Exp $
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef _LDPART_H_
|
||||||
|
#define _LDPART_H_
|
||||||
|
|
||||||
|
int __part_load_locale(const char *, int*, char *, const char *,
|
||||||
|
int, int, const char **);
|
||||||
|
|
||||||
|
#endif /* !_LDPART_H_ */
|
|
@ -0,0 +1,89 @@
|
||||||
|
/*
|
||||||
|
* 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.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <sys/cdefs.h>
|
||||||
|
|
||||||
|
#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) {
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Propose that we can have incomplete locale file (w/o "{yes,no}str").
|
||||||
|
* Initialize them before loading. In case of complete locale, they'll
|
||||||
|
* be initialized to loaded value, otherwise they'll not be touched.
|
||||||
|
*/
|
||||||
|
_messages_locale.yesstr = empty;
|
||||||
|
_messages_locale.nostr = empty;
|
||||||
|
|
||||||
|
return __part_load_locale(name, &_messages_using_locale,
|
||||||
|
_messages_locale_buf, "LC_MESSAGES",
|
||||||
|
LCMESSAGES_SIZE_FULL, LCMESSAGES_SIZE_MIN,
|
||||||
|
(const char **)&_messages_locale);
|
||||||
|
}
|
||||||
|
|
||||||
|
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 */
|
|
@ -0,0 +1,42 @@
|
||||||
|
/*-
|
||||||
|
* 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 2001/12/20 18:28:52 phantom 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_ */
|
|
@ -0,0 +1,143 @@
|
||||||
|
/*
|
||||||
|
* 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.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <sys/cdefs.h>
|
||||||
|
|
||||||
|
#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;
|
||||||
|
__mlocale_changed = 1;
|
||||||
|
ret = __part_load_locale(name, &_monetary_using_locale,
|
||||||
|
_monetary_locale_buf, "LC_MONETARY",
|
||||||
|
LCMONETARY_SIZE, LCMONETARY_SIZE,
|
||||||
|
(const char **)&_monetary_locale);
|
||||||
|
if (ret == 0 && _monetary_using_locale) {
|
||||||
|
_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 */
|
|
@ -0,0 +1,53 @@
|
||||||
|
/*-
|
||||||
|
* 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 2001/12/20 18:28:52 phantom 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_ */
|
|
@ -0,0 +1,85 @@
|
||||||
|
/*
|
||||||
|
* 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.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <sys/cdefs.h>
|
||||||
|
|
||||||
|
#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;
|
||||||
|
|
||||||
|
__nlocale_changed = 1;
|
||||||
|
ret = __part_load_locale(name, &_numeric_using_locale,
|
||||||
|
_numeric_locale_buf, "LC_NUMERIC",
|
||||||
|
LCNUMERIC_SIZE, LCNUMERIC_SIZE,
|
||||||
|
(const char **)&_numeric_locale);
|
||||||
|
if (ret == 0 && _numeric_using_locale)
|
||||||
|
_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 */
|
|
@ -0,0 +1,41 @@
|
||||||
|
/*-
|
||||||
|
* 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 2001/12/20 18:28:52 phantom 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_ */
|
|
@ -0,0 +1,90 @@
|
||||||
|
.\" 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 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/nl_langinfo.3,v 1.4 2002/04/13 04:25:56 dd Exp $
|
||||||
|
.\"
|
||||||
|
.Dd May 3, 2001
|
||||||
|
.Dt NL_LANGINFO 3
|
||||||
|
.Os
|
||||||
|
.Sh NAME
|
||||||
|
.Nm nl_langinfo
|
||||||
|
.Nd language information
|
||||||
|
.Sh LIBRARY
|
||||||
|
.Lb libc
|
||||||
|
.Sh SYNOPSIS
|
||||||
|
.In langinfo.h
|
||||||
|
.Ft char *
|
||||||
|
.Fn nl_langinfo "nl_item item"
|
||||||
|
.Sh DESCRIPTION
|
||||||
|
The
|
||||||
|
.Fn nl_langinfo
|
||||||
|
function returns a pointer to a string containing information relevant to
|
||||||
|
the particular language or cultural area defined in the program's locale.
|
||||||
|
The manifest constant names and values of
|
||||||
|
.Fa item
|
||||||
|
are defined in
|
||||||
|
.Aq Pa langinfo.h .
|
||||||
|
.Pp
|
||||||
|
Calls to
|
||||||
|
.Fn setlocale
|
||||||
|
with a category corresponding to the category of
|
||||||
|
.Fa item ,
|
||||||
|
or to the
|
||||||
|
category
|
||||||
|
.Dv LC_ALL ,
|
||||||
|
may overwrite buffer pointed by the return value.
|
||||||
|
.Sh EXAMPLES
|
||||||
|
For example:
|
||||||
|
.Pp
|
||||||
|
.Dl nl_langinfo(ABDAY_1)
|
||||||
|
.Pp
|
||||||
|
would return a pointer to the string
|
||||||
|
.Qq Li Dom
|
||||||
|
if the identified language was
|
||||||
|
Portuguese, and
|
||||||
|
.Qq Li Sun
|
||||||
|
if the identified language was English.
|
||||||
|
.Sh RETURN VALUES
|
||||||
|
In a locale where langinfo data is not defined,
|
||||||
|
.Fn nl_langinfo
|
||||||
|
returns a pointer to the corresponding string in the
|
||||||
|
.Tn POSIX
|
||||||
|
locale.
|
||||||
|
In all locales,
|
||||||
|
.Fn nl_langinfo
|
||||||
|
returns a pointer to an empty string if
|
||||||
|
.Fa item
|
||||||
|
contains an invalid setting.
|
||||||
|
.Sh SEE ALSO
|
||||||
|
.Xr setlocale 3
|
||||||
|
.Sh STANDARDS
|
||||||
|
The
|
||||||
|
.Fn nl_langinfo
|
||||||
|
function conforms to
|
||||||
|
.St -susv2 .
|
||||||
|
.Sh HISTORY
|
||||||
|
The
|
||||||
|
.Fn nl_langinfo
|
||||||
|
function first appeared in
|
||||||
|
.Fx 4.6 .
|
|
@ -0,0 +1,213 @@
|
||||||
|
/*-
|
||||||
|
* 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.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <sys/cdefs.h>
|
||||||
|
|
||||||
|
#include <locale.h>
|
||||||
|
#include <langinfo.h>
|
||||||
|
#include <limits.h>
|
||||||
|
#include <stdlib.h>
|
||||||
|
#include <string.h>
|
||||||
|
|
||||||
|
#include "timelocal.h"
|
||||||
|
#include "lnumeric.h"
|
||||||
|
#include "lmonetary.h"
|
||||||
|
#include "lmessages.h"
|
||||||
|
|
||||||
|
#define TRANSITION_PERIOD_HACK
|
||||||
|
|
||||||
|
#define _REL(BASE) ((int)item-BASE)
|
||||||
|
|
||||||
|
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 */
|
||||||
|
char *nptr;
|
||||||
|
|
||||||
|
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);
|
||||||
|
|
||||||
|
nptr = realloc(cset, slen);
|
||||||
|
|
||||||
|
if (!nptr && cset)
|
||||||
|
free (cset);
|
||||||
|
|
||||||
|
cset = nptr;
|
||||||
|
if (cset != 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;
|
||||||
|
case D_T_FMT:
|
||||||
|
ret = (char *) __get_current_time_locale()->c_fmt;
|
||||||
|
break;
|
||||||
|
case D_FMT:
|
||||||
|
ret = (char *) __get_current_time_locale()->x_fmt;
|
||||||
|
break;
|
||||||
|
case T_FMT:
|
||||||
|
ret = (char *) __get_current_time_locale()->X_fmt;
|
||||||
|
break;
|
||||||
|
case T_FMT_AMPM:
|
||||||
|
ret = (char *) __get_current_time_locale()->ampm_fmt;
|
||||||
|
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 = "";
|
||||||
|
break;
|
||||||
|
case RADIXCHAR:
|
||||||
|
ret = (char*) __get_current_numeric_locale()->decimal_point;
|
||||||
|
break;
|
||||||
|
case THOUSEP:
|
||||||
|
ret = (char*) __get_current_numeric_locale()->thousands_sep;
|
||||||
|
break;
|
||||||
|
case YESEXPR:
|
||||||
|
ret = (char*) __get_current_messages_locale()->yesexpr;
|
||||||
|
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);
|
||||||
|
|
||||||
|
nptr = realloc(csym, clen + 2);
|
||||||
|
if (!nptr && csym)
|
||||||
|
free (csym);
|
||||||
|
|
||||||
|
csym = nptr;
|
||||||
|
|
||||||
|
if (csym != NULL) {
|
||||||
|
*csym = psn;
|
||||||
|
strcpy(csym + 1, cs);
|
||||||
|
ret = csym;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case D_MD_ORDER: /* local extension */
|
||||||
|
ret = (char *) __get_current_time_locale()->md_order;
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
ret = "";
|
||||||
|
}
|
||||||
|
return (ret);
|
||||||
|
}
|
|
@ -0,0 +1,37 @@
|
||||||
|
/*-
|
||||||
|
* 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.
|
||||||
|
*
|
||||||
|
* $FreeBSD: src/lib/libc/locale/setlocale.h,v 1.4 2001/12/20 18:28:52 phantom Exp $
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef _SETLOCALE_H_
|
||||||
|
#define _SETLOCALE_H_
|
||||||
|
|
||||||
|
#define ENCODING_LEN 31
|
||||||
|
#define CATEGORY_LEN 11
|
||||||
|
|
||||||
|
extern char *_PathLocale;
|
||||||
|
|
||||||
|
#endif /* !_SETLOCALE_H_ */
|
|
@ -0,0 +1,119 @@
|
||||||
|
/*-
|
||||||
|
* Copyright (c) 2001 Alexey Zelkin <phantom@FreeBSD.org>
|
||||||
|
* Copyright (c) 1997 FreeBSD Inc.
|
||||||
|
* 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.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <sys/cdefs.h>
|
||||||
|
|
||||||
|
#include <stddef.h>
|
||||||
|
|
||||||
|
#include "ldpart.h"
|
||||||
|
#include "timelocal.h"
|
||||||
|
|
||||||
|
static struct lc_time_T _time_locale;
|
||||||
|
static int _time_using_locale;
|
||||||
|
static char *time_locale_buf;
|
||||||
|
|
||||||
|
#define LCTIME_SIZE (sizeof(struct lc_time_T) / sizeof(char *))
|
||||||
|
|
||||||
|
static const struct lc_time_T _C_time_locale = {
|
||||||
|
{
|
||||||
|
"Jan", "Feb", "Mar", "Apr", "May", "Jun",
|
||||||
|
"Jul", "Aug", "Sep", "Oct", "Nov", "Dec"
|
||||||
|
}, {
|
||||||
|
"January", "February", "March", "April", "May", "June",
|
||||||
|
"July", "August", "September", "October", "November", "December"
|
||||||
|
}, {
|
||||||
|
"Sun", "Mon", "Tue", "Wed",
|
||||||
|
"Thu", "Fri", "Sat"
|
||||||
|
}, {
|
||||||
|
"Sunday", "Monday", "Tuesday", "Wednesday",
|
||||||
|
"Thursday", "Friday", "Saturday"
|
||||||
|
},
|
||||||
|
|
||||||
|
/* X_fmt */
|
||||||
|
"%H:%M:%S",
|
||||||
|
|
||||||
|
/*
|
||||||
|
* x_fmt
|
||||||
|
* Since the C language standard calls for
|
||||||
|
* "date, using locale's date format," anything goes.
|
||||||
|
* Using just numbers (as here) makes Quakers happier;
|
||||||
|
* it's also compatible with SVR4.
|
||||||
|
*/
|
||||||
|
"%m/%d/%y",
|
||||||
|
|
||||||
|
/*
|
||||||
|
* c_fmt
|
||||||
|
*/
|
||||||
|
"%a %b %e %H:%M:%S %Y",
|
||||||
|
|
||||||
|
/* am */
|
||||||
|
"AM",
|
||||||
|
|
||||||
|
/* pm */
|
||||||
|
"PM",
|
||||||
|
|
||||||
|
/* date_fmt */
|
||||||
|
"%a %b %e %H:%M:%S %Z %Y",
|
||||||
|
|
||||||
|
/* alt_month
|
||||||
|
* Standalone months forms for %OB
|
||||||
|
*/
|
||||||
|
{
|
||||||
|
"January", "February", "March", "April", "May", "June",
|
||||||
|
"July", "August", "September", "October", "November", "December"
|
||||||
|
},
|
||||||
|
|
||||||
|
/* md_order
|
||||||
|
* Month / day order in dates
|
||||||
|
*/
|
||||||
|
"md",
|
||||||
|
|
||||||
|
/* ampm_fmt
|
||||||
|
* To determine 12-hour clock format time (empty, if N/A)
|
||||||
|
*/
|
||||||
|
"%I:%M:%S %p"
|
||||||
|
};
|
||||||
|
|
||||||
|
struct lc_time_T *
|
||||||
|
__get_current_time_locale(void) {
|
||||||
|
return (_time_using_locale
|
||||||
|
? &_time_locale
|
||||||
|
: (struct lc_time_T *)&_C_time_locale);
|
||||||
|
}
|
||||||
|
|
||||||
|
int
|
||||||
|
__time_load_locale(const char *name) {
|
||||||
|
|
||||||
|
int ret;
|
||||||
|
|
||||||
|
ret = __part_load_locale(name, &_time_using_locale,
|
||||||
|
time_locale_buf, "LC_TIME",
|
||||||
|
LCTIME_SIZE, LCTIME_SIZE,
|
||||||
|
(const char **)&_time_locale);
|
||||||
|
|
||||||
|
return (ret);
|
||||||
|
}
|
|
@ -0,0 +1,55 @@
|
||||||
|
/*-
|
||||||
|
* Copyright (c) 1997-2002 FreeBSD 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.
|
||||||
|
*
|
||||||
|
* $FreeBSD: src/lib/libc/stdtime/timelocal.h,v 1.11 2002/01/24 15:07:44 phantom Exp $
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef _TIMELOCAL_H_
|
||||||
|
#define _TIMELOCAL_H_
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Private header file for the strftime and strptime localization
|
||||||
|
* stuff.
|
||||||
|
*/
|
||||||
|
struct lc_time_T {
|
||||||
|
const char *mon[12];
|
||||||
|
const char *month[12];
|
||||||
|
const char *wday[7];
|
||||||
|
const char *weekday[7];
|
||||||
|
const char *X_fmt;
|
||||||
|
const char *x_fmt;
|
||||||
|
const char *c_fmt;
|
||||||
|
const char *am;
|
||||||
|
const char *pm;
|
||||||
|
const char *date_fmt;
|
||||||
|
const char *alt_month[12];
|
||||||
|
const char *md_order;
|
||||||
|
const char *ampm_fmt;
|
||||||
|
};
|
||||||
|
|
||||||
|
struct lc_time_T *__get_current_time_locale(void);
|
||||||
|
int __time_load_locale(const char *);
|
||||||
|
|
||||||
|
#endif /* !_TIMELOCAL_H_ */
|
|
@ -166,6 +166,7 @@ static char *rcsid = "$Id$";
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
#include <reent.h>
|
#include <reent.h>
|
||||||
|
#include <wchar.h>
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
#ifdef __ALTIVEC__
|
#ifdef __ALTIVEC__
|
||||||
#include <altivec.h>
|
#include <altivec.h>
|
||||||
|
@ -388,7 +389,7 @@ _DEFUN (_VFPRINTF_R, (data, fp, fmt0, ap),
|
||||||
int vec_print_count; /* number of vector chunks remaining */
|
int vec_print_count; /* number of vector chunks remaining */
|
||||||
vec_16_byte_union vec_tmp;
|
vec_16_byte_union vec_tmp;
|
||||||
#endif /* __ALTIVEC__ */
|
#endif /* __ALTIVEC__ */
|
||||||
int state; /* mbtowc calls from library must not change state */
|
mbstate_t state; /* mbtowc calls from library must not change state */
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Choose PADSIZE to trade efficiency vs. size. If larger printf
|
* Choose PADSIZE to trade efficiency vs. size. If larger printf
|
||||||
|
|
|
@ -107,6 +107,7 @@ Supporting OS subroutines required:
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
#include <limits.h>
|
#include <limits.h>
|
||||||
|
#include <wchar.h>
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
#ifdef _HAVE_STDC
|
#ifdef _HAVE_STDC
|
||||||
#include <stdarg.h>
|
#include <stdarg.h>
|
||||||
|
@ -278,7 +279,7 @@ __svfscanf_r (rptr, fp, fmt0, ap)
|
||||||
vec_union vec_buf;
|
vec_union vec_buf;
|
||||||
char *lptr; /* literal pointer */
|
char *lptr; /* literal pointer */
|
||||||
#ifdef MB_CAPABLE
|
#ifdef MB_CAPABLE
|
||||||
int state; /* value to keep track of multibyte state */
|
mbstate_t state; /* value to keep track of multibyte state */
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
char *ch_dest;
|
char *ch_dest;
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
# Makefile.in generated automatically by automake 1.4-p5 from Makefile.am
|
# Makefile.in generated automatically by automake 1.4 from Makefile.am
|
||||||
|
|
||||||
# Copyright (C) 1994, 1995-8, 1999, 2001 Free Software Foundation, Inc.
|
# Copyright (C) 1994, 1995-8, 1999 Free Software Foundation, Inc.
|
||||||
# This Makefile.in is free software; the Free Software Foundation
|
# This Makefile.in is free software; the Free Software Foundation
|
||||||
# gives unlimited permission to copy and/or distribute it,
|
# gives unlimited permission to copy and/or distribute it,
|
||||||
# with or without modifications, as long as this notice is preserved.
|
# with or without modifications, as long as this notice is preserved.
|
||||||
|
|
|
@ -109,6 +109,8 @@ __getdelim (bufptr, n, delim, fp)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (cont)
|
||||||
|
{
|
||||||
/* Buffer is too small so reallocate a larger buffer. */
|
/* Buffer is too small so reallocate a larger buffer. */
|
||||||
pos = ptr - buf;
|
pos = ptr - buf;
|
||||||
newsize = (*n << 1);
|
newsize = (*n << 1);
|
||||||
|
@ -125,6 +127,7 @@ __getdelim (bufptr, n, delim, fp)
|
||||||
ptr = buf + pos;
|
ptr = buf + pos;
|
||||||
numbytes = newsize - pos;
|
numbytes = newsize - pos;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
_funlockfile (fp);
|
_funlockfile (fp);
|
||||||
|
|
||||||
|
|
|
@ -184,6 +184,8 @@ static char *rcsid = "$Id$";
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
#include <reent.h>
|
#include <reent.h>
|
||||||
|
#include <wchar.h>
|
||||||
|
#include <string.h>
|
||||||
|
|
||||||
#ifdef _HAVE_STDC
|
#ifdef _HAVE_STDC
|
||||||
#include <stdarg.h>
|
#include <stdarg.h>
|
||||||
|
@ -426,7 +428,7 @@ _DEFUN (_VFPRINTF_R, (data, fp, fmt0, ap),
|
||||||
struct __siov iov[NIOV];/* ... and individual io vectors */
|
struct __siov iov[NIOV];/* ... and individual io vectors */
|
||||||
char buf[BUF]; /* space for %c, %[diouxX], %[eEfgG] */
|
char buf[BUF]; /* space for %c, %[diouxX], %[eEfgG] */
|
||||||
char ox[2]; /* space for 0x hex-prefix */
|
char ox[2]; /* space for 0x hex-prefix */
|
||||||
int state = 0; /* mbtowc calls from library must not change state */
|
mbstate_t state; /* mbtowc calls from library must not change state */
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Choose PADSIZE to trade efficiency vs. size. If larger printf
|
* Choose PADSIZE to trade efficiency vs. size. If larger printf
|
||||||
|
@ -439,6 +441,7 @@ _DEFUN (_VFPRINTF_R, (data, fp, fmt0, ap),
|
||||||
static _CONST char zeroes[PADSIZE] =
|
static _CONST char zeroes[PADSIZE] =
|
||||||
{'0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0'};
|
{'0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0'};
|
||||||
|
|
||||||
|
memset (&state, '\0', sizeof (state));
|
||||||
/*
|
/*
|
||||||
* BEWARE, these `goto error' on error, and PAD uses `n'.
|
* BEWARE, these `goto error' on error, and PAD uses `n'.
|
||||||
*/
|
*/
|
||||||
|
@ -1367,7 +1370,7 @@ get_arg (int n, char *fmt, va_list *ap, int *numargs_p, union arg_val *args,
|
||||||
STATE state, next_state;
|
STATE state, next_state;
|
||||||
ACTION action;
|
ACTION action;
|
||||||
int pos, last_arg;
|
int pos, last_arg;
|
||||||
int wc_state = 0;
|
mbstate_t wc_state;
|
||||||
int max_pos_arg = n;
|
int max_pos_arg = n;
|
||||||
enum types { INT, LONG_INT, SHORT_INT, QUAD_INT, CHAR, CHAR_PTR, DOUBLE, LONG_DOUBLE };
|
enum types { INT, LONG_INT, SHORT_INT, QUAD_INT, CHAR, CHAR_PTR, DOUBLE, LONG_DOUBLE };
|
||||||
|
|
||||||
|
@ -1375,6 +1378,8 @@ get_arg (int n, char *fmt, va_list *ap, int *numargs_p, union arg_val *args,
|
||||||
if (*last_fmt != NULL)
|
if (*last_fmt != NULL)
|
||||||
fmt = *last_fmt;
|
fmt = *last_fmt;
|
||||||
|
|
||||||
|
memset (&wc_state, '\0', sizeof (wc_state));
|
||||||
|
|
||||||
/* we need to process either to end of fmt string or until we have actually
|
/* we need to process either to end of fmt string or until we have actually
|
||||||
read the desired parameter from the vararg list. */
|
read the desired parameter from the vararg list. */
|
||||||
while (*fmt && n >= numargs)
|
while (*fmt && n >= numargs)
|
||||||
|
|
|
@ -107,6 +107,8 @@ Supporting OS subroutines required:
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
#include <limits.h>
|
#include <limits.h>
|
||||||
|
#include <wchar.h>
|
||||||
|
#include <string.h>
|
||||||
#ifdef _HAVE_STDC
|
#ifdef _HAVE_STDC
|
||||||
#include <stdarg.h>
|
#include <stdarg.h>
|
||||||
#else
|
#else
|
||||||
|
@ -257,7 +259,7 @@ __svfscanf_r (rptr, fp, fmt0, ap)
|
||||||
char buf[BUF]; /* buffer for numeric conversions */
|
char buf[BUF]; /* buffer for numeric conversions */
|
||||||
char *lptr; /* literal pointer */
|
char *lptr; /* literal pointer */
|
||||||
#ifdef MB_CAPABLE
|
#ifdef MB_CAPABLE
|
||||||
int state = 0; /* value to keep track of multibyte state */
|
mbstate_t state; /* value to keep track of multibyte state */
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
short *sp;
|
short *sp;
|
||||||
|
@ -283,6 +285,7 @@ __svfscanf_r (rptr, fp, fmt0, ap)
|
||||||
#ifndef MB_CAPABLE
|
#ifndef MB_CAPABLE
|
||||||
wc = *fmt;
|
wc = *fmt;
|
||||||
#else
|
#else
|
||||||
|
memset (&state, '\0', sizeof (state));
|
||||||
nbytes = _mbtowc_r (rptr, &wc, fmt, MB_CUR_MAX, &state);
|
nbytes = _mbtowc_r (rptr, &wc, fmt, MB_CUR_MAX, &state);
|
||||||
#endif
|
#endif
|
||||||
fmt += nbytes;
|
fmt += nbytes;
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
# Makefile.in generated automatically by automake 1.4-p5 from Makefile.am
|
# Makefile.in generated automatically by automake 1.4 from Makefile.am
|
||||||
|
|
||||||
# Copyright (C) 1994, 1995-8, 1999, 2001 Free Software Foundation, Inc.
|
# Copyright (C) 1994, 1995-8, 1999 Free Software Foundation, Inc.
|
||||||
# This Makefile.in is free software; the Free Software Foundation
|
# This Makefile.in is free software; the Free Software Foundation
|
||||||
# gives unlimited permission to copy and/or distribute it,
|
# gives unlimited permission to copy and/or distribute it,
|
||||||
# with or without modifications, as long as this notice is preserved.
|
# with or without modifications, as long as this notice is preserved.
|
||||||
|
|
|
@ -79,7 +79,15 @@ LIB_SOURCES = \
|
||||||
wcstombs.c \
|
wcstombs.c \
|
||||||
wcstombs_r.c \
|
wcstombs_r.c \
|
||||||
wctomb.c \
|
wctomb.c \
|
||||||
wctomb_r.c
|
wctomb_r.c \
|
||||||
|
btowc.c \
|
||||||
|
mbrlen.c \
|
||||||
|
mbrtowc.c \
|
||||||
|
mbsinit.c \
|
||||||
|
mbsrtowcs.c \
|
||||||
|
wcrtomb.c \
|
||||||
|
wcsrtombs.c \
|
||||||
|
wctob.c
|
||||||
|
|
||||||
# Because of how libtool moves objects around, mallocr must be built last.
|
# Because of how libtool moves objects around, mallocr must be built last.
|
||||||
LIBADD_OBJS = freer.$(oext) reallocr.$(oext) callocr.$(oext) cfreer.$(oext) malignr.$(oext) \
|
LIBADD_OBJS = freer.$(oext) reallocr.$(oext) callocr.$(oext) cfreer.$(oext) malignr.$(oext) \
|
||||||
|
|
|
@ -185,7 +185,15 @@ LIB_SOURCES = \
|
||||||
wcstombs.c \
|
wcstombs.c \
|
||||||
wcstombs_r.c \
|
wcstombs_r.c \
|
||||||
wctomb.c \
|
wctomb.c \
|
||||||
wctomb_r.c
|
wctomb_r.c \
|
||||||
|
btowc.c \
|
||||||
|
mbrlen.c \
|
||||||
|
mbrtowc.c \
|
||||||
|
mbsinit.c \
|
||||||
|
mbsrtowcs.c \
|
||||||
|
wcrtomb.c \
|
||||||
|
wcsrtombs.c \
|
||||||
|
wctob.c
|
||||||
|
|
||||||
|
|
||||||
# Because of how libtool moves objects around, mallocr must be built last.
|
# Because of how libtool moves objects around, mallocr must be built last.
|
||||||
|
@ -294,7 +302,10 @@ LIBS = @LIBS@
|
||||||
@USE_LIBTOOL_FALSE@strtoull_r.$(OBJEXT) system.$(OBJEXT) \
|
@USE_LIBTOOL_FALSE@strtoull_r.$(OBJEXT) system.$(OBJEXT) \
|
||||||
@USE_LIBTOOL_FALSE@valloc.$(OBJEXT) wcstombs.$(OBJEXT) \
|
@USE_LIBTOOL_FALSE@valloc.$(OBJEXT) wcstombs.$(OBJEXT) \
|
||||||
@USE_LIBTOOL_FALSE@wcstombs_r.$(OBJEXT) wctomb.$(OBJEXT) \
|
@USE_LIBTOOL_FALSE@wcstombs_r.$(OBJEXT) wctomb.$(OBJEXT) \
|
||||||
@USE_LIBTOOL_FALSE@wctomb_r.$(OBJEXT)
|
@USE_LIBTOOL_FALSE@wctomb_r.$(OBJEXT) btowc.$(OBJEXT) mbrlen.$(OBJEXT) \
|
||||||
|
@USE_LIBTOOL_FALSE@mbrtowc.$(OBJEXT) mbsinit.$(OBJEXT) \
|
||||||
|
@USE_LIBTOOL_FALSE@mbsrtowcs.$(OBJEXT) wcrtomb.$(OBJEXT) \
|
||||||
|
@USE_LIBTOOL_FALSE@wcsrtombs.$(OBJEXT) wctob.$(OBJEXT)
|
||||||
LTLIBRARIES = $(noinst_LTLIBRARIES)
|
LTLIBRARIES = $(noinst_LTLIBRARIES)
|
||||||
|
|
||||||
@USE_LIBTOOL_TRUE@libstdlib_la_DEPENDENCIES = freer.$(oext) \
|
@USE_LIBTOOL_TRUE@libstdlib_la_DEPENDENCIES = freer.$(oext) \
|
||||||
|
@ -318,7 +329,8 @@ LTLIBRARIES = $(noinst_LTLIBRARIES)
|
||||||
@USE_LIBTOOL_TRUE@strtod.lo strtol.lo strtoll.lo strtoll_r.lo \
|
@USE_LIBTOOL_TRUE@strtod.lo strtol.lo strtoll.lo strtoll_r.lo \
|
||||||
@USE_LIBTOOL_TRUE@strtoul.lo strtoull.lo strtoull_r.lo system.lo \
|
@USE_LIBTOOL_TRUE@strtoul.lo strtoull.lo strtoull_r.lo system.lo \
|
||||||
@USE_LIBTOOL_TRUE@valloc.lo wcstombs.lo wcstombs_r.lo wctomb.lo \
|
@USE_LIBTOOL_TRUE@valloc.lo wcstombs.lo wcstombs_r.lo wctomb.lo \
|
||||||
@USE_LIBTOOL_TRUE@wctomb_r.lo
|
@USE_LIBTOOL_TRUE@wctomb_r.lo btowc.lo mbrlen.lo mbrtowc.lo mbsinit.lo \
|
||||||
|
@USE_LIBTOOL_TRUE@mbsrtowcs.lo wcrtomb.lo wcsrtombs.lo wctob.lo
|
||||||
CFLAGS = @CFLAGS@
|
CFLAGS = @CFLAGS@
|
||||||
COMPILE = $(CC) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
|
COMPILE = $(CC) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
|
||||||
LTCOMPILE = $(LIBTOOL) --mode=compile $(CC) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
|
LTCOMPILE = $(LIBTOOL) --mode=compile $(CC) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
|
||||||
|
|
|
@ -0,0 +1,27 @@
|
||||||
|
#include <wchar.h>
|
||||||
|
#include <stdlib.h>
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <reent.h>
|
||||||
|
|
||||||
|
wint_t
|
||||||
|
btowc (int c)
|
||||||
|
{
|
||||||
|
mbstate_t mbs;
|
||||||
|
int retval = 0;
|
||||||
|
wchar_t pwc;
|
||||||
|
unsigned char b;
|
||||||
|
|
||||||
|
b = (unsigned char)c;
|
||||||
|
|
||||||
|
/* Put mbs in initial state. */
|
||||||
|
memset (&mbs, '\0', sizeof (mbs));
|
||||||
|
|
||||||
|
_REENT_CHECK_MISC(_REENT);
|
||||||
|
|
||||||
|
retval = _mbtowc_r (_REENT, &pwc, &b, 1, &mbs);
|
||||||
|
|
||||||
|
if (c == EOF || retval != 1)
|
||||||
|
return WEOF;
|
||||||
|
else
|
||||||
|
return (wint_t)pwc;
|
||||||
|
}
|
|
@ -44,6 +44,7 @@ effects vary with the locale.
|
||||||
#ifndef _REENT_ONLY
|
#ifndef _REENT_ONLY
|
||||||
|
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
|
#include <wchar.h>
|
||||||
|
|
||||||
int
|
int
|
||||||
_DEFUN (mblen, (s, n),
|
_DEFUN (mblen, (s, n),
|
||||||
|
@ -51,9 +52,15 @@ _DEFUN (mblen, (s, n),
|
||||||
size_t n)
|
size_t n)
|
||||||
{
|
{
|
||||||
#ifdef MB_CAPABLE
|
#ifdef MB_CAPABLE
|
||||||
|
int retval = 0;
|
||||||
_REENT_CHECK_MISC(_REENT);
|
_REENT_CHECK_MISC(_REENT);
|
||||||
|
|
||||||
return _mbtowc_r (_REENT, NULL, s, n, &(_REENT_MBLEN_STATE(_REENT)));
|
retval = _mbtowc_r (_REENT, NULL, s, n, &(_REENT_MBLEN_STATE(_REENT)));
|
||||||
|
if (retval < 0)
|
||||||
|
return -1;
|
||||||
|
else
|
||||||
|
return retval;
|
||||||
|
|
||||||
#else /* not MB_CAPABLE */
|
#else /* not MB_CAPABLE */
|
||||||
if (s == NULL || *s == '\0')
|
if (s == NULL || *s == '\0')
|
||||||
return 0;
|
return 0;
|
||||||
|
|
|
@ -44,13 +44,14 @@ effects vary with the locale.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
|
#include <wchar.h>
|
||||||
|
|
||||||
int
|
int
|
||||||
_DEFUN (_mblen_r, (r, s, n, state),
|
_DEFUN (_mblen_r, (r, s, n, state),
|
||||||
struct _reent *r _AND
|
struct _reent *r _AND
|
||||||
const char *s _AND
|
const char *s _AND
|
||||||
size_t n _AND
|
size_t n _AND
|
||||||
int *state)
|
mbstate_t *state)
|
||||||
{
|
{
|
||||||
#ifdef MB_CAPABLE
|
#ifdef MB_CAPABLE
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,13 @@
|
||||||
|
#include <wchar.h>
|
||||||
|
#include <stdlib.h>
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <reent.h>
|
||||||
|
#include <errno.h>
|
||||||
|
|
||||||
|
size_t
|
||||||
|
mbrlen(const char *s, size_t n, mbstate_t *ps)
|
||||||
|
{
|
||||||
|
mbstate_t internal;
|
||||||
|
|
||||||
|
return mbrtowc(NULL, s, n, ps != NULL ? ps : &internal);
|
||||||
|
}
|
|
@ -0,0 +1,29 @@
|
||||||
|
#include <wchar.h>
|
||||||
|
#include <stdlib.h>
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <reent.h>
|
||||||
|
#include <errno.h>
|
||||||
|
#include <string.h>
|
||||||
|
|
||||||
|
size_t
|
||||||
|
mbrtowc(wchar_t *pwc, const char *s, size_t n, mbstate_t *ps)
|
||||||
|
{
|
||||||
|
int retval = 0;
|
||||||
|
_REENT_CHECK_MISC(_REENT);
|
||||||
|
|
||||||
|
if (s == NULL)
|
||||||
|
retval = _mbtowc_r (_REENT, pwc, "", 1, ps);
|
||||||
|
else
|
||||||
|
retval = _mbtowc_r (_REENT, pwc, s, n, ps);
|
||||||
|
|
||||||
|
if (*pwc == NULL)
|
||||||
|
memset (ps, '\0', sizeof (mbstate_t));
|
||||||
|
|
||||||
|
if (retval == -1)
|
||||||
|
{
|
||||||
|
_REENT->_errno = EILSEQ;
|
||||||
|
return (size_t)(-1);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
return (size_t)retval;
|
||||||
|
}
|
|
@ -0,0 +1,14 @@
|
||||||
|
#include <wchar.h>
|
||||||
|
#include <stdlib.h>
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <reent.h>
|
||||||
|
#include <errno.h>
|
||||||
|
|
||||||
|
int
|
||||||
|
mbsinit(const mbstate_t *ps)
|
||||||
|
{
|
||||||
|
if (ps == NULL || ps->__count == 0)
|
||||||
|
return 1;
|
||||||
|
else
|
||||||
|
return 0;
|
||||||
|
}
|
|
@ -0,0 +1,24 @@
|
||||||
|
#include <wchar.h>
|
||||||
|
#include <stdlib.h>
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <reent.h>
|
||||||
|
#include <errno.h>
|
||||||
|
|
||||||
|
size_t
|
||||||
|
mbsrtowcs(wchar_t *dst, const char **src, size_t len, mbstate_t *ps)
|
||||||
|
{
|
||||||
|
int retval = 0;
|
||||||
|
mbstate_t internal;
|
||||||
|
|
||||||
|
_REENT_CHECK_MISC(_REENT);
|
||||||
|
|
||||||
|
retval = _mbstowcs_r (_REENT, dst, *src, len, ps != NULL ? ps : &internal);
|
||||||
|
|
||||||
|
if (retval == -1)
|
||||||
|
{
|
||||||
|
_REENT->_errno = EILSEQ;
|
||||||
|
return (size_t)(-1);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
return (size_t)retval;
|
||||||
|
}
|
|
@ -50,6 +50,7 @@ effects vary with the locale.
|
||||||
#ifndef _REENT_ONLY
|
#ifndef _REENT_ONLY
|
||||||
|
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
|
#include <wchar.h>
|
||||||
|
|
||||||
size_t
|
size_t
|
||||||
_DEFUN (mbstowcs, (pwcs, s, n),
|
_DEFUN (mbstowcs, (pwcs, s, n),
|
||||||
|
@ -58,7 +59,8 @@ _DEFUN (mbstowcs, (pwcs, s, n),
|
||||||
size_t n)
|
size_t n)
|
||||||
{
|
{
|
||||||
#ifdef MB_CAPABLE
|
#ifdef MB_CAPABLE
|
||||||
int state = 0;
|
mbstate_t state;
|
||||||
|
state.__count = 0;
|
||||||
|
|
||||||
return _mbstowcs_r (_REENT, pwcs, s, n, &state);
|
return _mbstowcs_r (_REENT, pwcs, s, n, &state);
|
||||||
#else /* not MB_CAPABLE */
|
#else /* not MB_CAPABLE */
|
||||||
|
|
|
@ -1,4 +1,5 @@
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
|
#include <wchar.h>
|
||||||
|
|
||||||
size_t
|
size_t
|
||||||
_DEFUN (_mbstowcs_r, (reent, pwcs, s, n, state),
|
_DEFUN (_mbstowcs_r, (reent, pwcs, s, n, state),
|
||||||
|
@ -6,7 +7,7 @@ _DEFUN (_mbstowcs_r, (reent, pwcs, s, n, state),
|
||||||
wchar_t *pwcs _AND
|
wchar_t *pwcs _AND
|
||||||
const char *s _AND
|
const char *s _AND
|
||||||
size_t n _AND
|
size_t n _AND
|
||||||
int *state)
|
mbstate_t *state)
|
||||||
{
|
{
|
||||||
wchar_t *ptr = pwcs;
|
wchar_t *ptr = pwcs;
|
||||||
size_t max = n;
|
size_t max = n;
|
||||||
|
@ -16,7 +17,7 @@ _DEFUN (_mbstowcs_r, (reent, pwcs, s, n, state),
|
||||||
while (n > 0)
|
while (n > 0)
|
||||||
{
|
{
|
||||||
bytes = _mbtowc_r (r, ptr, t, MB_CUR_MAX, state);
|
bytes = _mbtowc_r (r, ptr, t, MB_CUR_MAX, state);
|
||||||
if (bytes == -1)
|
if (bytes < 0)
|
||||||
return -1;
|
return -1;
|
||||||
else if (bytes == 0)
|
else if (bytes == 0)
|
||||||
return ptr - pwcs;
|
return ptr - pwcs;
|
||||||
|
|
|
@ -60,9 +60,15 @@ _DEFUN (mbtowc, (pwc, s, n),
|
||||||
size_t n)
|
size_t n)
|
||||||
{
|
{
|
||||||
#ifdef MB_CAPABLE
|
#ifdef MB_CAPABLE
|
||||||
|
int retval = 0;
|
||||||
_REENT_CHECK_MISC(_REENT);
|
_REENT_CHECK_MISC(_REENT);
|
||||||
|
|
||||||
return _mbtowc_r (_REENT, pwc, s, n, &(_REENT_MBTOWC_STATE(_REENT)));
|
retval = _mbtowc_r (_REENT, pwc, s, n, &(_REENT_MBTOWC_STATE(_REENT)));
|
||||||
|
|
||||||
|
if (retval < 0)
|
||||||
|
return -1;
|
||||||
|
else
|
||||||
|
return retval;
|
||||||
#else /* not MB_CAPABLE */
|
#else /* not MB_CAPABLE */
|
||||||
if (s == NULL)
|
if (s == NULL)
|
||||||
return 0;
|
return 0;
|
||||||
|
|
|
@ -1,6 +1,8 @@
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
#include <locale.h>
|
#include <locale.h>
|
||||||
#include "mbctype.h"
|
#include "mbctype.h"
|
||||||
|
#include <wchar.h>
|
||||||
|
#include <string.h>
|
||||||
|
|
||||||
#ifdef MB_CAPABLE
|
#ifdef MB_CAPABLE
|
||||||
typedef enum { ESCAPE, DOLLAR, BRACKET, AT, B, J,
|
typedef enum { ESCAPE, DOLLAR, BRACKET, AT, B, J,
|
||||||
|
@ -51,7 +53,7 @@ _DEFUN (_mbtowc_r, (r, pwc, s, n, state),
|
||||||
wchar_t *pwc _AND
|
wchar_t *pwc _AND
|
||||||
const char *s _AND
|
const char *s _AND
|
||||||
size_t n _AND
|
size_t n _AND
|
||||||
int *state)
|
mbstate_t *state)
|
||||||
{
|
{
|
||||||
wchar_t dummy;
|
wchar_t dummy;
|
||||||
unsigned char *t = (unsigned char *)s;
|
unsigned char *t = (unsigned char *)s;
|
||||||
|
@ -60,13 +62,13 @@ _DEFUN (_mbtowc_r, (r, pwc, s, n, state),
|
||||||
pwc = &dummy;
|
pwc = &dummy;
|
||||||
|
|
||||||
if (s != NULL && n == 0)
|
if (s != NULL && n == 0)
|
||||||
return -1;
|
return -2;
|
||||||
|
|
||||||
#ifdef MB_CAPABLE
|
#ifdef MB_CAPABLE
|
||||||
if (r->_current_locale == NULL ||
|
if (r->_current_locale == NULL ||
|
||||||
(strlen (r->_current_locale) <= 1))
|
(strlen (r->_current_locale) <= 1))
|
||||||
{ /* fall-through */ }
|
{ /* fall-through */ }
|
||||||
else if (!strcmp (r->_current_locale, "UTF-8"))
|
else if (!strcmp (r->_current_locale, "C-UTF-8"))
|
||||||
{
|
{
|
||||||
wchar_t char1 = 0;
|
wchar_t char1 = 0;
|
||||||
|
|
||||||
|
@ -139,7 +141,7 @@ _DEFUN (_mbtowc_r, (r, pwc, s, n, state),
|
||||||
return 3;
|
return 3;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
return -1;
|
return -2;
|
||||||
}
|
}
|
||||||
else if (char1 >= 0xf0 && char1 <= 0xf7)
|
else if (char1 >= 0xf0 && char1 <= 0xf7)
|
||||||
{
|
{
|
||||||
|
@ -172,7 +174,7 @@ _DEFUN (_mbtowc_r, (r, pwc, s, n, state),
|
||||||
return 4;
|
return 4;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
return -1;
|
return -2;
|
||||||
}
|
}
|
||||||
else if (char1 >= 0xf8 && char1 <= 0xfb)
|
else if (char1 >= 0xf8 && char1 <= 0xfb)
|
||||||
{
|
{
|
||||||
|
@ -208,7 +210,7 @@ _DEFUN (_mbtowc_r, (r, pwc, s, n, state),
|
||||||
return 5;
|
return 5;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
return -1;
|
return -2;
|
||||||
}
|
}
|
||||||
else if (char1 >= 0xfc && char1 <= 0xfd)
|
else if (char1 >= 0xfc && char1 <= 0xfd)
|
||||||
{
|
{
|
||||||
|
@ -248,7 +250,7 @@ _DEFUN (_mbtowc_r, (r, pwc, s, n, state),
|
||||||
return 6;
|
return 6;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
return -1;
|
return -2;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
return -1;
|
return -1;
|
||||||
|
@ -263,7 +265,7 @@ _DEFUN (_mbtowc_r, (r, pwc, s, n, state),
|
||||||
{
|
{
|
||||||
int char2 = t[1];
|
int char2 = t[1];
|
||||||
if (n <= 1)
|
if (n <= 1)
|
||||||
return -1;
|
return -2;
|
||||||
if (_issjis2 (char2))
|
if (_issjis2 (char2))
|
||||||
{
|
{
|
||||||
*pwc = (((wchar_t)*t) << 8) + (wchar_t)(*(t+1));
|
*pwc = (((wchar_t)*t) << 8) + (wchar_t)(*(t+1));
|
||||||
|
@ -283,7 +285,7 @@ _DEFUN (_mbtowc_r, (r, pwc, s, n, state),
|
||||||
{
|
{
|
||||||
int char2 = t[1];
|
int char2 = t[1];
|
||||||
if (n <= 1)
|
if (n <= 1)
|
||||||
return -1;
|
return -2;
|
||||||
if (_iseucjp (char2))
|
if (_iseucjp (char2))
|
||||||
{
|
{
|
||||||
*pwc = (((wchar_t)*t) << 8) + (wchar_t)(*(t+1));
|
*pwc = (((wchar_t)*t) << 8) + (wchar_t)(*(t+1));
|
||||||
|
@ -303,11 +305,11 @@ _DEFUN (_mbtowc_r, (r, pwc, s, n, state),
|
||||||
|
|
||||||
if (s == NULL)
|
if (s == NULL)
|
||||||
{
|
{
|
||||||
*state = 0;
|
state->__count = 0;
|
||||||
return 1; /* state-dependent */
|
return 1; /* state-dependent */
|
||||||
}
|
}
|
||||||
|
|
||||||
curr_state = (*state == 0 ? ASCII : JIS);
|
curr_state = (state->__count == 0 ? ASCII : JIS);
|
||||||
ptr = t;
|
ptr = t;
|
||||||
|
|
||||||
for (i = 0; i < n; ++i)
|
for (i = 0; i < n; ++i)
|
||||||
|
@ -351,19 +353,19 @@ _DEFUN (_mbtowc_r, (r, pwc, s, n, state),
|
||||||
case NOOP:
|
case NOOP:
|
||||||
break;
|
break;
|
||||||
case EMPTY:
|
case EMPTY:
|
||||||
*state = 0;
|
state->__count = 0;
|
||||||
*pwc = (wchar_t)0;
|
*pwc = (wchar_t)0;
|
||||||
return i;
|
return i;
|
||||||
case COPY_A:
|
case COPY_A:
|
||||||
*state = 0;
|
state->__count = 0;
|
||||||
*pwc = (wchar_t)*ptr;
|
*pwc = (wchar_t)*ptr;
|
||||||
return (i + 1);
|
return (i + 1);
|
||||||
case COPY_J:
|
case COPY_J:
|
||||||
*state = 0;
|
state->__count = 0;
|
||||||
*pwc = (((wchar_t)*ptr) << 8) + (wchar_t)(*(ptr+1));
|
*pwc = (((wchar_t)*ptr) << 8) + (wchar_t)(*(ptr+1));
|
||||||
return (i + 1);
|
return (i + 1);
|
||||||
case COPY_J2:
|
case COPY_J2:
|
||||||
*state = 1;
|
state->__count = 1;
|
||||||
*pwc = (((wchar_t)*ptr) << 8) + (wchar_t)(*(ptr+1));
|
*pwc = (((wchar_t)*ptr) << 8) + (wchar_t)(*(ptr+1));
|
||||||
return (ptr - t) + 2;
|
return (ptr - t) + 2;
|
||||||
case MAKE_A:
|
case MAKE_A:
|
||||||
|
@ -377,7 +379,7 @@ _DEFUN (_mbtowc_r, (r, pwc, s, n, state),
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return -1; /* n < bytes needed */
|
return -2; /* n < bytes needed */
|
||||||
}
|
}
|
||||||
#endif /* MB_CAPABLE */
|
#endif /* MB_CAPABLE */
|
||||||
|
|
||||||
|
@ -392,4 +394,3 @@ _DEFUN (_mbtowc_r, (r, pwc, s, n, state),
|
||||||
|
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,25 @@
|
||||||
|
#include <wchar.h>
|
||||||
|
#include <stdlib.h>
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <reent.h>
|
||||||
|
#include <errno.h>
|
||||||
|
|
||||||
|
size_t
|
||||||
|
wcrtomb(char *s, wchar_t wc, mbstate_t *ps)
|
||||||
|
{
|
||||||
|
int retval = 0;
|
||||||
|
_REENT_CHECK_MISC(_REENT);
|
||||||
|
|
||||||
|
if (s == NULL)
|
||||||
|
retval = _wctomb_r (_REENT, "", wc, ps);
|
||||||
|
else
|
||||||
|
retval = _wctomb_r (_REENT, s, wc, ps);
|
||||||
|
|
||||||
|
if (retval == -1)
|
||||||
|
{
|
||||||
|
_REENT->_errno = EILSEQ;
|
||||||
|
return (size_t)(-1);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
return (size_t)retval;
|
||||||
|
}
|
|
@ -0,0 +1,22 @@
|
||||||
|
#include <wchar.h>
|
||||||
|
#include <stdlib.h>
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <reent.h>
|
||||||
|
#include <errno.h>
|
||||||
|
|
||||||
|
size_t
|
||||||
|
wcsrtombs (char *dst, const wchar_t **src, size_t len, mbstate_t *ps)
|
||||||
|
{
|
||||||
|
int retval = 0;
|
||||||
|
_REENT_CHECK_MISC(_REENT);
|
||||||
|
|
||||||
|
retval = _wcstombs_r (_REENT, dst, *src, len, ps);
|
||||||
|
|
||||||
|
if (retval == -1)
|
||||||
|
{
|
||||||
|
_REENT->_errno = EILSEQ;
|
||||||
|
return (size_t)(-1);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
return (size_t)retval;
|
||||||
|
}
|
|
@ -51,6 +51,7 @@ effects vary with the locale.
|
||||||
#ifndef _REENT_ONLY
|
#ifndef _REENT_ONLY
|
||||||
|
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
|
#include <wchar.h>
|
||||||
|
|
||||||
size_t
|
size_t
|
||||||
_DEFUN (wcstombs, (s, pwcs, n),
|
_DEFUN (wcstombs, (s, pwcs, n),
|
||||||
|
@ -59,7 +60,8 @@ _DEFUN (wcstombs, (s, pwcs, n),
|
||||||
size_t n)
|
size_t n)
|
||||||
{
|
{
|
||||||
#ifdef MB_CAPABLE
|
#ifdef MB_CAPABLE
|
||||||
int state = 0;
|
mbstate_t state;
|
||||||
|
state.__count = 0;
|
||||||
|
|
||||||
return _wcstombs_r (_REENT, s, pwcs, n, &state);
|
return _wcstombs_r (_REENT, s, pwcs, n, &state);
|
||||||
#else /* not MB_CAPABLE */
|
#else /* not MB_CAPABLE */
|
||||||
|
|
|
@ -1,4 +1,5 @@
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
|
#include <wchar.h>
|
||||||
|
|
||||||
size_t
|
size_t
|
||||||
_DEFUN (_wcstombs_r, (reent, s, pwcs, n, state),
|
_DEFUN (_wcstombs_r, (reent, s, pwcs, n, state),
|
||||||
|
@ -6,7 +7,7 @@ _DEFUN (_wcstombs_r, (reent, s, pwcs, n, state),
|
||||||
char *s _AND
|
char *s _AND
|
||||||
const wchar_t *pwcs _AND
|
const wchar_t *pwcs _AND
|
||||||
size_t n _AND
|
size_t n _AND
|
||||||
int *state)
|
mbstate_t *state)
|
||||||
{
|
{
|
||||||
char *ptr = s;
|
char *ptr = s;
|
||||||
size_t max = n;
|
size_t max = n;
|
||||||
|
|
|
@ -0,0 +1,25 @@
|
||||||
|
#include <wchar.h>
|
||||||
|
#include <wchar.h>
|
||||||
|
#include <stdlib.h>
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <reent.h>
|
||||||
|
|
||||||
|
int
|
||||||
|
wctob (wint_t c)
|
||||||
|
{
|
||||||
|
mbstate_t mbs;
|
||||||
|
int retval = 0;
|
||||||
|
unsigned char pwc;
|
||||||
|
|
||||||
|
/* Put mbs in initial state. */
|
||||||
|
memset (&mbs, '\0', sizeof (mbs));
|
||||||
|
|
||||||
|
_REENT_CHECK_MISC(_REENT);
|
||||||
|
|
||||||
|
retval = _wctomb_r (_REENT, &pwc, c, &mbs);
|
||||||
|
|
||||||
|
if (c == EOF || retval != 1)
|
||||||
|
return WEOF;
|
||||||
|
else
|
||||||
|
return (int)pwc;
|
||||||
|
}
|
|
@ -1,5 +1,6 @@
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
|
#include <wchar.h>
|
||||||
#include <locale.h>
|
#include <locale.h>
|
||||||
#include "mbctype.h"
|
#include "mbctype.h"
|
||||||
|
|
||||||
|
@ -8,11 +9,11 @@ _DEFUN (_wctomb_r, (r, s, wchar, state),
|
||||||
struct _reent *r _AND
|
struct _reent *r _AND
|
||||||
char *s _AND
|
char *s _AND
|
||||||
wchar_t wchar _AND
|
wchar_t wchar _AND
|
||||||
int *state)
|
mbstate_t *state)
|
||||||
{
|
{
|
||||||
if (strlen (r->_current_locale) <= 1)
|
if (strlen (r->_current_locale) <= 1)
|
||||||
{ /* fall-through */ }
|
{ /* fall-through */ }
|
||||||
else if (!strcmp (r->_current_locale, "UTF-8"))
|
else if (!strcmp (r->_current_locale, "C-UTF-8"))
|
||||||
{
|
{
|
||||||
if (s == NULL)
|
if (s == NULL)
|
||||||
return 0; /* UTF-8 encoding is not state-dependent */
|
return 0; /* UTF-8 encoding is not state-dependent */
|
||||||
|
@ -125,10 +126,10 @@ _DEFUN (_wctomb_r, (r, s, wchar, state),
|
||||||
/* first byte is non-zero..validate multi-byte char */
|
/* first byte is non-zero..validate multi-byte char */
|
||||||
if (_isjis (char1) && _isjis (char2))
|
if (_isjis (char1) && _isjis (char2))
|
||||||
{
|
{
|
||||||
if (*state == 0)
|
if (state->__count == 0)
|
||||||
{
|
{
|
||||||
/* must switch from ASCII to JIS state */
|
/* must switch from ASCII to JIS state */
|
||||||
*state = 1;
|
state->__count = 1;
|
||||||
*s++ = ESC_CHAR;
|
*s++ = ESC_CHAR;
|
||||||
*s++ = '$';
|
*s++ = '$';
|
||||||
*s++ = 'B';
|
*s++ = 'B';
|
||||||
|
@ -143,10 +144,10 @@ _DEFUN (_wctomb_r, (r, s, wchar, state),
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
if (*state != 0)
|
if (state->__count != 0)
|
||||||
{
|
{
|
||||||
/* must switch from JIS to ASCII state */
|
/* must switch from JIS to ASCII state */
|
||||||
*state = 0;
|
state->__count = 0;
|
||||||
*s++ = ESC_CHAR;
|
*s++ = ESC_CHAR;
|
||||||
*s++ = '(';
|
*s++ = '(';
|
||||||
*s++ = 'B';
|
*s++ = 'B';
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
|
|
||||||
AUTOMAKE_OPTIONS = cygnus
|
AUTOMAKE_OPTIONS = cygnus
|
||||||
|
|
||||||
INCLUDES = -I$(srcdir)/include $(NEWLIB_CFLAGS) $(CROSS_CFLAGS) $(TARGET_CFLAGS)
|
INCLUDES = -I$(srcdir)/include $(NEWLIB_CFLAGS) $(CROSS_CFLAGS) $(TARGET_CFLAGS) $(INCLTDL)
|
||||||
|
|
||||||
SUBDIRS = machine \
|
SUBDIRS = machine \
|
||||||
cmath \
|
cmath \
|
||||||
|
@ -76,6 +76,8 @@ LIB_SOURCES = \
|
||||||
pread.c \
|
pread.c \
|
||||||
pread64.c \
|
pread64.c \
|
||||||
process.c \
|
process.c \
|
||||||
|
prof-freq.c \
|
||||||
|
profile.c \
|
||||||
psignal.c \
|
psignal.c \
|
||||||
pvallocr.c \
|
pvallocr.c \
|
||||||
pwrite.c \
|
pwrite.c \
|
||||||
|
@ -165,8 +167,19 @@ lib.a: $(ADD_OBJS) $(lib_a_OBJECTS)
|
||||||
|
|
||||||
endif # USE_LIBTOOL
|
endif # USE_LIBTOOL
|
||||||
|
|
||||||
|
objectlist.awk.in: $(noinst_LTLIBRARIES) $(SUBLIBS)
|
||||||
include $(srcdir)/../../../Makefile.shared
|
-rm -f objectlist.awk.in
|
||||||
|
for i in `ls *.lo` ; \
|
||||||
|
do \
|
||||||
|
echo $$i `pwd`/$$i >> objectlist.awk.in ; \
|
||||||
|
done
|
||||||
|
for j in $(SUBLIBS) ; \
|
||||||
|
do \
|
||||||
|
export i=`echo $$j | sed -e 's,\(.*\)\/[^\/]*$$,\1,'`; \
|
||||||
|
if test $$i != "." && test -f $$i/objectlist.awk.in; then \
|
||||||
|
cat $$i/objectlist.awk.in >> objectlist.awk.in ; \
|
||||||
|
fi; \
|
||||||
|
done
|
||||||
|
|
||||||
all: crt0.o crt1.o
|
all: crt0.o crt1.o
|
||||||
|
|
||||||
|
|
|
@ -11,7 +11,6 @@
|
||||||
# PARTICULAR PURPOSE.
|
# PARTICULAR PURPOSE.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
SHELL = @SHELL@
|
SHELL = @SHELL@
|
||||||
|
|
||||||
srcdir = @srcdir@
|
srcdir = @srcdir@
|
||||||
|
@ -97,7 +96,7 @@ sys_dir = @sys_dir@
|
||||||
|
|
||||||
AUTOMAKE_OPTIONS = cygnus
|
AUTOMAKE_OPTIONS = cygnus
|
||||||
|
|
||||||
INCLUDES = -I$(srcdir)/include $(NEWLIB_CFLAGS) $(CROSS_CFLAGS) $(TARGET_CFLAGS)
|
INCLUDES = -I$(srcdir)/include $(NEWLIB_CFLAGS) $(CROSS_CFLAGS) $(TARGET_CFLAGS) $(INCLTDL)
|
||||||
|
|
||||||
SUBDIRS = machine \
|
SUBDIRS = machine \
|
||||||
cmath \
|
cmath \
|
||||||
|
@ -173,6 +172,8 @@ LIB_SOURCES = \
|
||||||
pread.c \
|
pread.c \
|
||||||
pread64.c \
|
pread64.c \
|
||||||
process.c \
|
process.c \
|
||||||
|
prof-freq.c \
|
||||||
|
profile.c \
|
||||||
psignal.c \
|
psignal.c \
|
||||||
pvallocr.c \
|
pvallocr.c \
|
||||||
pwrite.c \
|
pwrite.c \
|
||||||
|
@ -287,6 +288,7 @@ LIBS = @LIBS@
|
||||||
@USE_LIBTOOL_FALSE@mstats.$(OBJEXT) mtrim.$(OBJEXT) mtrimr.$(OBJEXT) \
|
@USE_LIBTOOL_FALSE@mstats.$(OBJEXT) mtrim.$(OBJEXT) mtrimr.$(OBJEXT) \
|
||||||
@USE_LIBTOOL_FALSE@ntp_gettime.$(OBJEXT) pathconf.$(OBJEXT) \
|
@USE_LIBTOOL_FALSE@ntp_gettime.$(OBJEXT) pathconf.$(OBJEXT) \
|
||||||
@USE_LIBTOOL_FALSE@pread.$(OBJEXT) pread64.$(OBJEXT) process.$(OBJEXT) \
|
@USE_LIBTOOL_FALSE@pread.$(OBJEXT) pread64.$(OBJEXT) process.$(OBJEXT) \
|
||||||
|
@USE_LIBTOOL_FALSE@prof-freq.$(OBJEXT) profile.$(OBJEXT) \
|
||||||
@USE_LIBTOOL_FALSE@psignal.$(OBJEXT) pvallocr.$(OBJEXT) \
|
@USE_LIBTOOL_FALSE@psignal.$(OBJEXT) pvallocr.$(OBJEXT) \
|
||||||
@USE_LIBTOOL_FALSE@pwrite.$(OBJEXT) pwrite64.$(OBJEXT) raise.$(OBJEXT) \
|
@USE_LIBTOOL_FALSE@pwrite.$(OBJEXT) pwrite64.$(OBJEXT) raise.$(OBJEXT) \
|
||||||
@USE_LIBTOOL_FALSE@readdir64.$(OBJEXT) realloc.$(OBJEXT) \
|
@USE_LIBTOOL_FALSE@readdir64.$(OBJEXT) realloc.$(OBJEXT) \
|
||||||
|
@ -325,10 +327,10 @@ LTLIBRARIES = $(noinst_LTLIBRARIES)
|
||||||
@USE_LIBTOOL_TRUE@mq_open.lo mq_receive.lo mq_send.lo mq_setattr.lo \
|
@USE_LIBTOOL_TRUE@mq_open.lo mq_receive.lo mq_send.lo mq_setattr.lo \
|
||||||
@USE_LIBTOOL_TRUE@mq_unlink.lo msize.lo msizer.lo mstats.lo mtrim.lo \
|
@USE_LIBTOOL_TRUE@mq_unlink.lo msize.lo msizer.lo mstats.lo mtrim.lo \
|
||||||
@USE_LIBTOOL_TRUE@mtrimr.lo ntp_gettime.lo pathconf.lo pread.lo \
|
@USE_LIBTOOL_TRUE@mtrimr.lo ntp_gettime.lo pathconf.lo pread.lo \
|
||||||
@USE_LIBTOOL_TRUE@pread64.lo process.lo psignal.lo pvallocr.lo \
|
@USE_LIBTOOL_TRUE@pread64.lo process.lo prof-freq.lo profile.lo \
|
||||||
@USE_LIBTOOL_TRUE@pwrite.lo pwrite64.lo raise.lo readdir64.lo \
|
@USE_LIBTOOL_TRUE@psignal.lo pvallocr.lo pwrite.lo pwrite64.lo raise.lo \
|
||||||
@USE_LIBTOOL_TRUE@realloc.lo reallocr.lo realpath.lo rename.lo \
|
@USE_LIBTOOL_TRUE@readdir64.lo realloc.lo reallocr.lo realpath.lo \
|
||||||
@USE_LIBTOOL_TRUE@resource.lo scandir64.lo sched.lo select.lo \
|
@USE_LIBTOOL_TRUE@rename.lo resource.lo scandir64.lo sched.lo select.lo \
|
||||||
@USE_LIBTOOL_TRUE@seteuid.lo sethostname.lo setrlimit64.lo shm_open.lo \
|
@USE_LIBTOOL_TRUE@seteuid.lo sethostname.lo setrlimit64.lo shm_open.lo \
|
||||||
@USE_LIBTOOL_TRUE@shm_unlink.lo sig.lo sigaction.lo sigqueue.lo \
|
@USE_LIBTOOL_TRUE@shm_unlink.lo sig.lo sigaction.lo sigqueue.lo \
|
||||||
@USE_LIBTOOL_TRUE@signal.lo siglongjmp.lo sigset.lo sigwait.lo \
|
@USE_LIBTOOL_TRUE@signal.lo siglongjmp.lo sigset.lo sigwait.lo \
|
||||||
|
@ -357,7 +359,7 @@ OBJECTS = $(lib_a_OBJECTS) $(liblinux_la_OBJECTS)
|
||||||
all: all-redirect
|
all: all-redirect
|
||||||
.SUFFIXES:
|
.SUFFIXES:
|
||||||
.SUFFIXES: .S .c .lo .o .obj .s
|
.SUFFIXES: .S .c .lo .o .obj .s
|
||||||
$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ Makefile.am $(top_srcdir)/configure.in $(ACLOCAL_M4) $(srcdir)/../../../Makefile.shared
|
$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ Makefile.am $(top_srcdir)/configure.in $(ACLOCAL_M4)
|
||||||
cd $(top_srcdir) && $(AUTOMAKE) --cygnus Makefile
|
cd $(top_srcdir) && $(AUTOMAKE) --cygnus Makefile
|
||||||
|
|
||||||
Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
|
Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
|
||||||
|
@ -688,12 +690,19 @@ maintainer-clean
|
||||||
@USE_LIBTOOL_FALSE@ $(RANLIB) $@
|
@USE_LIBTOOL_FALSE@ $(RANLIB) $@
|
||||||
@USE_LIBTOOL_FALSE@ rm -rf tmp
|
@USE_LIBTOOL_FALSE@ rm -rf tmp
|
||||||
|
|
||||||
objectlist.awk.in: $(noinst_LTLIBRARIES)
|
objectlist.awk.in: $(noinst_LTLIBRARIES) $(SUBLIBS)
|
||||||
-rm -f objectlist.awk.in
|
-rm -f objectlist.awk.in
|
||||||
for i in `ls *.lo` ; \
|
for i in `ls *.lo` ; \
|
||||||
do \
|
do \
|
||||||
echo $$i `pwd`/$$i >> objectlist.awk.in ; \
|
echo $$i `pwd`/$$i >> objectlist.awk.in ; \
|
||||||
done
|
done
|
||||||
|
for j in $(SUBLIBS) ; \
|
||||||
|
do \
|
||||||
|
export i=`echo $$j | sed -e 's,\(.*\)\/[^\/]*$$,\1,'`; \
|
||||||
|
if test $$i != "." && test -f $$i/objectlist.awk.in; then \
|
||||||
|
cat $$i/objectlist.awk.in >> objectlist.awk.in ; \
|
||||||
|
fi; \
|
||||||
|
done
|
||||||
|
|
||||||
all: crt0.o crt1.o
|
all: crt0.o crt1.o
|
||||||
|
|
||||||
|
|
|
@ -200,6 +200,8 @@ extern int32_t __ieee754_rem_pio2 (double,double*);
|
||||||
extern double __ieee754_scalb (double,double);
|
extern double __ieee754_scalb (double,double);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
/* This is necessary because the hardware accelerated version of libm
|
||||||
|
does not provide the __ieee754 functions. */
|
||||||
#define __ieee754_sinh sinh
|
#define __ieee754_sinh sinh
|
||||||
#define __ieee754_hypot hypot
|
#define __ieee754_hypot hypot
|
||||||
#define __ieee754_hypotf hypotf
|
#define __ieee754_hypotf hypotf
|
||||||
|
|
|
@ -215,7 +215,7 @@ posix_fpathconf (fd, name)
|
||||||
/* AIO is only allowed on regular files and block devices. */
|
/* AIO is only allowed on regular files and block devices. */
|
||||||
struct stat64 st;
|
struct stat64 st;
|
||||||
|
|
||||||
if (__fxstat64 (_STAT_VER, fd, &st) < 0
|
if (fstat64 (fd, &st) < 0
|
||||||
|| (! S_ISREG (st.st_mode) && ! S_ISBLK (st.st_mode)))
|
|| (! S_ISREG (st.st_mode) && ! S_ISBLK (st.st_mode)))
|
||||||
return -1;
|
return -1;
|
||||||
else
|
else
|
||||||
|
|
|
@ -4,7 +4,7 @@ AUTOMAKE_OPTIONS = cygnus
|
||||||
|
|
||||||
INCLUDES = $(NEWLIB_CFLAGS) $(CROSS_CFLAGS) $(TARGET_CFLAGS)
|
INCLUDES = $(NEWLIB_CFLAGS) $(CROSS_CFLAGS) $(TARGET_CFLAGS)
|
||||||
|
|
||||||
LIB_SOURCES = get_clockfreq.c getpagesize.c hp-timing.c setjmp.S sigaction.c
|
LIB_SOURCES = get_clockfreq.c getpagesize.c hp-timing.c setjmp.S sigaction.c dl-procinfo.c
|
||||||
|
|
||||||
liblinuxi386_la_LDFLAGS = -Xcompiler -nostdlib
|
liblinuxi386_la_LDFLAGS = -Xcompiler -nostdlib
|
||||||
|
|
||||||
|
|
|
@ -98,7 +98,7 @@ AUTOMAKE_OPTIONS = cygnus
|
||||||
|
|
||||||
INCLUDES = $(NEWLIB_CFLAGS) $(CROSS_CFLAGS) $(TARGET_CFLAGS)
|
INCLUDES = $(NEWLIB_CFLAGS) $(CROSS_CFLAGS) $(TARGET_CFLAGS)
|
||||||
|
|
||||||
LIB_SOURCES = get_clockfreq.c getpagesize.c hp-timing.c setjmp.S sigaction.c
|
LIB_SOURCES = get_clockfreq.c getpagesize.c hp-timing.c setjmp.S sigaction.c dl-procinfo.c
|
||||||
|
|
||||||
liblinuxi386_la_LDFLAGS = -Xcompiler -nostdlib
|
liblinuxi386_la_LDFLAGS = -Xcompiler -nostdlib
|
||||||
|
|
||||||
|
@ -124,12 +124,14 @@ LIBS = @LIBS@
|
||||||
lib_a_LIBADD =
|
lib_a_LIBADD =
|
||||||
@USE_LIBTOOL_FALSE@lib_a_OBJECTS = get_clockfreq.$(OBJEXT) \
|
@USE_LIBTOOL_FALSE@lib_a_OBJECTS = get_clockfreq.$(OBJEXT) \
|
||||||
@USE_LIBTOOL_FALSE@getpagesize.$(OBJEXT) hp-timing.$(OBJEXT) \
|
@USE_LIBTOOL_FALSE@getpagesize.$(OBJEXT) hp-timing.$(OBJEXT) \
|
||||||
@USE_LIBTOOL_FALSE@setjmp.$(OBJEXT) sigaction.$(OBJEXT)
|
@USE_LIBTOOL_FALSE@setjmp.$(OBJEXT) sigaction.$(OBJEXT) \
|
||||||
|
@USE_LIBTOOL_FALSE@dl-procinfo.$(OBJEXT)
|
||||||
LTLIBRARIES = $(noinst_LTLIBRARIES)
|
LTLIBRARIES = $(noinst_LTLIBRARIES)
|
||||||
|
|
||||||
liblinuxi386_la_LIBADD =
|
liblinuxi386_la_LIBADD =
|
||||||
@USE_LIBTOOL_TRUE@liblinuxi386_la_OBJECTS = get_clockfreq.lo \
|
@USE_LIBTOOL_TRUE@liblinuxi386_la_OBJECTS = get_clockfreq.lo \
|
||||||
@USE_LIBTOOL_TRUE@getpagesize.lo hp-timing.lo setjmp.lo sigaction.lo
|
@USE_LIBTOOL_TRUE@getpagesize.lo hp-timing.lo setjmp.lo sigaction.lo \
|
||||||
|
@USE_LIBTOOL_TRUE@dl-procinfo.lo
|
||||||
CFLAGS = @CFLAGS@
|
CFLAGS = @CFLAGS@
|
||||||
COMPILE = $(CC) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
|
COMPILE = $(CC) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
|
||||||
LTCOMPILE = $(LIBTOOL) --mode=compile $(CC) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
|
LTCOMPILE = $(LIBTOOL) --mode=compile $(CC) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
|
||||||
|
|
|
@ -0,0 +1,38 @@
|
||||||
|
/* Data for Linux/i386 version of processor capability information.
|
||||||
|
Copyright (C) 2001 Free Software Foundation, Inc.
|
||||||
|
This file is part of the GNU C Library.
|
||||||
|
Contributed by Ulrich Drepper <drepper@cygnus.com>, 2001.
|
||||||
|
|
||||||
|
The GNU C Library is free software; you can redistribute it and/or
|
||||||
|
modify it under the terms of the GNU Lesser General Public
|
||||||
|
License as published by the Free Software Foundation; either
|
||||||
|
version 2.1 of the License, or (at your option) any later version.
|
||||||
|
|
||||||
|
The GNU C Library is distributed in the hope that it will be useful,
|
||||||
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||||
|
Lesser General Public License for more details.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU Lesser General Public
|
||||||
|
License along with the GNU C Library; if not, write to the Free
|
||||||
|
Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
|
||||||
|
02111-1307 USA. */
|
||||||
|
|
||||||
|
/* This information must be kept in sync with the _DL_HWCAP_COUNT and
|
||||||
|
_DL_PLATFORM_COUNT definitions in procinfo.h. */
|
||||||
|
|
||||||
|
|
||||||
|
/* If anything should be added here check whether the size of each string
|
||||||
|
is still ok with the given array size. */
|
||||||
|
const char _dl_x86_cap_flags[][7] =
|
||||||
|
{
|
||||||
|
"fpu", "vme", "de", "pse", "tsc", "msr", "pae", "mce",
|
||||||
|
"cx8", "apic", "10", "sep", "mtrr", "pge", "mca", "cmov",
|
||||||
|
"pat", "pse36", "psn", "19", "20", "21", "22", "mmx",
|
||||||
|
"osfxsr", "xmm", "xmm2", "27", "28", "29", "30", "amd3d"
|
||||||
|
};
|
||||||
|
|
||||||
|
const char _dl_x86_platforms[][5] =
|
||||||
|
{
|
||||||
|
"i386", "i486", "i586", "i686"
|
||||||
|
};
|
|
@ -0,0 +1,132 @@
|
||||||
|
/* Linux/i386 version of processor capability information handling macros.
|
||||||
|
Copyright (C) 1998, 1999, 2000, 2001 Free Software Foundation, Inc.
|
||||||
|
This file is part of the GNU C Library.
|
||||||
|
Contributed by Ulrich Drepper <drepper@cygnus.com>, 1998.
|
||||||
|
|
||||||
|
The GNU C Library is free software; you can redistribute it and/or
|
||||||
|
modify it under the terms of the GNU Lesser General Public
|
||||||
|
License as published by the Free Software Foundation; either
|
||||||
|
version 2.1 of the License, or (at your option) any later version.
|
||||||
|
|
||||||
|
The GNU C Library is distributed in the hope that it will be useful,
|
||||||
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||||
|
Lesser General Public License for more details.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU Lesser General Public
|
||||||
|
License along with the GNU C Library; if not, write to the Free
|
||||||
|
Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
|
||||||
|
02111-1307 USA. */
|
||||||
|
|
||||||
|
#ifndef _DL_PROCINFO_H
|
||||||
|
#define _DL_PROCINFO_H 1
|
||||||
|
|
||||||
|
#include <ldsodefs.h>
|
||||||
|
|
||||||
|
/* If anything should be added here check whether the size of each string
|
||||||
|
is still ok with the given array size. */
|
||||||
|
extern const char _dl_x86_cap_flags[][7];
|
||||||
|
#define _DL_HWCAP_COUNT 32
|
||||||
|
|
||||||
|
extern const char _dl_x86_platforms[][5];
|
||||||
|
#define _DL_PLATFORMS_COUNT 4
|
||||||
|
|
||||||
|
/* Start at 48 to reserve some space. */
|
||||||
|
#define _DL_FIRST_PLATFORM 48
|
||||||
|
/* Mask to filter out platforms. */
|
||||||
|
#define _DL_HWCAP_PLATFORM (7ULL << _DL_FIRST_PLATFORM)
|
||||||
|
|
||||||
|
|
||||||
|
static inline int
|
||||||
|
__attribute__ ((unused))
|
||||||
|
_dl_procinfo (int word)
|
||||||
|
{
|
||||||
|
/* This table should match the information from arch/i386/kernel/setup.c
|
||||||
|
in the kernel sources. */
|
||||||
|
int i;
|
||||||
|
|
||||||
|
_dl_printf ("AT_HWCAP: ");
|
||||||
|
|
||||||
|
for (i = 0; i < _DL_HWCAP_COUNT; ++i)
|
||||||
|
if (word & (1 << i))
|
||||||
|
_dl_printf (" %s", _dl_x86_cap_flags[i]);
|
||||||
|
|
||||||
|
_dl_printf ("\n");
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
static inline const char *
|
||||||
|
__attribute__ ((unused))
|
||||||
|
_dl_hwcap_string (int idx)
|
||||||
|
{
|
||||||
|
return _dl_x86_cap_flags[idx];
|
||||||
|
};
|
||||||
|
|
||||||
|
static inline const char *
|
||||||
|
__attribute__ ((unused))
|
||||||
|
_dl_platform_string (int idx)
|
||||||
|
{
|
||||||
|
return _dl_x86_platforms [idx - _DL_FIRST_PLATFORM];
|
||||||
|
};
|
||||||
|
|
||||||
|
enum
|
||||||
|
{
|
||||||
|
HWCAP_I386_FPU = 1 << 0,
|
||||||
|
HWCAP_I386_VME = 1 << 1,
|
||||||
|
HWCAP_I386_DE = 1 << 2,
|
||||||
|
HWCAP_I386_PSE = 1 << 3,
|
||||||
|
HWCAP_I386_TSC = 1 << 4,
|
||||||
|
HWCAP_I386_MSR = 1 << 5,
|
||||||
|
HWCAP_I386_PAE = 1 << 6,
|
||||||
|
HWCAP_I386_MCE = 1 << 7,
|
||||||
|
HWCAP_I386_CX8 = 1 << 8,
|
||||||
|
HWCAP_I386_APIC = 1 << 9,
|
||||||
|
HWCAP_I386_SEP = 1 << 11,
|
||||||
|
HWCAP_I386_MTRR = 1 << 12,
|
||||||
|
HWCAP_I386_PGE = 1 << 13,
|
||||||
|
HWCAP_I386_MCA = 1 << 14,
|
||||||
|
HWCAP_I386_CMOV = 1 << 15,
|
||||||
|
HWCAP_I386_FCMOV = 1 << 16,
|
||||||
|
HWCAP_I386_MMX = 1 << 23,
|
||||||
|
HWCAP_I386_OSFXSR = 1 << 24,
|
||||||
|
HWCAP_I386_XMM = 1 << 25,
|
||||||
|
HWCAP_I386_XMM2 = 1 << 26,
|
||||||
|
HWCAP_I386_AMD3D = 1 << 31,
|
||||||
|
|
||||||
|
/* XXX Which others to add here? */
|
||||||
|
HWCAP_IMPORTANT = (HWCAP_I386_MMX)
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
static inline int
|
||||||
|
__attribute__ ((unused))
|
||||||
|
_dl_string_hwcap (const char *str)
|
||||||
|
{
|
||||||
|
int i;
|
||||||
|
|
||||||
|
for (i = 0; i < _DL_HWCAP_COUNT; i++)
|
||||||
|
{
|
||||||
|
if (strcmp (str, _dl_x86_cap_flags[i]) == 0)
|
||||||
|
return i;
|
||||||
|
}
|
||||||
|
return -1;
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
static inline int
|
||||||
|
__attribute__ ((unused))
|
||||||
|
_dl_string_platform (const char *str)
|
||||||
|
{
|
||||||
|
int i;
|
||||||
|
|
||||||
|
if (str != NULL)
|
||||||
|
for (i = 0; i < _DL_PLATFORMS_COUNT; ++i)
|
||||||
|
{
|
||||||
|
if (strcmp (str, _dl_x86_platforms[i]) == 0)
|
||||||
|
return _DL_FIRST_PLATFORM + i;
|
||||||
|
}
|
||||||
|
return -1;
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif /* dl-procinfo.h */
|
|
@ -212,7 +212,7 @@ posix_pathconf (const char *path, int name)
|
||||||
/* AIO is only allowed on regular files and block devices. */
|
/* AIO is only allowed on regular files and block devices. */
|
||||||
struct stat64 st;
|
struct stat64 st;
|
||||||
|
|
||||||
if (__xstat64 (_STAT_VER, path, &st) < 0
|
if (stat64 (path, &st) < 0
|
||||||
|| (! S_ISREG (st.st_mode) && ! S_ISBLK (st.st_mode)))
|
|| (! S_ISREG (st.st_mode) && ! S_ISBLK (st.st_mode)))
|
||||||
return -1;
|
return -1;
|
||||||
else
|
else
|
||||||
|
|
|
@ -0,0 +1,54 @@
|
||||||
|
/* Return frequency of ticks reported by profil. Generic version. */
|
||||||
|
/*-
|
||||||
|
* Copyright (c) 1983, 1992, 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.
|
||||||
|
* 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 <sys/types.h>
|
||||||
|
#include <sys/time.h>
|
||||||
|
#include <libc-internal.h>
|
||||||
|
|
||||||
|
int
|
||||||
|
__profile_frequency (void)
|
||||||
|
{
|
||||||
|
/*
|
||||||
|
* Discover the tick frequency of the machine if something goes wrong,
|
||||||
|
* we return 0, an impossible hertz.
|
||||||
|
*/
|
||||||
|
struct itimerval tim;
|
||||||
|
|
||||||
|
tim.it_interval.tv_sec = 0;
|
||||||
|
tim.it_interval.tv_usec = 1;
|
||||||
|
tim.it_value.tv_sec = 0;
|
||||||
|
tim.it_value.tv_usec = 0;
|
||||||
|
setitimer(ITIMER_REAL, &tim, 0);
|
||||||
|
setitimer(ITIMER_REAL, 0, &tim);
|
||||||
|
if (tim.it_interval.tv_usec < 2)
|
||||||
|
return 0;
|
||||||
|
return (1000000 / tim.it_interval.tv_usec);
|
||||||
|
}
|
|
@ -0,0 +1,12 @@
|
||||||
|
/* libc/sys/linux/profile.c - profiling system call */
|
||||||
|
|
||||||
|
#include <errno.h>
|
||||||
|
#include <sys/types.h>
|
||||||
|
#include <machine/syscall.h>
|
||||||
|
|
||||||
|
#define __NR_profil 98
|
||||||
|
|
||||||
|
int profil(u_short *buf, size_t bufsiz, size_t offset,
|
||||||
|
u_int scale);
|
||||||
|
|
||||||
|
_syscall4(int,profil,unsigned short *,buf,size_t,bufsiz,size_t,offset,unsigned int, scale)
|
|
@ -29,5 +29,6 @@ extern __IMPORT int _sys_nerr;
|
||||||
|
|
||||||
#define ENOTSUP EOPNOTSUPP
|
#define ENOTSUP EOPNOTSUPP
|
||||||
#define EFTYPE 79 /* Inappropriate file type or format */
|
#define EFTYPE 79 /* Inappropriate file type or format */
|
||||||
|
#define EILSEQ 84
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -149,6 +149,7 @@ typedef __ino64_t ino64_t;
|
||||||
typedef __uint32_t uintptr_t;
|
typedef __uint32_t uintptr_t;
|
||||||
typedef __int32_t intptr_t;
|
typedef __int32_t intptr_t;
|
||||||
typedef __off64_t off64_t;
|
typedef __off64_t off64_t;
|
||||||
|
typedef __off_t off_t;
|
||||||
|
|
||||||
#if !defined(_ANSI_SOURCE) && !defined(_POSIX_SOURCE)
|
#if !defined(_ANSI_SOURCE) && !defined(_POSIX_SOURCE)
|
||||||
typedef struct _physadr {
|
typedef struct _physadr {
|
||||||
|
|
|
@ -139,13 +139,13 @@ int main()
|
||||||
int retval;
|
int retval;
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
if (!setlocale(LC_CTYPE, "UTF-8"))
|
if (!setlocale(LC_CTYPE, "C-UTF-8"))
|
||||||
{
|
{
|
||||||
printf("Failed to set UTF-8 locale.\n");
|
printf("Failed to set C-UTF-8 locale.\n");
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
printf("Set UTF-8 locale.\n");
|
printf("Set C-UTF-8 locale.\n");
|
||||||
|
|
||||||
/* 2 Boundary condition test cases */
|
/* 2 Boundary condition test cases */
|
||||||
/* 2.1 First possible sequence of a certain length */
|
/* 2.1 First possible sequence of a certain length */
|
||||||
|
|
|
@ -7,7 +7,7 @@
|
||||||
load_lib checkoutput.exp
|
load_lib checkoutput.exp
|
||||||
|
|
||||||
set expected_output {
|
set expected_output {
|
||||||
"Set UTF-8 locale."
|
"Set C-UTF-8 locale."
|
||||||
"* U-00000000"
|
"* U-00000000"
|
||||||
"* U-00000080"
|
"* U-00000080"
|
||||||
"* U-00000800"
|
"* U-00000800"
|
||||||
|
|
Loading…
Reference in New Issue