Revert r231673 and r231682 for now, until we can run a full make
universe with them. Sorry for the breakage. Pointy hat to: me and brooks
This commit is contained in:
parent
a40c00a535
commit
b74cf6dcf1
Notes:
svn2git
2020-12-20 02:59:44 +00:00
svn path=/head/; revision=231714
@ -329,6 +329,4 @@
|
|||||||
..
|
..
|
||||||
vm
|
vm
|
||||||
..
|
..
|
||||||
xlocale
|
|
||||||
..
|
|
||||||
..
|
..
|
||||||
|
@ -6,7 +6,7 @@
|
|||||||
.include <bsd.own.mk>
|
.include <bsd.own.mk>
|
||||||
|
|
||||||
CLEANFILES= osreldate.h version vers.c
|
CLEANFILES= osreldate.h version vers.c
|
||||||
SUBDIR= arpa gssapi protocols rpcsvc rpc xlocale
|
SUBDIR= arpa gssapi protocols rpcsvc rpc
|
||||||
INCS= a.out.h ar.h assert.h bitstring.h complex.h cpio.h _ctype.h ctype.h \
|
INCS= a.out.h ar.h assert.h bitstring.h complex.h cpio.h _ctype.h ctype.h \
|
||||||
db.h \
|
db.h \
|
||||||
dirent.h dlfcn.h elf.h elf-hints.h err.h fmtmsg.h fnmatch.h fstab.h \
|
dirent.h dlfcn.h elf.h elf-hints.h err.h fmtmsg.h fnmatch.h fstab.h \
|
||||||
@ -24,7 +24,7 @@ INCS= a.out.h ar.h assert.h bitstring.h complex.h cpio.h _ctype.h ctype.h \
|
|||||||
strings.h sysexits.h tar.h termios.h tgmath.h \
|
strings.h sysexits.h tar.h termios.h tgmath.h \
|
||||||
time.h timeconv.h timers.h ttyent.h \
|
time.h timeconv.h timers.h ttyent.h \
|
||||||
ulimit.h unistd.h utime.h utmpx.h uuid.h varargs.h vis.h \
|
ulimit.h unistd.h utime.h utmpx.h uuid.h varargs.h vis.h \
|
||||||
wchar.h wctype.h wordexp.h xlocale.h
|
wchar.h wctype.h wordexp.h xlocale.h _xlocale_ctype.h
|
||||||
|
|
||||||
MHDRS= float.h floatingpoint.h stdarg.h
|
MHDRS= float.h floatingpoint.h stdarg.h
|
||||||
|
|
||||||
|
@ -6,18 +6,17 @@
|
|||||||
* the FreeBSD Foundation.
|
* the FreeBSD Foundation.
|
||||||
*
|
*
|
||||||
* Redistribution and use in source and binary forms, with or without
|
* Redistribution and use in source and binary forms, with or without
|
||||||
* modification, are permitted provided that the following conditions
|
* modification, are permitted provided that the following conditions * are met:
|
||||||
* are met:
|
* 1. Redistributions of source code must retain the above copyright notice,
|
||||||
* 1. Redistributions of source code must retain the above copyright
|
* this list of conditions and the following disclaimer.
|
||||||
* notice, this list of conditions and the following disclaimer.
|
* 2. Redistributions in binary form must reproduce the above copyright notice,
|
||||||
* 2. Redistributions in binary form must reproduce the above copyright
|
* this list of conditions and the following disclaimer in the documentation
|
||||||
* notice, this list of conditions and the following disclaimer in the
|
* and/or other materials provided with the distribution.
|
||||||
* documentation and/or other materials provided with the distribution.
|
|
||||||
*
|
*
|
||||||
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
|
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
|
||||||
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||||
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||||
* ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
|
* ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
|
||||||
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
||||||
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
|
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
|
||||||
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
||||||
@ -28,45 +27,28 @@
|
|||||||
*
|
*
|
||||||
* $FreeBSD$
|
* $FreeBSD$
|
||||||
*/
|
*/
|
||||||
|
#ifndef _XLOCALE_H_
|
||||||
|
#error This header should only be included by <xlocale.h>, never directly.
|
||||||
#if (defined(_XLOCALE_WCTYPES) && !defined(_XLOCALE_WCTYPE_H)) || \
|
|
||||||
(!defined(_XLOCALE_WCTYPES) && !defined(_XLOCALE_CTYPE_H))
|
|
||||||
|
|
||||||
#ifdef _XLOCALE_WCTYPES
|
|
||||||
#define _XLOCALE_WCTYPE_H
|
|
||||||
#else
|
|
||||||
#define _XLOCALE_CTYPE_H
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifndef _LOCALE_T_DEFINED
|
|
||||||
#define _LOCALE_T_DEFINED
|
|
||||||
typedef struct _xlocale *locale_t;
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifndef _XLOCALE_CTYPE_H_
|
#ifndef _XLOCALE_CTYPE_H_
|
||||||
unsigned long ___runetype_l(__ct_rune_t, locale_t) __pure;
|
__BEGIN_DECLS
|
||||||
__ct_rune_t ___tolower_l(__ct_rune_t, locale_t) __pure;
|
unsigned long ___runetype_l(__ct_rune_t, locale_t) __pure;
|
||||||
__ct_rune_t ___toupper_l(__ct_rune_t, locale_t) __pure;
|
__ct_rune_t ___tolower_l(__ct_rune_t, locale_t) __pure;
|
||||||
|
__ct_rune_t ___toupper_l(__ct_rune_t, locale_t) __pure;
|
||||||
_RuneLocale *__runes_for_locale(locale_t, int*);
|
_RuneLocale *__runes_for_locale(locale_t, int*);
|
||||||
|
__END_DECLS
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifndef _XLOCALE_INLINE
|
#ifndef _XLOCALE_INLINE
|
||||||
#if __GNUC__ && !__GNUC_STDC_INLINE__
|
#if __GNUC__ && !__GNUC_STDC_INLINE__
|
||||||
/* GNU89 inline has nonstandard semantics. */
|
|
||||||
#define _XLOCALE_INLINE extern inline
|
#define _XLOCALE_INLINE extern inline
|
||||||
#else
|
#else
|
||||||
/* Hack to work around people who define inline away */
|
|
||||||
#ifdef inline
|
|
||||||
#define _XLOCALE_INLINE __inline static
|
|
||||||
#else
|
|
||||||
/* Define with C++ / C99 compatible semantics */
|
|
||||||
#define _XLOCALE_INLINE inline
|
#define _XLOCALE_INLINE inline
|
||||||
#endif
|
#endif
|
||||||
#endif
|
#endif
|
||||||
#endif /* _XLOCALE_INLINE */
|
|
||||||
|
|
||||||
#ifdef _XLOCALE_WCTYPES
|
#ifdef XLOCALE_WCTYPES
|
||||||
static __inline int
|
static __inline int
|
||||||
__maskrune_l(__ct_rune_t _c, unsigned long _f, locale_t locale)
|
__maskrune_l(__ct_rune_t _c, unsigned long _f, locale_t locale)
|
||||||
{
|
{
|
||||||
@ -126,7 +108,7 @@ XLOCALE_ISCTYPE(upper, _CTYPE_U)
|
|||||||
XLOCALE_ISCTYPE(xdigit, _CTYPE_X)
|
XLOCALE_ISCTYPE(xdigit, _CTYPE_X)
|
||||||
#undef XLOCALE_ISCTYPE
|
#undef XLOCALE_ISCTYPE
|
||||||
|
|
||||||
#ifdef _XLOCALE_WCTYPES
|
#ifdef XLOCALE_WCTYPES
|
||||||
_XLOCALE_INLINE int towlower_l(int c, locale_t locale)
|
_XLOCALE_INLINE int towlower_l(int c, locale_t locale)
|
||||||
{
|
{
|
||||||
int mb_sb_limit;
|
int mb_sb_limit;
|
||||||
@ -158,7 +140,7 @@ wctype_t wctype_l(const char *property, locale_t locale);
|
|||||||
wint_t towctrans_l(wint_t wc, wctrans_t desc, locale_t locale);
|
wint_t towctrans_l(wint_t wc, wctrans_t desc, locale_t locale);
|
||||||
wint_t nextwctype_l(wint_t wc, wctype_t wct, locale_t locale);
|
wint_t nextwctype_l(wint_t wc, wctype_t wct, locale_t locale);
|
||||||
wctrans_t wctrans_l(const char *charclass, locale_t locale);
|
wctrans_t wctrans_l(const char *charclass, locale_t locale);
|
||||||
#undef _XLOCALE_WCTYPES
|
#undef XLOCALE_WCTYPES
|
||||||
#else
|
#else
|
||||||
_XLOCALE_INLINE int digittoint_l(int c, locale_t locale)
|
_XLOCALE_INLINE int digittoint_l(int c, locale_t locale)
|
||||||
{ return __sbmaskrune_l((c), 0xFF, locale); }
|
{ return __sbmaskrune_l((c), 0xFF, locale); }
|
||||||
@ -178,5 +160,3 @@ _XLOCALE_INLINE int toupper_l(int c, locale_t locale)
|
|||||||
runes->__mapupper[c];
|
runes->__mapupper[c];
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
#endif /* (defined(_XLOCALE_WCTYPES) && !defined(_XLOCALE_WCTYPE_H)) || \
|
|
||||||
(!defined(_XLOCALE_WCTYPES) && !defined(_XLOCALE_CTYPE_H)) */
|
|
@ -78,10 +78,6 @@ int isphonogram(int);
|
|||||||
int isrune(int);
|
int isrune(int);
|
||||||
int isspecial(int);
|
int isspecial(int);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if __POSIX_VISIBLE >= 200809
|
|
||||||
#include <xlocale/_ctype.h>
|
|
||||||
#endif
|
|
||||||
__END_DECLS
|
__END_DECLS
|
||||||
|
|
||||||
#ifndef __cplusplus
|
#ifndef __cplusplus
|
||||||
|
@ -130,10 +130,6 @@ typedef __nl_item nl_item;
|
|||||||
|
|
||||||
__BEGIN_DECLS
|
__BEGIN_DECLS
|
||||||
char *nl_langinfo(nl_item);
|
char *nl_langinfo(nl_item);
|
||||||
|
|
||||||
#if __POSIX_VISIBLE >= 200809
|
|
||||||
#include <xlocale/_langinfo.h>
|
|
||||||
#endif
|
|
||||||
__END_DECLS
|
__END_DECLS
|
||||||
|
|
||||||
#endif /* !_LANGINFO_H_ */
|
#endif /* !_LANGINFO_H_ */
|
||||||
|
@ -77,11 +77,54 @@ struct lconv {
|
|||||||
__BEGIN_DECLS
|
__BEGIN_DECLS
|
||||||
struct lconv *localeconv(void);
|
struct lconv *localeconv(void);
|
||||||
char *setlocale(int, const char *);
|
char *setlocale(int, const char *);
|
||||||
|
__END_DECLS
|
||||||
|
|
||||||
#if __POSIX_VISIBLE >= 200809
|
#if __POSIX_VISIBLE >= 200809
|
||||||
#include <xlocale/_locale.h>
|
|
||||||
#endif
|
#define LC_COLLATE_MASK (1<<0)
|
||||||
|
#define LC_CTYPE_MASK (1<<1)
|
||||||
|
#define LC_MESSAGES_MASK (1<<2)
|
||||||
|
#define LC_MONETARY_MASK (1<<3)
|
||||||
|
#define LC_NUMERIC_MASK (1<<4)
|
||||||
|
#define LC_TIME_MASK (1<<5)
|
||||||
|
#define LC_ALL_MASK (LC_COLLATE_MASK | LC_CTYPE_MASK | LC_MESSAGES_MASK | \
|
||||||
|
LC_MONETARY_MASK | LC_NUMERIC_MASK | LC_TIME_MASK)
|
||||||
|
|
||||||
|
#define LC_GLOBAL_LOCALE ((locale_t)-1)
|
||||||
|
|
||||||
|
__BEGIN_DECLS
|
||||||
|
|
||||||
|
typedef struct _xlocale *locale_t;
|
||||||
|
/**
|
||||||
|
* Creates a new locale.
|
||||||
|
*/
|
||||||
|
locale_t newlocale(int mask, const char *locale, locale_t base);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns an identical duplicate of the passed locale. The returned locale
|
||||||
|
* must be freed with freelocale(). The returned locale will share components
|
||||||
|
* with the original.
|
||||||
|
*/
|
||||||
|
locale_t duplocale(locale_t base);
|
||||||
|
/*
|
||||||
|
* Free a locale_t. This is quite a poorly named function. It actually
|
||||||
|
* disclaims a reference to a locale_t, rather than freeing it.
|
||||||
|
*/
|
||||||
|
int freelocale(locale_t loc);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Returns the name of the locale for a particular component of a locale_t.
|
||||||
|
*/
|
||||||
|
const char *querylocale(int mask, locale_t loc);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Installs the specified locale_t as this thread's locale.
|
||||||
|
*/
|
||||||
|
locale_t uselocale(locale_t loc);
|
||||||
|
|
||||||
__END_DECLS
|
__END_DECLS
|
||||||
|
|
||||||
|
#endif /* __POSIX_VISIBLE >= 200809 */
|
||||||
|
|
||||||
|
|
||||||
#endif /* _LOCALE_H_ */
|
#endif /* _LOCALE_H_ */
|
||||||
|
@ -85,21 +85,11 @@ typedef struct {
|
|||||||
#define _RUNE_MAGIC_1 "RuneMagi" /* Indicates version 0 of RuneLocale */
|
#define _RUNE_MAGIC_1 "RuneMagi" /* Indicates version 0 of RuneLocale */
|
||||||
__BEGIN_DECLS
|
__BEGIN_DECLS
|
||||||
extern const _RuneLocale _DefaultRuneLocale;
|
extern const _RuneLocale _DefaultRuneLocale;
|
||||||
extern const _RuneLocale *_CurrentRuneLocale;
|
__attribute__((deprecated))
|
||||||
#if defined(__NO_TLS) || defined(__RUNETYPE_INTERNAL)
|
extern _RuneLocale *_CurrentRuneLocale;
|
||||||
extern const _RuneLocale *__getCurrentRuneLocale(void);
|
/* TODO: This is called quite a lot, so we should use a __thread variable when
|
||||||
#else
|
* it's available. */
|
||||||
extern const _Thread_local _RuneLocale *_ThreadRuneLocale;
|
extern _RuneLocale *__getCurrentRuneLocale(void);
|
||||||
static inline const _RuneLocale *__getCurrentRuneLocale(void)
|
|
||||||
{
|
|
||||||
|
|
||||||
if (_ThreadRuneLocale)
|
|
||||||
return _ThreadRuneLocale;
|
|
||||||
if (_CurrentRuneLocale)
|
|
||||||
return _CurrentRuneLocale;
|
|
||||||
return &_DefaultRuneLocale;
|
|
||||||
}
|
|
||||||
#endif /* __NO_TLS || __RUNETYPE_INTERNAL */
|
|
||||||
#define _CurrentRuneLocale (__getCurrentRuneLocale())
|
#define _CurrentRuneLocale (__getCurrentRuneLocale())
|
||||||
__END_DECLS
|
__END_DECLS
|
||||||
|
|
||||||
|
@ -132,10 +132,6 @@ void swab(const void * __restrict, void * __restrict, ssize_t);
|
|||||||
#endif /* _SWAB_DECLARED */
|
#endif /* _SWAB_DECLARED */
|
||||||
|
|
||||||
#endif /* __BSD_VISIBLE */
|
#endif /* __BSD_VISIBLE */
|
||||||
|
|
||||||
#if __POSIX_VISIBLE >= 200809
|
|
||||||
#include <xlocale/_string.h>
|
|
||||||
#endif
|
|
||||||
__END_DECLS
|
__END_DECLS
|
||||||
|
|
||||||
#endif /* _STRING_H_ */
|
#endif /* _STRING_H_ */
|
||||||
|
@ -183,10 +183,6 @@ void tzsetwall(void);
|
|||||||
time_t timelocal(struct tm * const);
|
time_t timelocal(struct tm * const);
|
||||||
time_t timegm(struct tm * const);
|
time_t timegm(struct tm * const);
|
||||||
#endif /* __BSD_VISIBLE */
|
#endif /* __BSD_VISIBLE */
|
||||||
|
|
||||||
#if __POSIX_VISIBLE >= 200809
|
|
||||||
#include <xlocale/_time.h>
|
|
||||||
#endif
|
|
||||||
__END_DECLS
|
__END_DECLS
|
||||||
|
|
||||||
#endif /* !_TIME_H_ */
|
#endif /* !_TIME_H_ */
|
||||||
|
@ -224,10 +224,6 @@ wchar_t *fgetwln(FILE * __restrict, size_t * __restrict);
|
|||||||
size_t wcslcat(wchar_t *, const wchar_t *, size_t);
|
size_t wcslcat(wchar_t *, const wchar_t *, size_t);
|
||||||
size_t wcslcpy(wchar_t *, const wchar_t *, size_t);
|
size_t wcslcpy(wchar_t *, const wchar_t *, size_t);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if __POSIX_VISIBLE >= 200809
|
|
||||||
#include <xlocale/_wchar.h>
|
|
||||||
#endif
|
|
||||||
__END_DECLS
|
__END_DECLS
|
||||||
|
|
||||||
#endif /* !_WCHAR_H_ */
|
#endif /* !_WCHAR_H_ */
|
||||||
|
@ -87,11 +87,6 @@ wint_t iswrune(wint_t);
|
|||||||
wint_t iswspecial(wint_t);
|
wint_t iswspecial(wint_t);
|
||||||
wint_t nextwctype(wint_t, wctype_t);
|
wint_t nextwctype(wint_t, wctype_t);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if __POSIX_VISIBLE >= 200809
|
|
||||||
#define _XLOCALE_WCTYPES 1
|
|
||||||
#include <xlocale/_ctype.h>
|
|
||||||
#endif /* __POSIX_VISIBLE >= 200809 */
|
|
||||||
__END_DECLS
|
__END_DECLS
|
||||||
|
|
||||||
#ifndef __cplusplus
|
#ifndef __cplusplus
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
/*-
|
/*-
|
||||||
* Copyright (c) 2011, 2012 The FreeBSD Foundation
|
* Copyright (c) 2011 The FreeBSD Foundation
|
||||||
* All rights reserved.
|
* All rights reserved.
|
||||||
*
|
*
|
||||||
* This software was developed by David Chisnall under sponsorship from
|
* This software was developed by David Chisnall under sponsorship from
|
||||||
@ -8,16 +8,16 @@
|
|||||||
* Redistribution and use in source and binary forms, with or without
|
* Redistribution and use in source and binary forms, with or without
|
||||||
* modification, are permitted provided that the following conditions
|
* modification, are permitted provided that the following conditions
|
||||||
* are met:
|
* are met:
|
||||||
* 1. Redistributions of source code must retain the above copyright
|
* 1. Redistributions of source code must retain the above copyright notice,
|
||||||
* notice, this list of conditions and the following disclaimer.
|
* this list of conditions and the following disclaimer.
|
||||||
* 2. Redistributions in binary form must reproduce the above copyright
|
* 2. Redistributions in binary form must reproduce the above copyright notice,
|
||||||
* notice, this list of conditions and the following disclaimer in the
|
* this list of conditions and the following disclaimer in the documentation
|
||||||
* documentation and/or other materials provided with the distribution.
|
* and/or other materials provided with the distribution.
|
||||||
*
|
*
|
||||||
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
|
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
|
||||||
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||||
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||||
* ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
|
* ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
|
||||||
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
||||||
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
|
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
|
||||||
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
||||||
@ -33,52 +33,225 @@
|
|||||||
#define _XLOCALE_H_
|
#define _XLOCALE_H_
|
||||||
|
|
||||||
#include <locale.h>
|
#include <locale.h>
|
||||||
|
|
||||||
__BEGIN_DECLS
|
__BEGIN_DECLS
|
||||||
#include <xlocale/_locale.h>
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Extended locale versions of the locale-aware functions from string.h.
|
||||||
|
*
|
||||||
|
* Include <string.h> before <xlocale.h> to expose these.
|
||||||
|
*/
|
||||||
#ifdef _STRING_H_
|
#ifdef _STRING_H_
|
||||||
#include <xlocale/_string.h>
|
int strcoll_l(const char *, const char *, locale_t);
|
||||||
|
size_t strxfrm_l(char *, const char *, size_t, locale_t);
|
||||||
|
int strcasecmp_l(const char *, const char *, locale_t);
|
||||||
|
char *strcasestr_l(const char *, const char *, locale_t);
|
||||||
|
int strncasecmp_l(const char *, const char *, size_t, locale_t);
|
||||||
#endif
|
#endif
|
||||||
|
/*
|
||||||
|
* Extended locale versions of the locale-aware functions from inttypes.h.
|
||||||
|
*
|
||||||
|
* Include <inttypes.h> before <xlocale.h> to expose these.
|
||||||
|
*/
|
||||||
#ifdef _INTTYPES_H_
|
#ifdef _INTTYPES_H_
|
||||||
#include <xlocale/_inttypes.h>
|
intmax_t
|
||||||
|
strtoimax_l(const char * __restrict, char ** __restrict, int, locale_t);
|
||||||
|
uintmax_t
|
||||||
|
strtoumax_l(const char * __restrict, char ** __restrict, int, locale_t);
|
||||||
|
intmax_t
|
||||||
|
wcstoimax_l(const wchar_t * __restrict, wchar_t ** __restrict, int , locale_t);
|
||||||
|
uintmax_t
|
||||||
|
wcstoumax_l(const wchar_t * __restrict, wchar_t ** __restrict, int, locale_t);
|
||||||
#endif
|
#endif
|
||||||
|
/*
|
||||||
|
* Extended locale versions of the locale-aware functions from monetary.h.
|
||||||
|
*
|
||||||
|
* Include <monetary.h> before <xlocale.h> to expose these.
|
||||||
|
*/
|
||||||
#ifdef _MONETARY_H_
|
#ifdef _MONETARY_H_
|
||||||
#include <xlocale/_monetary.h>
|
ssize_t strfmon_l(char *, size_t, locale_t, const char *, ...)
|
||||||
|
# if __GNUC__ > 2 || __GNUC__ == 2 && __GNUC_MINOR__ >= 7
|
||||||
|
__attribute__((__format__ (__strfmon__, 4, 5)))
|
||||||
|
# endif
|
||||||
|
;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Extended locale versions of the locale-aware functions from stdlib.h.
|
||||||
|
*
|
||||||
|
* Include <stdlib.h> before <xlocale.h> to expose these.
|
||||||
|
*/
|
||||||
#ifdef _STDLIB_H_
|
#ifdef _STDLIB_H_
|
||||||
#include <xlocale/_stdlib.h>
|
double atof_l(const char *, locale_t);
|
||||||
#endif
|
int atoi_l(const char *, locale_t);
|
||||||
|
long atol_l(const char *, locale_t);
|
||||||
|
long long atoll_l(const char *, locale_t);
|
||||||
|
int mblen_l(const char *, size_t, locale_t);
|
||||||
|
size_t
|
||||||
|
mbstowcs_l(wchar_t * __restrict, const char * __restrict, size_t, locale_t);
|
||||||
|
int
|
||||||
|
mbtowc_l(wchar_t * __restrict, const char * __restrict, size_t, locale_t);
|
||||||
|
double strtod_l(const char *, char **, locale_t);
|
||||||
|
float strtof_l(const char *, char **, locale_t);
|
||||||
|
long strtol_l(const char *, char **, int, locale_t);
|
||||||
|
long double strtold_l(const char *, char **, locale_t);
|
||||||
|
long long strtoll_l(const char *, char **, int, locale_t);
|
||||||
|
unsigned long strtoul_l(const char *, char **, int, locale_t);
|
||||||
|
unsigned long long strtoull_l(const char *, char **, int, locale_t);
|
||||||
|
size_t
|
||||||
|
wcstombs_l(char * __restrict, const wchar_t * __restrict, size_t, locale_t);
|
||||||
|
int wctomb_l(char *, wchar_t, locale_t);
|
||||||
|
|
||||||
|
int ___mb_cur_max_l(locale_t);
|
||||||
|
#define MB_CUR_MAX_L(x) (___mb_cur_max_l(x))
|
||||||
|
|
||||||
|
#endif
|
||||||
|
/*
|
||||||
|
* Extended locale versions of the locale-aware functions from time.h.
|
||||||
|
*
|
||||||
|
* Include <time.h> before <xlocale.h> to expose these.
|
||||||
|
*/
|
||||||
#ifdef _TIME_H_
|
#ifdef _TIME_H_
|
||||||
#include <xlocale/_time.h>
|
size_t
|
||||||
|
strftime_l(char * __restrict, size_t, const char * __restrict, const
|
||||||
|
struct tm * __restrict, locale_t)
|
||||||
|
# if __GNUC__ > 2 || __GNUC__ == 2 && __GNUC_MINOR__ >= 7
|
||||||
|
__attribute__((__format__ (__strftime__, 3, 0)))
|
||||||
|
# endif
|
||||||
|
;
|
||||||
|
char *
|
||||||
|
strptime_l(const char * __restrict, const char * __restrict,
|
||||||
|
struct tm * __restrict, locale_t);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef _LANGINFO_H_
|
#ifdef _LANGINFO_H_
|
||||||
#include <xlocale/_langinfo.h>
|
char *nl_langinfo_l(nl_item, locale_t);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef _CTYPE_H_
|
#ifdef _CTYPE_H_
|
||||||
#include <xlocale/_ctype.h>
|
#include <_xlocale_ctype.h>
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef _WCTYPE_H_
|
#ifdef _WCTYPE_H_
|
||||||
#define _XLOCALE_WCTYPES 1
|
#define XLOCALE_WCTYPES 1
|
||||||
#include <xlocale/_ctype.h>
|
#include <_xlocale_ctype.h>
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef _STDIO_H_
|
#ifdef _STDIO_H_
|
||||||
#include <xlocale/_stdio.h>
|
int fprintf_l(FILE * __restrict, locale_t, const char * __restrict, ...)
|
||||||
#endif
|
__printflike(3, 4);
|
||||||
|
int fscanf_l(FILE * __restrict, locale_t, const char * __restrict, ...)
|
||||||
|
__scanflike(3, 4);
|
||||||
|
int printf_l(locale_t, const char * __restrict, ...) __printflike(2, 3);
|
||||||
|
int scanf_l(locale_t, const char * __restrict, ...) __scanflike(2, 3);
|
||||||
|
int sprintf_l(char * __restrict, locale_t, const char * __restrict, ...)
|
||||||
|
__printflike(3, 4);
|
||||||
|
int sscanf_l(const char * __restrict, locale_t, const char * __restrict, ...)
|
||||||
|
__scanflike(3, 4);
|
||||||
|
int vfprintf_l(FILE * __restrict, locale_t, const char * __restrict, __va_list)
|
||||||
|
__printflike(3, 0);
|
||||||
|
int vprintf_l(locale_t, const char * __restrict, __va_list) __printflike(2, 0);
|
||||||
|
int vsprintf_l(char * __restrict, locale_t, const char * __restrict, __va_list)
|
||||||
|
__printflike(3, 0);
|
||||||
|
|
||||||
|
int snprintf_l(char * __restrict, size_t, locale_t, const char * __restrict,
|
||||||
|
...) __printflike(4, 5);
|
||||||
|
int vfscanf_l(FILE * __restrict, locale_t, const char * __restrict, __va_list)
|
||||||
|
__scanflike(3, 0);
|
||||||
|
int vscanf_l(locale_t, const char * __restrict, __va_list) __scanflike(2, 0);
|
||||||
|
int vsnprintf_l(char * __restrict, size_t, locale_t, const char * __restrict,
|
||||||
|
__va_list) __printflike(4, 0);
|
||||||
|
int vsscanf_l(const char * __restrict, locale_t, const char * __restrict,
|
||||||
|
__va_list) __scanflike(3, 0);
|
||||||
|
int dprintf_l(int, locale_t, const char * __restrict, ...) __printflike(3, 4);
|
||||||
|
int vdprintf_l(int, locale_t, const char * __restrict, __va_list)
|
||||||
|
__printflike(3, 0);
|
||||||
|
int asprintf_l(char **, locale_t, const char *, ...) __printflike(3, 4);
|
||||||
|
int vasprintf_l(char **, locale_t, const char *, __va_list) __printflike(3, 0);
|
||||||
|
#endif
|
||||||
#ifdef _WCHAR_H_
|
#ifdef _WCHAR_H_
|
||||||
#include <xlocale/_wchar.h>
|
wint_t btowc_l(int, locale_t);
|
||||||
|
wint_t fgetwc_l(FILE *, locale_t);
|
||||||
|
wchar_t *
|
||||||
|
fgetws_l(wchar_t * __restrict, int, FILE * __restrict, locale_t);
|
||||||
|
wint_t fputwc_l(wchar_t, FILE *, locale_t);
|
||||||
|
int
|
||||||
|
fputws_l(const wchar_t * __restrict, FILE * __restrict, locale_t);
|
||||||
|
int
|
||||||
|
fwprintf_l(FILE * __restrict, locale_t, const wchar_t * __restrict,
|
||||||
|
...);
|
||||||
|
int
|
||||||
|
fwscanf_l(FILE * __restrict, locale_t, const wchar_t * __restrict, ...);
|
||||||
|
wint_t getwc_l(FILE *, locale_t);
|
||||||
|
wint_t getwchar_l(locale_t);
|
||||||
|
size_t
|
||||||
|
mbrlen_l(const char * __restrict, size_t, mbstate_t * __restrict, locale_t);
|
||||||
|
size_t
|
||||||
|
mbrtowc_l(wchar_t * __restrict, const char * __restrict, size_t,
|
||||||
|
mbstate_t * __restrict, locale_t);
|
||||||
|
int mbsinit_l(const mbstate_t *, locale_t);
|
||||||
|
size_t
|
||||||
|
mbsrtowcs_l(wchar_t * __restrict, const char ** __restrict, size_t,
|
||||||
|
mbstate_t * __restrict, locale_t);
|
||||||
|
wint_t putwc_l(wchar_t, FILE *, locale_t);
|
||||||
|
wint_t putwchar_l(wchar_t, locale_t);
|
||||||
|
int
|
||||||
|
swprintf_l(wchar_t * __restrict, size_t n, locale_t,
|
||||||
|
const wchar_t * __restrict, ...);
|
||||||
|
int
|
||||||
|
swscanf_l(const wchar_t * __restrict, locale_t, const wchar_t * __restrict,
|
||||||
|
...);
|
||||||
|
wint_t ungetwc_l(wint_t, FILE *, locale_t);
|
||||||
|
int
|
||||||
|
vfwprintf_l(FILE * __restrict, locale_t, const wchar_t * __restrict,
|
||||||
|
__va_list);
|
||||||
|
int
|
||||||
|
vswprintf_l(wchar_t * __restrict, size_t n, locale_t,
|
||||||
|
const wchar_t * __restrict, __va_list);
|
||||||
|
int vwprintf_l(locale_t, const wchar_t * __restrict, __va_list);
|
||||||
|
size_t
|
||||||
|
wcrtomb_l(char * __restrict, wchar_t, mbstate_t * __restrict, locale_t);
|
||||||
|
int wcscoll_l(const wchar_t *, const wchar_t *, locale_t);
|
||||||
|
size_t
|
||||||
|
wcsftime_l(wchar_t * __restrict, size_t, const wchar_t * __restrict,
|
||||||
|
const struct tm * __restrict, locale_t);
|
||||||
|
size_t
|
||||||
|
wcsrtombs_l(char * __restrict, const wchar_t ** __restrict, size_t,
|
||||||
|
mbstate_t * __restrict, locale_t);
|
||||||
|
double wcstod_l(const wchar_t * __restrict, wchar_t ** __restrict, locale_t);
|
||||||
|
long
|
||||||
|
wcstol_l(const wchar_t * __restrict, wchar_t ** __restrict, int, locale_t);
|
||||||
|
unsigned long
|
||||||
|
wcstoul_l(const wchar_t * __restrict, wchar_t ** __restrict, int, locale_t);
|
||||||
|
int wcswidth_l(const wchar_t *, size_t, locale_t);
|
||||||
|
size_t
|
||||||
|
wcsxfrm_l(wchar_t * __restrict, const wchar_t * __restrict, size_t, locale_t);
|
||||||
|
int wctob_l(wint_t, locale_t);
|
||||||
|
int wcwidth_l(wchar_t, locale_t);
|
||||||
|
int wprintf_l(locale_t, const wchar_t * __restrict, ...);
|
||||||
|
int wscanf_l(locale_t, const wchar_t * __restrict, ...);
|
||||||
|
|
||||||
|
int
|
||||||
|
vfwscanf_l(FILE * __restrict, locale_t, const wchar_t * __restrict,
|
||||||
|
__va_list);
|
||||||
|
int vswscanf_l(const wchar_t * __restrict, locale_t,
|
||||||
|
const wchar_t *__restrict, __va_list);
|
||||||
|
int vwscanf_l(locale_t, const wchar_t * __restrict, __va_list);
|
||||||
|
float wcstof_l(const wchar_t * __restrict, wchar_t ** __restrict, locale_t);
|
||||||
|
long double
|
||||||
|
wcstold_l(const wchar_t * __restrict, wchar_t ** __restrict, locale_t);
|
||||||
|
long long
|
||||||
|
wcstoll_l(const wchar_t * __restrict, wchar_t ** __restrict, int, locale_t);
|
||||||
|
unsigned long long
|
||||||
|
wcstoull_l(const wchar_t * __restrict, wchar_t ** __restrict, int, locale_t);
|
||||||
|
size_t
|
||||||
|
mbsnrtowcs_l(wchar_t * __restrict, const char ** __restrict, size_t, size_t,
|
||||||
|
mbstate_t * __restrict, locale_t);
|
||||||
|
int wcscasecmp_l(const wchar_t *, const wchar_t *, locale_t);
|
||||||
|
int wcsncasecmp_l(const wchar_t *, const wchar_t *, size_t, locale_t);
|
||||||
|
size_t
|
||||||
|
wcsnrtombs_l(char * __restrict, const wchar_t ** __restrict, size_t, size_t,
|
||||||
|
mbstate_t * __restrict, locale_t);
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
struct lconv *localeconv_l(locale_t);
|
struct lconv *localeconv_l(locale_t);
|
||||||
__END_DECLS
|
__END_DECLS
|
||||||
|
|
||||||
|
@ -1,8 +0,0 @@
|
|||||||
# $FreeBSD$
|
|
||||||
|
|
||||||
NO_OBJ=
|
|
||||||
INCS= _ctype.h _inttypes.h _langinfo.h _locale.h _monetary.h _stdio.h\
|
|
||||||
_stdlib.h _string.h _time.h _wchar.h
|
|
||||||
INCSDIR=${INCLUDEDIR}/xlocale
|
|
||||||
|
|
||||||
.include <bsd.prog.mk>
|
|
@ -1,44 +0,0 @@
|
|||||||
/*-
|
|
||||||
* Copyright (c) 2011, 2012 The FreeBSD Foundation
|
|
||||||
* All rights reserved.
|
|
||||||
*
|
|
||||||
* This software was developed by David Chisnall under sponsorship from
|
|
||||||
* the FreeBSD Foundation.
|
|
||||||
*
|
|
||||||
* 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$
|
|
||||||
*/
|
|
||||||
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Extended locale versions of the locale-aware functions from inttypes.h.
|
|
||||||
* Include <inttypes.h> before <xlocale.h> to expose these.
|
|
||||||
*/
|
|
||||||
intmax_t strtoimax_l(const char * __restrict, char ** __restrict,
|
|
||||||
int, locale_t);
|
|
||||||
uintmax_t strtoumax_l(const char * __restrict, char ** __restrict, int,
|
|
||||||
locale_t);
|
|
||||||
intmax_t wcstoimax_l(const wchar_t * __restrict, wchar_t ** __restrict,
|
|
||||||
int , locale_t);
|
|
||||||
uintmax_t wcstoumax_l(const wchar_t * __restrict, wchar_t ** __restrict,
|
|
||||||
int, locale_t);
|
|
@ -1,42 +0,0 @@
|
|||||||
/*-
|
|
||||||
* Copyright (c) 2011, 2012 The FreeBSD Foundation
|
|
||||||
* All rights reserved.
|
|
||||||
*
|
|
||||||
* This software was developed by David Chisnall under sponsorship from
|
|
||||||
* the FreeBSD Foundation.
|
|
||||||
*
|
|
||||||
* 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$
|
|
||||||
*/
|
|
||||||
|
|
||||||
#ifndef _XLOCALE_LANGINFO_H
|
|
||||||
#define _XLOCALE_LANGINFO_H
|
|
||||||
|
|
||||||
#ifndef _LOCALE_T_DEFINED
|
|
||||||
#define _LOCALE_T_DEFINED
|
|
||||||
typedef struct _xlocale *locale_t;
|
|
||||||
#endif
|
|
||||||
|
|
||||||
char *nl_langinfo_l(nl_item, locale_t);
|
|
||||||
|
|
||||||
#endif /* _XLOCALE_LANGINFO_H */
|
|
@ -1,56 +0,0 @@
|
|||||||
/*-
|
|
||||||
* Copyright (c) 2011, 2012 The FreeBSD Foundation
|
|
||||||
* All rights reserved.
|
|
||||||
*
|
|
||||||
* This software was developed by David Chisnall under sponsorship from
|
|
||||||
* the FreeBSD Foundation.
|
|
||||||
*
|
|
||||||
* 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$
|
|
||||||
*/
|
|
||||||
|
|
||||||
#ifndef _XLOCALE_LOCALE_H
|
|
||||||
#define _XLOCALE_LOCALE_H
|
|
||||||
|
|
||||||
#define LC_COLLATE_MASK (1<<0)
|
|
||||||
#define LC_CTYPE_MASK (1<<1)
|
|
||||||
#define LC_MESSAGES_MASK (1<<2)
|
|
||||||
#define LC_MONETARY_MASK (1<<3)
|
|
||||||
#define LC_NUMERIC_MASK (1<<4)
|
|
||||||
#define LC_TIME_MASK (1<<5)
|
|
||||||
#define LC_ALL_MASK (LC_COLLATE_MASK | LC_CTYPE_MASK | LC_MESSAGES_MASK | \
|
|
||||||
LC_MONETARY_MASK | LC_NUMERIC_MASK | LC_TIME_MASK)
|
|
||||||
#define LC_GLOBAL_LOCALE ((locale_t)-1)
|
|
||||||
|
|
||||||
#ifndef _LOCALE_T_DEFINED
|
|
||||||
#define _LOCALE_T_DEFINED
|
|
||||||
typedef struct _xlocale *locale_t;
|
|
||||||
#endif
|
|
||||||
|
|
||||||
locale_t duplocale(locale_t base);
|
|
||||||
int freelocale(locale_t loc);
|
|
||||||
locale_t newlocale(int mask, const char *locale, locale_t base);
|
|
||||||
const char *querylocale(int mask, locale_t loc);
|
|
||||||
locale_t uselocale(locale_t loc);
|
|
||||||
|
|
||||||
#endif /* _XLOCALE_LOCALE_H */
|
|
@ -1,45 +0,0 @@
|
|||||||
/*-
|
|
||||||
* Copyright (c) 2011, 2012 The FreeBSD Foundation
|
|
||||||
* All rights reserved.
|
|
||||||
*
|
|
||||||
* This software was developed by David Chisnall under sponsorship from
|
|
||||||
* the FreeBSD Foundation.
|
|
||||||
*
|
|
||||||
* 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$
|
|
||||||
*/
|
|
||||||
|
|
||||||
#ifndef _LOCALE_T_DEFINED
|
|
||||||
#define _LOCALE_T_DEFINED
|
|
||||||
typedef struct _xlocale *locale_t;
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#if __POSIX_VISIBLE >= 200809 || defined(_XLOCALE_H_)
|
|
||||||
#ifndef _XLOCALE_MONETARY_H
|
|
||||||
#define _XLOCALE_MONETARY_H
|
|
||||||
|
|
||||||
ssize_t strfmon_l(char *, size_t, locale_t, const char *, ...)
|
|
||||||
__strfmonlike(4, 5);
|
|
||||||
|
|
||||||
#endif /* _XLOCALE_MONETARY_H */
|
|
||||||
#endif /* __POSIX_VISIBLE >= 200809 || defined(_XLOCALE_H_) */
|
|
@ -1,64 +0,0 @@
|
|||||||
/*-
|
|
||||||
* Copyright (c) 2011, 2012 The FreeBSD Foundation
|
|
||||||
* All rights reserved.
|
|
||||||
*
|
|
||||||
* This software was developed by David Chisnall under sponsorship from
|
|
||||||
* the FreeBSD Foundation.
|
|
||||||
*
|
|
||||||
* 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$
|
|
||||||
*/
|
|
||||||
|
|
||||||
int asprintf_l(char **, locale_t, const char *, ...) __printflike(3, 4);
|
|
||||||
int dprintf_l(int, locale_t, const char * __restrict, ...)
|
|
||||||
__printflike(3, 4);
|
|
||||||
int fprintf_l(FILE * __restrict, locale_t, const char * __restrict, ...)
|
|
||||||
__printflike(3, 4);
|
|
||||||
int fscanf_l(FILE * __restrict, locale_t, const char * __restrict, ...)
|
|
||||||
__scanflike(3, 4);
|
|
||||||
int printf_l(locale_t, const char * __restrict, ...) __printflike(2, 3);
|
|
||||||
int scanf_l(locale_t, const char * __restrict, ...) __scanflike(2, 3);
|
|
||||||
int snprintf_l(char * __restrict, size_t, locale_t,
|
|
||||||
const char * __restrict, ...) __printflike(4, 5);
|
|
||||||
int sprintf_l(char * __restrict, locale_t, const char * __restrict, ...)
|
|
||||||
__printflike(3, 4);
|
|
||||||
int sscanf_l(const char * __restrict, locale_t, const char * __restrict,
|
|
||||||
...) __scanflike(3, 4);
|
|
||||||
int vfprintf_l(FILE * __restrict, locale_t, const char * __restrict,
|
|
||||||
__va_list) __printflike(3, 0);
|
|
||||||
int vprintf_l(locale_t, const char * __restrict, __va_list)
|
|
||||||
__printflike(2, 0);
|
|
||||||
int vsprintf_l(char * __restrict, locale_t, const char * __restrict,
|
|
||||||
__va_list) __printflike(3, 0);
|
|
||||||
int vfscanf_l(FILE * __restrict, locale_t, const char * __restrict,
|
|
||||||
__va_list) __scanflike(3, 0);
|
|
||||||
int vscanf_l(locale_t, const char * __restrict, __va_list)
|
|
||||||
__scanflike(2, 0);
|
|
||||||
int vsnprintf_l(char * __restrict, size_t, locale_t,
|
|
||||||
const char * __restrict, __va_list) __printflike(4, 0);
|
|
||||||
int vsscanf_l(const char * __restrict, locale_t, const char * __restrict,
|
|
||||||
__va_list) __scanflike(3, 0);
|
|
||||||
int vdprintf_l(int, locale_t, const char * __restrict, __va_list)
|
|
||||||
__printflike(3, 0);
|
|
||||||
int vasprintf_l(char **, locale_t, const char *, __va_list)
|
|
||||||
__printflike(3, 0);
|
|
@ -1,59 +0,0 @@
|
|||||||
/*-
|
|
||||||
* Copyright (c) 2011, 2012 The FreeBSD Foundation
|
|
||||||
* All rights reserved.
|
|
||||||
*
|
|
||||||
* This software was developed by David Chisnall under sponsorship from
|
|
||||||
* the FreeBSD Foundation.
|
|
||||||
*
|
|
||||||
* 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$
|
|
||||||
*/
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Extended locale versions of the locale-aware functions from stdlib.h.
|
|
||||||
*
|
|
||||||
* Include <stdlib.h> before <xlocale.h> to expose these.
|
|
||||||
*/
|
|
||||||
double atof_l(const char *, locale_t);
|
|
||||||
int atoi_l(const char *, locale_t);
|
|
||||||
long atol_l(const char *, locale_t);
|
|
||||||
long long atoll_l(const char *, locale_t);
|
|
||||||
int mblen_l(const char *, size_t, locale_t);
|
|
||||||
size_t mbstowcs_l(wchar_t * __restrict,
|
|
||||||
const char * __restrict, size_t, locale_t);
|
|
||||||
int mbtowc_l(wchar_t * __restrict,
|
|
||||||
const char * __restrict, size_t, locale_t);
|
|
||||||
double strtod_l(const char *, char **, locale_t);
|
|
||||||
float strtof_l(const char *, char **, locale_t);
|
|
||||||
long strtol_l(const char *, char **, int, locale_t);
|
|
||||||
long double strtold_l(const char *, char **, locale_t);
|
|
||||||
long long strtoll_l(const char *, char **, int, locale_t);
|
|
||||||
unsigned long strtoul_l(const char *, char **, int, locale_t);
|
|
||||||
unsigned long long strtoull_l(const char *, char **, int, locale_t);
|
|
||||||
size_t wcstombs_l(char * __restrict,
|
|
||||||
const wchar_t * __restrict, size_t, locale_t);
|
|
||||||
int wctomb_l(char *, wchar_t, locale_t);
|
|
||||||
|
|
||||||
int ___mb_cur_max_l(locale_t);
|
|
||||||
#define MB_CUR_MAX_L(x) (___mb_cur_max_l(x))
|
|
||||||
|
|
@ -1,61 +0,0 @@
|
|||||||
/*-
|
|
||||||
* Copyright (c) 2011, 2012 The FreeBSD Foundation
|
|
||||||
* 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$
|
|
||||||
*/
|
|
||||||
|
|
||||||
#ifndef _LOCALE_T_DEFINED
|
|
||||||
#define _LOCALE_T_DEFINED
|
|
||||||
typedef struct _xlocale *locale_t;
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/*
|
|
||||||
* This file is included from both string.h and xlocale.h. We need to expose
|
|
||||||
* the declarations unconditionally if we are included from xlocale.h, but only
|
|
||||||
* if we are in POSIX2008 mode if included from string.h.
|
|
||||||
*/
|
|
||||||
|
|
||||||
#ifndef _XLOCALE_STRING1_H
|
|
||||||
#define _XLOCALE_STRING1_H
|
|
||||||
|
|
||||||
/*
|
|
||||||
* POSIX2008 functions
|
|
||||||
*/
|
|
||||||
int strcoll_l(const char *, const char *, locale_t);
|
|
||||||
size_t strxfrm_l(char *, const char *, size_t, locale_t);
|
|
||||||
#endif /* _XLOCALE_STRING1_H */
|
|
||||||
|
|
||||||
/*
|
|
||||||
* xlocale extensions
|
|
||||||
*/
|
|
||||||
#ifdef _XLOCALE_H_
|
|
||||||
#ifndef _XLOCALE_STRING2_H
|
|
||||||
#define _XLOCALE_STRING2_H
|
|
||||||
int strcasecmp_l(const char *, const char *, locale_t);
|
|
||||||
char *strcasestr_l(const char *, const char *, locale_t);
|
|
||||||
int strncasecmp_l(const char *, const char *, size_t, locale_t);
|
|
||||||
|
|
||||||
#endif /* _XLOCALE_STRING2_H */
|
|
||||||
#endif /* _XLOCALE_H_ */
|
|
@ -1,58 +0,0 @@
|
|||||||
/*-
|
|
||||||
* Copyright (c) 2011, 2012 The FreeBSD Foundation
|
|
||||||
* All rights reserved.
|
|
||||||
*
|
|
||||||
* This software was developed by David Chisnall under sponsorship from
|
|
||||||
* the FreeBSD Foundation.
|
|
||||||
*
|
|
||||||
* 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$
|
|
||||||
*/
|
|
||||||
|
|
||||||
#ifndef _LOCALE_T_DEFINED
|
|
||||||
#define _LOCALE_T_DEFINED
|
|
||||||
typedef struct _xlocale *locale_t;
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/*
|
|
||||||
* This file is included from both locale.h and xlocale.h. We need to expose
|
|
||||||
* the declarations unconditionally if we are included from xlocale.h, but only
|
|
||||||
* if we are in POSIX2008 mode if included from locale.h.
|
|
||||||
*/
|
|
||||||
#ifndef _XLOCALE_LOCALE1_H
|
|
||||||
#define _XLOCALE_LOCALE1_H
|
|
||||||
|
|
||||||
size_t strftime_l(char * __restrict, size_t, const char * __restrict,
|
|
||||||
const struct tm * __restrict, locale_t) __strftimelike(3, 0);
|
|
||||||
|
|
||||||
#endif /* _XLOCALE_LOCALE1_H */
|
|
||||||
|
|
||||||
#ifdef _XLOCALE_H_
|
|
||||||
#ifndef _XLOCALE_LOCALE2_H
|
|
||||||
#define _XLOCALE_LOCALE2_H
|
|
||||||
|
|
||||||
char *strptime_l(const char * __restrict, const char * __restrict,
|
|
||||||
struct tm * __restrict, locale_t);
|
|
||||||
|
|
||||||
#endif /* _XLOCALE_LOCALE2_H */
|
|
||||||
#endif /* _XLOCALE_H_ */
|
|
@ -1,133 +0,0 @@
|
|||||||
/*-
|
|
||||||
* Copyright (c) 2011, 2012 The FreeBSD Foundation
|
|
||||||
* All rights reserved.
|
|
||||||
*
|
|
||||||
* This software was developed by David Chisnall under sponsorship from
|
|
||||||
* the FreeBSD Foundation.
|
|
||||||
*
|
|
||||||
* 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$
|
|
||||||
*/
|
|
||||||
|
|
||||||
#ifndef _LOCALE_T_DEFINED
|
|
||||||
#define _LOCALE_T_DEFINED
|
|
||||||
typedef struct _xlocale *locale_t;
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifndef _XLOCALE_WCHAR1_H
|
|
||||||
#define _XLOCALE_WCHAR1_H
|
|
||||||
int wcscasecmp_l(const wchar_t *, const wchar_t *,
|
|
||||||
locale_t);
|
|
||||||
int wcsncasecmp_l(const wchar_t *, const wchar_t *, size_t,
|
|
||||||
locale_t);
|
|
||||||
int wcscoll_l(const wchar_t *, const wchar_t *, locale_t);
|
|
||||||
size_t wcsxfrm_l(wchar_t * __restrict,
|
|
||||||
const wchar_t * __restrict, size_t, locale_t);
|
|
||||||
|
|
||||||
#endif /* _XLOCALE_WCHAR1_H */
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Only declare the non-POSIX functions if we're included from xlocale.h.
|
|
||||||
*/
|
|
||||||
|
|
||||||
#ifdef _XLOCALE_H_
|
|
||||||
#ifndef _XLOCALE_WCHAR2_H
|
|
||||||
#define _XLOCALE_WCHAR2_H
|
|
||||||
|
|
||||||
wint_t btowc_l(int, locale_t);
|
|
||||||
wint_t fgetwc_l(FILE *, locale_t);
|
|
||||||
wchar_t *fgetws_l(wchar_t * __restrict, int, FILE * __restrict,
|
|
||||||
locale_t);
|
|
||||||
wint_t fputwc_l(wchar_t, FILE *, locale_t);
|
|
||||||
int fputws_l(const wchar_t * __restrict, FILE * __restrict,
|
|
||||||
locale_t);
|
|
||||||
int fwprintf_l(FILE * __restrict, locale_t,
|
|
||||||
const wchar_t * __restrict, ...);
|
|
||||||
int fwscanf_l(FILE * __restrict, locale_t,
|
|
||||||
const wchar_t * __restrict, ...);
|
|
||||||
wint_t getwc_l(FILE *, locale_t);
|
|
||||||
wint_t getwchar_l(locale_t);
|
|
||||||
size_t mbrlen_l(const char * __restrict, size_t,
|
|
||||||
mbstate_t * __restrict, locale_t);
|
|
||||||
size_t mbrtowc_l(wchar_t * __restrict,
|
|
||||||
const char * __restrict, size_t,
|
|
||||||
mbstate_t * __restrict, locale_t);
|
|
||||||
int mbsinit_l(const mbstate_t *, locale_t);
|
|
||||||
size_t mbsrtowcs_l(wchar_t * __restrict,
|
|
||||||
const char ** __restrict, size_t,
|
|
||||||
mbstate_t * __restrict, locale_t);
|
|
||||||
wint_t putwc_l(wchar_t, FILE *, locale_t);
|
|
||||||
wint_t putwchar_l(wchar_t, locale_t);
|
|
||||||
int swprintf_l(wchar_t * __restrict, size_t n, locale_t,
|
|
||||||
const wchar_t * __restrict, ...);
|
|
||||||
int swscanf_l(const wchar_t * __restrict, locale_t,
|
|
||||||
const wchar_t * __restrict, ...);
|
|
||||||
wint_t ungetwc_l(wint_t, FILE *, locale_t);
|
|
||||||
int vfwprintf_l(FILE * __restrict, locale_t,
|
|
||||||
const wchar_t * __restrict, __va_list);
|
|
||||||
int vswprintf_l(wchar_t * __restrict, size_t n, locale_t,
|
|
||||||
const wchar_t * __restrict, __va_list);
|
|
||||||
int vwprintf_l(locale_t, const wchar_t * __restrict,
|
|
||||||
__va_list);
|
|
||||||
size_t wcrtomb_l(char * __restrict, wchar_t,
|
|
||||||
mbstate_t * __restrict, locale_t);
|
|
||||||
size_t wcsftime_l(wchar_t * __restrict, size_t,
|
|
||||||
const wchar_t * __restrict,
|
|
||||||
const struct tm * __restrict, locale_t);
|
|
||||||
size_t wcsrtombs_l(char * __restrict,
|
|
||||||
const wchar_t ** __restrict, size_t,
|
|
||||||
mbstate_t * __restrict, locale_t);
|
|
||||||
double wcstod_l(const wchar_t * __restrict,
|
|
||||||
wchar_t ** __restrict, locale_t);
|
|
||||||
long wcstol_l(const wchar_t * __restrict,
|
|
||||||
wchar_t ** __restrict, int, locale_t);
|
|
||||||
unsigned long wcstoul_l(const wchar_t * __restrict,
|
|
||||||
wchar_t ** __restrict, int, locale_t);
|
|
||||||
int wcswidth_l(const wchar_t *, size_t, locale_t);
|
|
||||||
int wctob_l(wint_t, locale_t);
|
|
||||||
int wcwidth_l(wchar_t, locale_t);
|
|
||||||
int wprintf_l(locale_t, const wchar_t * __restrict, ...);
|
|
||||||
int wscanf_l(locale_t, const wchar_t * __restrict, ...);
|
|
||||||
int vfwscanf_l(FILE * __restrict, locale_t,
|
|
||||||
const wchar_t * __restrict, __va_list);
|
|
||||||
int vswscanf_l(const wchar_t * __restrict, locale_t,
|
|
||||||
const wchar_t *__restrict, __va_list);
|
|
||||||
int vwscanf_l(locale_t, const wchar_t * __restrict,
|
|
||||||
__va_list);
|
|
||||||
float wcstof_l(const wchar_t * __restrict,
|
|
||||||
wchar_t ** __restrict, locale_t);
|
|
||||||
long double wcstold_l(const wchar_t * __restrict,
|
|
||||||
wchar_t ** __restrict, locale_t);
|
|
||||||
long long wcstoll_l(const wchar_t * __restrict,
|
|
||||||
wchar_t ** __restrict, int, locale_t);
|
|
||||||
unsigned long long wcstoull_l(const wchar_t * __restrict,
|
|
||||||
wchar_t ** __restrict, int, locale_t);
|
|
||||||
size_t mbsnrtowcs_l(wchar_t * __restrict,
|
|
||||||
const char ** __restrict, size_t, size_t,
|
|
||||||
mbstate_t * __restrict, locale_t);
|
|
||||||
size_t wcsnrtombs_l(char * __restrict,
|
|
||||||
const wchar_t ** __restrict, size_t, size_t,
|
|
||||||
mbstate_t * __restrict, locale_t);
|
|
||||||
|
|
||||||
#endif /* _XLOCALE_WCHAR_H */
|
|
||||||
#endif /* _XLOCALE_H_ */
|
|
@ -194,7 +194,6 @@ FBSD_1.3 {
|
|||||||
wcstoull_l;
|
wcstoull_l;
|
||||||
wcstoumax_l;
|
wcstoumax_l;
|
||||||
__runes_for_locale;
|
__runes_for_locale;
|
||||||
_ThreadRuneLocale;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
FBSDprivate_1.0 {
|
FBSDprivate_1.0 {
|
||||||
|
@ -38,8 +38,6 @@
|
|||||||
#include <sys/cdefs.h>
|
#include <sys/cdefs.h>
|
||||||
__FBSDID("$FreeBSD$");
|
__FBSDID("$FreeBSD$");
|
||||||
|
|
||||||
#define __RUNETYPE_INTERNAL 1
|
|
||||||
|
|
||||||
#include <runetype.h>
|
#include <runetype.h>
|
||||||
#include <errno.h>
|
#include <errno.h>
|
||||||
#include <limits.h>
|
#include <limits.h>
|
||||||
@ -52,15 +50,6 @@ __FBSDID("$FreeBSD$");
|
|||||||
#include "mblocal.h"
|
#include "mblocal.h"
|
||||||
#include "setlocale.h"
|
#include "setlocale.h"
|
||||||
|
|
||||||
#undef _CurrentRuneLocale
|
|
||||||
extern _RuneLocale const *_CurrentRuneLocale;
|
|
||||||
#ifndef __NO_TLS
|
|
||||||
/*
|
|
||||||
* A cached version of the runes for this thread. Used by ctype.h
|
|
||||||
*/
|
|
||||||
_Thread_local const _RuneLocale *_ThreadRuneLocale;
|
|
||||||
#endif
|
|
||||||
|
|
||||||
extern int __mb_sb_limit;
|
extern int __mb_sb_limit;
|
||||||
|
|
||||||
extern _RuneLocale *_Read_RuneMagi(FILE *);
|
extern _RuneLocale *_Read_RuneMagi(FILE *);
|
||||||
@ -83,8 +72,7 @@ static void destruct_ctype(void *v)
|
|||||||
free(l->runes);
|
free(l->runes);
|
||||||
free(l);
|
free(l);
|
||||||
}
|
}
|
||||||
|
_RuneLocale *__getCurrentRuneLocale(void)
|
||||||
const _RuneLocale *__getCurrentRuneLocale(void)
|
|
||||||
{
|
{
|
||||||
return XLOCALE_CTYPE(__get_locale())->runes;
|
return XLOCALE_CTYPE(__get_locale())->runes;
|
||||||
}
|
}
|
||||||
@ -180,24 +168,9 @@ __wrap_setrunelocale(const char *locale)
|
|||||||
}
|
}
|
||||||
__mb_cur_max = __xlocale_global_ctype.__mb_cur_max;
|
__mb_cur_max = __xlocale_global_ctype.__mb_cur_max;
|
||||||
__mb_sb_limit = __xlocale_global_ctype.__mb_sb_limit;
|
__mb_sb_limit = __xlocale_global_ctype.__mb_sb_limit;
|
||||||
_CurrentRuneLocale = __xlocale_global_ctype.runes;
|
|
||||||
return (_LDP_LOADED);
|
return (_LDP_LOADED);
|
||||||
}
|
}
|
||||||
|
void *__ctype_load(const char *locale, locale_t unused)
|
||||||
#ifndef __NO_TLS
|
|
||||||
void
|
|
||||||
__set_thread_rune_locale(locale_t loc) {
|
|
||||||
|
|
||||||
if (loc == NULL) {
|
|
||||||
_ThreadRuneLocale = &_DefaultRuneLocale;
|
|
||||||
} else {
|
|
||||||
_ThreadRuneLocale = XLOCALE_CTYPE(loc)->runes;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
void *
|
|
||||||
__ctype_load(const char *locale, locale_t unused)
|
|
||||||
{
|
{
|
||||||
struct xlocale_ctype *l = calloc(sizeof(struct xlocale_ctype), 1);
|
struct xlocale_ctype *l = calloc(sizeof(struct xlocale_ctype), 1);
|
||||||
l->header.header.destructor = destruct_ctype;
|
l->header.header.destructor = destruct_ctype;
|
||||||
|
@ -251,7 +251,7 @@ const _RuneLocale _DefaultRuneLocale = {
|
|||||||
};
|
};
|
||||||
|
|
||||||
#undef _CurrentRuneLocale
|
#undef _CurrentRuneLocale
|
||||||
const _RuneLocale *_CurrentRuneLocale = &_DefaultRuneLocale;
|
_RuneLocale *_CurrentRuneLocale = (_RuneLocale*)&_DefaultRuneLocale;
|
||||||
|
|
||||||
_RuneLocale *
|
_RuneLocale *
|
||||||
__runes_for_locale(locale_t locale, int *mb_sb_limit)
|
__runes_for_locale(locale_t locale, int *mb_sb_limit)
|
||||||
|
@ -6,18 +6,17 @@
|
|||||||
* the FreeBSD Foundation.
|
* the FreeBSD Foundation.
|
||||||
*
|
*
|
||||||
* Redistribution and use in source and binary forms, with or without
|
* Redistribution and use in source and binary forms, with or without
|
||||||
* modification, are permitted provided that the following conditions
|
* modification, are permitted provided that the following conditions * are met:
|
||||||
* are met:
|
* 1. Redistributions of source code must retain the above copyright notice,
|
||||||
* 1. Redistributions of source code must retain the above copyright
|
* this list of conditions and the following disclaimer.
|
||||||
* notice, this list of conditions and the following disclaimer.
|
* 2. Redistributions in binary form must reproduce the above copyright notice,
|
||||||
* 2. Redistributions in binary form must reproduce the above copyright
|
* this list of conditions and the following disclaimer in the documentation
|
||||||
* notice, this list of conditions and the following disclaimer in the
|
* and/or other materials provided with the distribution.
|
||||||
* documentation and/or other materials provided with the distribution.
|
|
||||||
*
|
*
|
||||||
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
|
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
|
||||||
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||||
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||||
* ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
|
* ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
|
||||||
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
||||||
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
|
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
|
||||||
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
||||||
@ -32,7 +31,6 @@
|
|||||||
#include <pthread.h>
|
#include <pthread.h>
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
#include <runetype.h>
|
|
||||||
#include "libc_private.h"
|
#include "libc_private.h"
|
||||||
#include "xlocale_private.h"
|
#include "xlocale_private.h"
|
||||||
|
|
||||||
@ -52,17 +50,6 @@ extern struct xlocale_component __xlocale_global_messages;
|
|||||||
*/
|
*/
|
||||||
extern struct xlocale_component __xlocale_C_collate;
|
extern struct xlocale_component __xlocale_C_collate;
|
||||||
extern struct xlocale_component __xlocale_C_ctype;
|
extern struct xlocale_component __xlocale_C_ctype;
|
||||||
|
|
||||||
#ifndef __NO_TLS
|
|
||||||
/*
|
|
||||||
* The locale for this thread.
|
|
||||||
*/
|
|
||||||
_Thread_local locale_t __thread_locale;
|
|
||||||
#endif
|
|
||||||
/*
|
|
||||||
* Flag indicating that one or more per-thread locales exist.
|
|
||||||
*/
|
|
||||||
int __has_thread_locale;
|
|
||||||
/*
|
/*
|
||||||
* Private functions in setlocale.c.
|
* Private functions in setlocale.c.
|
||||||
*/
|
*/
|
||||||
@ -116,7 +103,6 @@ static locale_t thread_local_locale;
|
|||||||
|
|
||||||
static void init_key(void)
|
static void init_key(void)
|
||||||
{
|
{
|
||||||
|
|
||||||
pthread_key_create(&locale_info_key, xlocale_release);
|
pthread_key_create(&locale_info_key, xlocale_release);
|
||||||
pthread_setspecific(locale_info_key, (void*)42);
|
pthread_setspecific(locale_info_key, (void*)42);
|
||||||
if (pthread_getspecific(locale_info_key) == (void*)42) {
|
if (pthread_getspecific(locale_info_key) == (void*)42) {
|
||||||
@ -124,8 +110,6 @@ static void init_key(void)
|
|||||||
} else {
|
} else {
|
||||||
fake_tls = 1;
|
fake_tls = 1;
|
||||||
}
|
}
|
||||||
/* At least one per-thread locale has now been set. */
|
|
||||||
__has_thread_locale = 1;
|
|
||||||
__detect_path_locale();
|
__detect_path_locale();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -134,14 +118,12 @@ static pthread_once_t once_control = PTHREAD_ONCE_INIT;
|
|||||||
static locale_t
|
static locale_t
|
||||||
get_thread_locale(void)
|
get_thread_locale(void)
|
||||||
{
|
{
|
||||||
|
|
||||||
_once(&once_control, init_key);
|
_once(&once_control, init_key);
|
||||||
|
|
||||||
return (fake_tls ? thread_local_locale :
|
return (fake_tls ? thread_local_locale :
|
||||||
pthread_getspecific(locale_info_key));
|
pthread_getspecific(locale_info_key));
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef __NO_TLS
|
|
||||||
locale_t
|
locale_t
|
||||||
__get_locale(void)
|
__get_locale(void)
|
||||||
{
|
{
|
||||||
@ -149,13 +131,11 @@ __get_locale(void)
|
|||||||
return (l ? l : &__xlocale_global_locale);
|
return (l ? l : &__xlocale_global_locale);
|
||||||
|
|
||||||
}
|
}
|
||||||
#endif
|
|
||||||
|
|
||||||
static void
|
static void
|
||||||
set_thread_locale(locale_t loc)
|
set_thread_locale(locale_t loc)
|
||||||
{
|
{
|
||||||
|
pthread_once(&once_control, init_key);
|
||||||
_once(&once_control, init_key);
|
|
||||||
|
|
||||||
if (NULL != loc) {
|
if (NULL != loc) {
|
||||||
xlocale_retain((struct xlocale_refcounted*)loc);
|
xlocale_retain((struct xlocale_refcounted*)loc);
|
||||||
@ -169,10 +149,6 @@ set_thread_locale(locale_t loc)
|
|||||||
} else {
|
} else {
|
||||||
pthread_setspecific(locale_info_key, loc);
|
pthread_setspecific(locale_info_key, loc);
|
||||||
}
|
}
|
||||||
#ifndef __NO_TLS
|
|
||||||
__thread_locale = loc;
|
|
||||||
__set_thread_rune_locale(loc);
|
|
||||||
#endif
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -183,7 +159,6 @@ static void
|
|||||||
destruct_locale(void *l)
|
destruct_locale(void *l)
|
||||||
{
|
{
|
||||||
locale_t loc = l;
|
locale_t loc = l;
|
||||||
|
|
||||||
for (int type=0 ; type<XLC_LAST ; type++) {
|
for (int type=0 ; type<XLC_LAST ; type++) {
|
||||||
if (loc->components[type]) {
|
if (loc->components[type]) {
|
||||||
xlocale_release(loc->components[type]);
|
xlocale_release(loc->components[type]);
|
||||||
@ -202,7 +177,6 @@ static locale_t
|
|||||||
alloc_locale(void)
|
alloc_locale(void)
|
||||||
{
|
{
|
||||||
locale_t new = calloc(sizeof(struct _xlocale), 1);
|
locale_t new = calloc(sizeof(struct _xlocale), 1);
|
||||||
|
|
||||||
new->header.destructor = destruct_locale;
|
new->header.destructor = destruct_locale;
|
||||||
new->monetary_locale_changed = 1;
|
new->monetary_locale_changed = 1;
|
||||||
new->numeric_locale_changed = 1;
|
new->numeric_locale_changed = 1;
|
||||||
@ -219,23 +193,19 @@ copyflags(locale_t new, locale_t old)
|
|||||||
|
|
||||||
static int dupcomponent(int type, locale_t base, locale_t new)
|
static int dupcomponent(int type, locale_t base, locale_t new)
|
||||||
{
|
{
|
||||||
/* Always copy from the global locale, since it has mutable components.
|
/* Always copy from the global locale, since it has mutable components. */
|
||||||
*/
|
|
||||||
struct xlocale_component *src = base->components[type];
|
struct xlocale_component *src = base->components[type];
|
||||||
|
|
||||||
if (&__xlocale_global_locale == base) {
|
if (&__xlocale_global_locale == base) {
|
||||||
new->components[type] = constructors[type](src->locale, new);
|
new->components[type] = constructors[type](src->locale, new);
|
||||||
if (new->components[type]) {
|
if (new->components[type]) {
|
||||||
strncpy(new->components[type]->locale, src->locale,
|
strncpy(new->components[type]->locale, src->locale, ENCODING_LEN);
|
||||||
ENCODING_LEN);
|
|
||||||
}
|
}
|
||||||
} else if (base->components[type]) {
|
} else if (base->components[type]) {
|
||||||
new->components[type] = xlocale_retain(base->components[type]);
|
new->components[type] = xlocale_retain(base->components[type]);
|
||||||
} else {
|
} else {
|
||||||
/* If the component was NULL, return success - if base is a
|
/* If the component was NULL, return success - if base is a valid
|
||||||
* valid locale then the flag indicating that this isn't
|
* locale then the flag indicating that this isn't present should be
|
||||||
* present should be set. If it isn't a valid locale, then
|
* set. If it isn't a valid locale, then we're stuck anyway. */
|
||||||
* we're stuck anyway. */
|
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
return (0 != new->components[type]);
|
return (0 != new->components[type]);
|
||||||
@ -274,11 +244,9 @@ locale_t newlocale(int mask, const char *locale, locale_t base)
|
|||||||
if (useenv) {
|
if (useenv) {
|
||||||
realLocale = __get_locale_env(type);
|
realLocale = __get_locale_env(type);
|
||||||
}
|
}
|
||||||
new->components[type] =
|
new->components[type] = constructors[type](realLocale, new);
|
||||||
constructors[type](realLocale, new);
|
|
||||||
if (new->components[type]) {
|
if (new->components[type]) {
|
||||||
strncpy(new->components[type]->locale,
|
strncpy(new->components[type]->locale, realLocale, ENCODING_LEN);
|
||||||
realLocale, ENCODING_LEN);
|
|
||||||
} else {
|
} else {
|
||||||
success = 0;
|
success = 0;
|
||||||
break;
|
break;
|
||||||
@ -351,7 +319,7 @@ const char *querylocale(int mask, locale_t loc)
|
|||||||
return (NULL);
|
return (NULL);
|
||||||
if (loc->components[type])
|
if (loc->components[type])
|
||||||
return (loc->components[type]->locale);
|
return (loc->components[type]->locale);
|
||||||
return ("C");
|
return "C";
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -8,16 +8,16 @@
|
|||||||
* Redistribution and use in source and binary forms, with or without
|
* Redistribution and use in source and binary forms, with or without
|
||||||
* modification, are permitted provided that the following conditions
|
* modification, are permitted provided that the following conditions
|
||||||
* are met:
|
* are met:
|
||||||
* 1. Redistributions of source code must retain the above copyright
|
* 1. Redistributions of source code must retain the above copyright notice,
|
||||||
* notice, this list of conditions and the following disclaimer.
|
* this list of conditions and the following disclaimer.
|
||||||
* 2. Redistributions in binary form must reproduce the above copyright
|
* 2. Redistributions in binary form must reproduce the above copyright notice,
|
||||||
* notice, this list of conditions and the following disclaimer in the
|
* this list of conditions and the following disclaimer in the documentation
|
||||||
* documentation and/or other materials provided with the distribution.
|
* and/or other materials provided with the distribution.
|
||||||
*
|
*
|
||||||
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
|
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
|
||||||
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||||
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||||
* ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
|
* ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
|
||||||
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
||||||
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
|
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
|
||||||
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
||||||
@ -85,14 +85,14 @@ struct _xlocale {
|
|||||||
struct xlocale_refcounted header;
|
struct xlocale_refcounted header;
|
||||||
/** Components for the locale. */
|
/** Components for the locale. */
|
||||||
struct xlocale_component *components[XLC_LAST];
|
struct xlocale_component *components[XLC_LAST];
|
||||||
/** Flag indicating if components[XLC_MONETARY] has changed since the
|
/** Flag indicating if components[XLC_MONETARY] has changed since the last
|
||||||
* last call to localeconv_l() with this locale. */
|
* call to localeconv_l() with this locale. */
|
||||||
int monetary_locale_changed;
|
int monetary_locale_changed;
|
||||||
/** Flag indicating whether this locale is actually using a locale for
|
/** Flag indicating whether this locale is actually using a locale for
|
||||||
* LC_MONETARY (1), or if it should use the C default instead (0). */
|
* LC_MONETARY (1), or if it should use the C default instead (0). */
|
||||||
int using_monetary_locale;
|
int using_monetary_locale;
|
||||||
/** Flag indicating if components[XLC_NUMERIC] has changed since the
|
/** Flag indicating if components[XLC_NUMERIC] has changed since the last
|
||||||
* last call to localeconv_l() with this locale. */
|
* call to localeconv_l() with this locale. */
|
||||||
int numeric_locale_changed;
|
int numeric_locale_changed;
|
||||||
/** Flag indicating whether this locale is actually using a locale for
|
/** Flag indicating whether this locale is actually using a locale for
|
||||||
* LC_NUMERIC (1), or if it should use the C default instead (0). */
|
* LC_NUMERIC (1), or if it should use the C default instead (0). */
|
||||||
@ -169,39 +169,13 @@ extern void* __time_load(const char*, locale_t);
|
|||||||
extern struct _xlocale __xlocale_global_locale;
|
extern struct _xlocale __xlocale_global_locale;
|
||||||
extern struct _xlocale __xlocale_C_locale;
|
extern struct _xlocale __xlocale_C_locale;
|
||||||
|
|
||||||
/**
|
|
||||||
* Caches the rune table in TLS for fast access.
|
|
||||||
*/
|
|
||||||
void __set_thread_rune_locale(locale_t loc);
|
|
||||||
/**
|
|
||||||
* Flag indicating whether a per-thread locale has been set. If no per-thread
|
|
||||||
* locale has ever been set, then we always use the global locale.
|
|
||||||
*/
|
|
||||||
extern int __has_thread_locale;
|
|
||||||
#ifndef __NO_TLS
|
|
||||||
/**
|
|
||||||
* The per-thread locale. Avoids the need to use pthread lookup functions when
|
|
||||||
* getting the per-thread locale.
|
|
||||||
*/
|
|
||||||
extern _Thread_local locale_t __thread_locale;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns the current locale for this thread, or the global locale if none is
|
* Returns the current locale for this thread, or the global locale if none is
|
||||||
* set. The caller does not have to free the locale. The return value from
|
* set. The caller does not have to free the locale. The return value from
|
||||||
* this call is not guaranteed to remain valid after the locale changes. As
|
* this call is not guaranteed to remain valid after the locale changes. As
|
||||||
* such, this should only be called within libc functions.
|
* such, this should only be called within libc functions.
|
||||||
*/
|
*/
|
||||||
inline locale_t __get_locale(void)
|
|
||||||
{
|
|
||||||
|
|
||||||
if (!__has_thread_locale) {
|
|
||||||
return (&__xlocale_global_locale);
|
|
||||||
}
|
|
||||||
return (__thread_locale ? __thread_locale : &__xlocale_global_locale);
|
|
||||||
}
|
|
||||||
#else
|
|
||||||
locale_t __get_locale(void);
|
locale_t __get_locale(void);
|
||||||
#endif
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Two magic values are allowed for locale_t objects. NULL and -1. This
|
* Two magic values are allowed for locale_t objects. NULL and -1. This
|
||||||
|
@ -230,8 +230,7 @@
|
|||||||
#define _Alignof(e) alignof(e)
|
#define _Alignof(e) alignof(e)
|
||||||
#define _Noreturn [[noreturn]]
|
#define _Noreturn [[noreturn]]
|
||||||
#define _Static_assert(e, s) static_assert(e, s)
|
#define _Static_assert(e, s) static_assert(e, s)
|
||||||
/* FIXME: change this to thread_local when clang in base supports it */
|
#define _Thread_local thread_local
|
||||||
#define _Thread_local __thread
|
|
||||||
#elif defined(__STDC_VERSION__) && __STDC_VERSION__ >= 201112L
|
#elif defined(__STDC_VERSION__) && __STDC_VERSION__ >= 201112L
|
||||||
/* Do nothing. They are language keywords. */
|
/* Do nothing. They are language keywords. */
|
||||||
#else
|
#else
|
||||||
@ -401,18 +400,12 @@
|
|||||||
#define __printflike(fmtarg, firstvararg)
|
#define __printflike(fmtarg, firstvararg)
|
||||||
#define __scanflike(fmtarg, firstvararg)
|
#define __scanflike(fmtarg, firstvararg)
|
||||||
#define __format_arg(fmtarg)
|
#define __format_arg(fmtarg)
|
||||||
#define __strfmonlike(fmtarg, firstvararg)
|
|
||||||
#define __strftimelike(fmtarg, firstvararg)
|
|
||||||
#else
|
#else
|
||||||
#define __printflike(fmtarg, firstvararg) \
|
#define __printflike(fmtarg, firstvararg) \
|
||||||
__attribute__((__format__ (__printf__, fmtarg, firstvararg)))
|
__attribute__((__format__ (__printf__, fmtarg, firstvararg)))
|
||||||
#define __scanflike(fmtarg, firstvararg) \
|
#define __scanflike(fmtarg, firstvararg) \
|
||||||
__attribute__((__format__ (__scanf__, fmtarg, firstvararg)))
|
__attribute__((__format__ (__scanf__, fmtarg, firstvararg)))
|
||||||
#define __format_arg(fmtarg) __attribute__((__format_arg__ (fmtarg)))
|
#define __format_arg(fmtarg) __attribute__((__format_arg__ (fmtarg)))
|
||||||
#define __strfmonlike(fmtarg, firstvararg) \
|
|
||||||
__attribute__((__format__ (__strfmon__, fmtarg, firstvararg)))
|
|
||||||
#define __strftimelike(fmtarg, firstvararg) \
|
|
||||||
__attribute__((__format__ (__strftime__, fmtarg, firstvararg)))
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* Compiler-dependent macros that rely on FreeBSD-specific extensions. */
|
/* Compiler-dependent macros that rely on FreeBSD-specific extensions. */
|
||||||
@ -657,8 +650,4 @@
|
|||||||
#define __has_builtin(x) 0
|
#define __has_builtin(x) 0
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if defined(__arm) || defined(__mips)
|
|
||||||
#define __NO_TLS 1
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#endif /* !_SYS_CDEFS_H_ */
|
#endif /* !_SYS_CDEFS_H_ */
|
||||||
|
Loading…
Reference in New Issue
Block a user