aboutsummaryrefslogtreecommitdiffstats
path: root/include/xlocale.h
diff options
context:
space:
mode:
authorDavid Chisnall <theraven@FreeBSD.org>2012-02-14 12:03:23 +0000
committerDavid Chisnall <theraven@FreeBSD.org>2012-02-14 12:03:23 +0000
commit82dd5016bd749d1d9e1531bd1703aebeecceab34 (patch)
treed83544c2e798a9a440baf38564df616970b2b0f5 /include/xlocale.h
parent9b1246ca382e294b0905b8fe1923d80524b74937 (diff)
downloadsrc-82dd5016bd749d1d9e1531bd1703aebeecceab34.tar.gz
src-82dd5016bd749d1d9e1531bd1703aebeecceab34.zip
Cleanup of xlocale:
- Address performance regressions encountered by das@ by caching per-thread data in TLS where available. - Add a __NO_TLS flag to cdefs.h to indicate where not available. - Reorganise the xlocale.h definitions into xlocale/*.h so that they can be included from multiple places. - Export the POSIX2008 subset of xlocale when POSIX2008 says it should be exported, independently of whether xlocale.h is included. - Fix the bug where programs using ctype functions always assumed ASCII unless recompiled. - Fix some style(9) violations. Reviewed by: brooks (mentor) Approved by: dim (mentor)
Notes
Notes: svn path=/head/; revision=231673
Diffstat (limited to 'include/xlocale.h')
-rw-r--r--include/xlocale.h227
1 files changed, 27 insertions, 200 deletions
diff --git a/include/xlocale.h b/include/xlocale.h
index 1f27894f9c97..cdeff3edddf8 100644
--- a/include/xlocale.h
+++ b/include/xlocale.h
@@ -1,5 +1,5 @@
/*-
- * Copyright (c) 2011 The FreeBSD Foundation
+ * Copyright (c) 2011, 2012 The FreeBSD Foundation
* All rights reserved.
*
* 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
* 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.
+ * 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
+ * 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)
@@ -33,224 +33,51 @@
#define _XLOCALE_H_
#include <locale.h>
-
__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_
-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);
+#include <xlocale/_string.h>
#endif
-/*
- * Extended locale versions of the locale-aware functions from inttypes.h.
- *
- * Include <inttypes.h> before <xlocale.h> to expose these.
- */
+
#ifdef _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);
+#include <xlocale/_inttypes.h>
#endif
-/*
- * Extended locale versions of the locale-aware functions from monetary.h.
- *
- * Include <monetary.h> before <xlocale.h> to expose these.
- */
+
#ifdef _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
- ;
+#include <xlocale/_monetary.h>
#endif
-/*
- * Extended locale versions of the locale-aware functions from stdlib.h.
- *
- * Include <stdlib.h> before <xlocale.h> to expose these.
- */
#ifdef _STDLIB_H_
-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))
-
+#include <xlocale/_stdlib.h>
#endif
-/*
- * Extended locale versions of the locale-aware functions from time.h.
- *
- * Include <time.h> before <xlocale.h> to expose these.
- */
+
#ifdef _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);
+#include <xlocale/_time.h>
#endif
+
#ifdef _LANGINFO_H_
-char *nl_langinfo_l(nl_item, locale_t);
+#include <xlocale/_langinfo.h>
#endif
+
#ifdef _CTYPE_H_
-#include <_xlocale_ctype.h>
+#include <xlocale/_ctype.h>
#endif
+
#ifdef _WCTYPE_H_
-#define XLOCALE_WCTYPES 1
-#include <_xlocale_ctype.h>
+#define _XLOCALE_WCTYPES 1
+#include <xlocale/_ctype.h>
#endif
#ifdef _STDIO_H_
-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 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);
+#include <xlocale/_stdio.h>
#endif
+
#ifdef _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, ...);
+#include <xlocale/_wchar.h>
+#endif
-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
struct lconv *localeconv_l(locale_t);
__END_DECLS