1 /*  Copyright (C) 2003     Manuel Novoa III
2  *
3  *  This library is free software; you can redistribute it and/or
4  *  modify it under the terms of the GNU Library General Public
5  *  License as published by the Free Software Foundation; either
6  *  version 2 of the License, or (at your option) any later version.
7  *
8  *  This library is distributed in the hope that it will be useful,
9  *  but WITHOUT ANY WARRANTY; without even the implied warranty of
10  *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
11  *  Library General Public License for more details.
12  *
13  *  You should have received a copy of the GNU Library General Public
14  *  License along with this library; if not, see
15  *  <http://www.gnu.org/licenses/>.
16  */
17 
18 #include <features.h>
19 #include "pthread.h"
20 #include "internals.h"
21 #include <locale.h>
22 #include <assert.h>
23 #include <stdlib.h>
24 
25 extern struct _pthread_descr_struct __pthread_initial_thread;
26 
__curlocale(void)27 __locale_t __curlocale(void)
28 {
29 	pthread_descr self = thread_self();
30 
31 #ifdef NDEBUG
32 	return THREAD_GETMEM (self, locale);
33 #else
34 	{
35 		__locale_t r = THREAD_GETMEM (self, locale);
36 
37 		assert(r);
38 
39 		return r;
40 	}
41 #endif
42 }
43 
__curlocale_set(__locale_t newloc)44 __locale_t __curlocale_set(__locale_t newloc)
45 {
46 	__locale_t oldloc;
47 	pthread_descr self = thread_self();
48 
49 	oldloc = THREAD_GETMEM (self, locale);
50 
51 	assert(newloc != LC_GLOBAL_LOCALE);
52 	assert(oldloc);
53 
54 	THREAD_SETMEM (self, locale, newloc);
55 
56 	return oldloc;
57 }
58