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.\" $FreeBSD$ 28.\" 29.Dd September 17, 2011 30.Dt DUPLOCALE 3 31.Os 32.Sh NAME 33.Nm duplocale 34.Nd duplicate an locale 35.Sh LIBRARY 36.Lb libc 37.Sh SYNOPSIS 38.In locale.h 39.Ft locale_t 40.Fn duplocale "locale_t locale" 41.Sh DESCRIPTION 42Duplicates an existing 43.Fa locale_t 44returning a new 45.Fa locale_t 46that refers to the same locale values but has an independent internal state. 47Various functions, such as 48.Xr mblen 3 49require a persistent state. 50These functions formerly used static variables and calls to them from multiple 51threads had undefined behavior. 52They now use fields in the 53.Fa locale_t 54associated with the current thread by 55.Xr uselocale 3 . 56These calls are therefore only thread safe on threads with a unique per-thread 57locale. 58The locale returned by this call must be freed with 59.Xr freelocale 3 . 60.Sh SEE ALSO 61.Xr freelocale 3 , 62.Xr localeconv 3 , 63.Xr newlocale 3 , 64.Xr querylocale 3 , 65.Xr uselocale 3 , 66.Xr xlocale 3 67.Sh STANDARDS 68This function conforms to 69.St -p1003.1-2008 . 70.Sh BUGS 71Ideally, 72.Xr uselocale 3 73should make a copy of the 74.Fa locale_t 75implicitly to ensure thread safety, 76and a copy of the global locale should be installed lazily on each thread. 77The FreeBSD implementation does not do this, 78for compatibility with Darwin. 79