1.\" Copyright (c) 2011 The FreeBSD Foundation 2.\" All rights reserved. 3.\" 4.\" This documentation was written by David Chisnall under sponsorship from 5.\" the FreeBSD Foundation. 6.\" 7.\" Redistribution and use in source and binary forms, with or without 8.\" modification, are permitted provided that the following conditions 9.\" are met: 10.\" 1. Redistributions of source code must retain the above copyright 11.\" notice, this list of conditions and the following disclaimer. 12.\" 2. Redistributions in binary form must reproduce the above copyright 13.\" notice, this list of conditions and the following disclaimer in the 14.\" documentation and/or other materials provided with the distribution. 15.\" 16.\" THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND 17.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 18.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 19.\" ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE 20.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 21.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 22.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 23.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 24.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 25.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 26.\" SUCH DAMAGE. 27.\" 28.\" $FreeBSD: head/lib/libc/locale/xlocale.3 250244 2013-05-04 17:06:47Z pluknet $ 29.\" 30.Dd September 17, 2011 31.Dt XLOCALE 3 32.Os 33.Sh NAME 34.Nm xlocale 35.Nd Thread-safe extended locale support 36.Sh LIBRARY 37.Lb libc 38.Sh SYNOPSIS 39.In xlocale.h 40.Sh DESCRIPTION 41The extended locale support includes a set of functions for setting 42thread-local locales, 43as well convenience functions for performing locale-aware 44calls with a specified locale. 45.Pp 46The core of the xlocale API is the 47.Fa locale_t 48type. 49This is an opaque type encapsulating a locale. 50Instances of this can be either set as the locale for a specific thread or 51passed directly to the 52.Fa _l 53suffixed variants of various standard C functions. 54Two special 55.Fa locale_t 56values are available: 57.Bl -bullet -offset indent 58.It 59NULL refers to the current locale for the thread, 60or to the global locale if no locale has been set for this thread. 61.It 62.Dv LC_GLOBAL_LOCALE 63refers to the global locale. 64.El 65.Pp 66The global locale is the locale set with the 67.Xr setlocale 3 68function. 69.Sh SEE ALSO 70.Xr duplocale 3 , 71.Xr freelocale 3 , 72.Xr localeconv 3 , 73.Xr newlocale 3 , 74.Xr querylocale 3 , 75.Xr uselocale 3 76.Sh CONVENIENCE FUNCTIONS 77The xlocale API includes a number of 78.Fa _l 79suffixed convenience functions. 80These are variants of standard C functions 81that have been modified to take an explicit 82.Fa locale_t 83parameter as the final argument or, in the case of variadic functions, 84as an additional argument directly before the format string. 85Each of these functions accepts either NULL or 86.Dv LC_GLOBAL_LOCALE . 87In these functions, NULL refers to the C locale, 88rather than the thread's current locale. 89If you wish to use the thread's current locale, 90then use the unsuffixed version of the function. 91.Pp 92These functions are exposed by including 93.In xlocale.h 94.Em after 95including the relevant headers for the standard variant. 96For example, the 97.Xr strtol_l 3 98function is exposed by including 99.In xlocale.h 100after 101.In stdlib.h , 102which defines 103.Xr strtol 3 . 104.Pp 105For reference, 106a complete list of the locale-aware functions that are available in this form, 107along with the headers that expose them, is provided here: 108.Bl -tag -width ".In monetary.h" 109.It In wctype.h 110.Xr iswalnum_l 3 , 111.Xr iswalpha_l 3 , 112.Xr iswcntrl_l 3 , 113.Xr iswctype_l 3 , 114.Xr iswdigit_l 3 , 115.Xr iswgraph_l 3 , 116.Xr iswlower_l 3 , 117.Xr iswprint_l 3 , 118.Xr iswpunct_l 3 , 119.Xr iswspace_l 3 , 120.Xr iswupper_l 3 , 121.Xr iswxdigit_l 3 , 122.Xr towlower_l 3 , 123.Xr towupper_l 3 , 124.Xr wctype_l 3 , 125.It In ctype.h 126.Xr digittoint_l 3 , 127.Xr isalnum_l 3 , 128.Xr isalpha_l 3 , 129.Xr isblank_l 3 , 130.Xr iscntrl_l 3 , 131.Xr isdigit_l 3 , 132.Xr isgraph_l 3 , 133.Xr ishexnumber_l 3 , 134.Xr isideogram_l 3 , 135.Xr islower_l 3 , 136.Xr isnumber_l 3 , 137.Xr isphonogram_l 3 , 138.Xr isprint_l 3 , 139.Xr ispunct_l 3 , 140.Xr isrune_l 3 , 141.Xr isspace_l 3 , 142.Xr isspecial_l 3 , 143.Xr isupper_l 3 , 144.Xr isxdigit_l 3 , 145.Xr tolower_l 3 , 146.Xr toupper_l 3 147.It In inttypes.h 148.Xr strtoimax_l 3 , 149.Xr strtoumax_l 3 , 150.Xr wcstoimax_l 3 , 151.Xr wcstoumax_l 3 152.It In langinfo.h 153.Xr nl_langinfo_l 3 154.It In monetary.h 155.Xr strfmon_l 3 156.It In stdio.h 157.Xr asprintf_l 3 , 158.Xr fprintf_l 3 , 159.Xr fscanf_l 3 , 160.Xr printf_l 3 , 161.Xr scanf_l 3 , 162.Xr snprintf_l 3 , 163.Xr sprintf_l 3 , 164.Xr sscanf_l 3 , 165.Xr vasprintf_l 3 , 166.Xr vfprintf_l 3 , 167.Xr vfscanf_l 3 , 168.Xr vprintf_l 3 , 169.Xr vscanf_l 3 , 170.Xr vsnprintf_l 3 , 171.Xr vsprintf_l 3 , 172.Xr vsscanf_l 3 173.It In stdlib.h 174.Xr atof_l 3 , 175.Xr atoi_l 3 , 176.Xr atol_l 3 , 177.Xr atoll_l 3 , 178.Xr mblen_l 3 , 179.Xr mbstowcs_l 3 , 180.Xr mbtowc_l 3 , 181.Xr strtod_l 3 , 182.Xr strtof_l 3 , 183.Xr strtol_l 3 , 184.Xr strtold_l 3 , 185.Xr strtoll_l 3 , 186.Xr strtoul_l 3 , 187.Xr strtoull_l 3 , 188.Xr wcstombs_l 3 , 189.Xr wctomb_l 3 190.It In string.h 191.Xr strcoll_l 3 , 192.Xr strxfrm_l 3 , 193.Xr strcasecmp_l 3 , 194.Xr strcasestr_l 3 , 195.Xr strncasecmp_l 3 196.It In time.h 197.Xr strftime_l 3 198.Xr strptime_l 3 199.It In wchar.h 200.Xr btowc_l 3 , 201.Xr fgetwc_l 3 , 202.Xr fgetws_l 3 , 203.Xr fputwc_l 3 , 204.Xr fputws_l 3 , 205.Xr fwprintf_l 3 , 206.Xr fwscanf_l 3 , 207.Xr getwc_l 3 , 208.Xr getwchar_l 3 , 209.Xr mbrlen_l 3 , 210.Xr mbrtowc_l 3 , 211.Xr mbsinit_l 3 , 212.Xr mbsnrtowcs_l 3 , 213.Xr mbsrtowcs_l 3 , 214.Xr putwc_l 3 , 215.Xr putwchar_l 3 , 216.Xr swprintf_l 3 , 217.Xr swscanf_l 3 , 218.Xr ungetwc_l 3 , 219.Xr vfwprintf_l 3 , 220.Xr vfwscanf_l 3 , 221.Xr vswprintf_l 3 , 222.Xr vswscanf_l 3 , 223.Xr vwprintf_l 3 , 224.Xr vwscanf_l 3 , 225.Xr wcrtomb_l 3 , 226.Xr wcscoll_l 3 , 227.Xr wcsftime_l 3 , 228.Xr wcsnrtombs_l 3 , 229.Xr wcsrtombs_l 3 , 230.Xr wcstod_l 3 , 231.Xr wcstof_l 3 , 232.Xr wcstol_l 3 , 233.Xr wcstold_l 3 , 234.Xr wcstoll_l 3 , 235.Xr wcstoul_l 3 , 236.Xr wcstoull_l 3 , 237.Xr wcswidth_l 3 , 238.Xr wcsxfrm_l 3 , 239.Xr wctob_l 3 , 240.Xr wcwidth_l 3 , 241.Xr wprintf_l 3 , 242.Xr wscanf_l 3 243.It In wctype.h 244.Xr iswblank_l 3 , 245.Xr iswhexnumber_l 3 , 246.Xr iswideogram_l 3 , 247.Xr iswnumber_l 3 , 248.Xr iswphonogram_l 3 , 249.Xr iswrune_l 3 , 250.Xr iswspecial_l 3 , 251.Xr nextwctype_l 3 , 252.Xr towctrans_l 3 , 253.Xr wctrans_l 3 254.It In xlocale.h 255.Xr localeconv_l 3 256.El 257.Sh STANDARDS 258The functions 259conform to 260.St -p1003.1-2008 . 261.Sh HISTORY 262The xlocale APIs first appeared in Darwin 8.0. 263This implementation was written by David Chisnall, 264under sponsorship from the 265.Fx 266Foundation and first appeared in 267.Fx 9.1 . 268.Sh CAVEATS 269The 270.Xr setlocale 3 271function, and others in the family, refer to the global locale. 272Other functions that depend on the locale, however, 273will take the thread-local locale if one has been set. 274This means that the idiom of setting the locale using 275.Xr setlocale 3 , 276calling a locale-dependent function, 277and then restoring the locale will not 278have the expected behavior if the current thread has had a locale set using 279.Xr uselocale 3 . 280You should avoid this idiom and prefer to use the 281.Fa _l 282suffixed versions instead. 283