1.\" Copyright (c) 2011 The FreeBSD Foundation 2.\" 3.\" This documentation was written by David Chisnall under sponsorship from 4.\" the FreeBSD Foundation. 5.\" 6.\" Redistribution and use in source and binary forms, with or without 7.\" modification, are permitted provided that the following conditions 8.\" are met: 9.\" 1. Redistributions of source code must retain the above copyright 10.\" notice, this list of conditions and the following disclaimer. 11.\" 2. Redistributions in binary form must reproduce the above copyright 12.\" notice, this list of conditions and the following disclaimer in the 13.\" documentation and/or other materials provided with the distribution. 14.\" 15.\" THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND 16.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 17.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 18.\" ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE 19.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 20.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 21.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 22.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 23.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 24.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 25.\" SUCH DAMAGE. 26.\" 27.Dd September 17, 2011 28.Dt DUPLOCALE 3 29.Os 30.Sh NAME 31.Nm duplocale 32.Nd duplicate an locale 33.Sh LIBRARY 34.Lb libc 35.Sh SYNOPSIS 36.In locale.h 37.Ft locale_t 38.Fn duplocale "locale_t locale" 39.Sh DESCRIPTION 40Duplicates an existing 41.Fa locale_t 42returning a new 43.Fa locale_t 44that refers to the same locale values but has an independent internal state. 45Various functions, such as 46.Xr mblen 3 47require a persistent state. 48These functions formerly used static variables and calls to them from multiple 49threads had undefined behavior. 50They now use fields in the 51.Fa locale_t 52associated with the current thread by 53.Xr uselocale 3 . 54These calls are therefore only thread safe on threads with a unique per-thread 55locale. 56The locale returned by this call must be freed with 57.Xr freelocale 3 . 58.Sh SEE ALSO 59.Xr freelocale 3 , 60.Xr localeconv 3 , 61.Xr newlocale 3 , 62.Xr querylocale 3 , 63.Xr uselocale 3 , 64.Xr xlocale 3 65.Sh STANDARDS 66This function conforms to 67.St -p1003.1-2008 . 68.Sh BUGS 69Ideally, 70.Xr uselocale 3 71should make a copy of the 72.Fa locale_t 73implicitly to ensure thread safety, 74and a copy of the global locale should be installed lazily on each thread. 75The FreeBSD implementation does not do this, 76for compatibility with Darwin. 77