[444] | 1 | /* |
---|
| 2 | FUNCTION |
---|
| 3 | <<uselocale>>---free resources allocated for a locale object |
---|
| 4 | |
---|
| 5 | INDEX |
---|
| 6 | uselocale |
---|
| 7 | |
---|
| 8 | INDEX |
---|
| 9 | _uselocale_r |
---|
| 10 | |
---|
| 11 | SYNOPSIS |
---|
| 12 | #include <locale.h> |
---|
| 13 | locale_t uselocale(locale_t <[locobj]>); |
---|
| 14 | |
---|
| 15 | locale_t _uselocale_r(void *<[reent]>, locale_t <[locobj]>); |
---|
| 16 | |
---|
| 17 | DESCRIPTION |
---|
| 18 | The <<uselocale>> function shall set the current locale for the current |
---|
| 19 | thread to the locale represented by newloc. |
---|
| 20 | |
---|
| 21 | The value for the newloc argument shall be one of the following: |
---|
| 22 | |
---|
| 23 | 1. A value returned by the <<newlocale>> or <<duplocale>> functions |
---|
| 24 | |
---|
| 25 | 2. The special locale object descriptor LC_GLOBAL_LOCALE |
---|
| 26 | |
---|
| 27 | 3. (locale_t) <<0>> |
---|
| 28 | |
---|
| 29 | Once the <<uselocale>> function has been called to install a thread-local |
---|
| 30 | locale, the behavior of every interface using data from the current |
---|
| 31 | locale shall be affected for the calling thread. The current locale for |
---|
| 32 | other threads shall remain unchanged. |
---|
| 33 | |
---|
| 34 | If the newloc argument is (locale_t) <<0>>, the object returned is the |
---|
| 35 | current locale or LC_GLOBAL_LOCALE if there has been no previous call to |
---|
| 36 | <<uselocale>> for the current thread. |
---|
| 37 | |
---|
| 38 | If the newloc argument is LC_GLOBAL_LOCALE, the thread shall use the |
---|
| 39 | global locale determined by the <<setlocale>> function. |
---|
| 40 | |
---|
| 41 | RETURNS |
---|
| 42 | Upon successful completion, the <<uselocale>> function shall return the |
---|
| 43 | locale handle from the previous call for the current thread, or |
---|
| 44 | LC_GLOBAL_LOCALE if there was no such previous call. Otherwise, |
---|
| 45 | <<uselocale>> shall return (locale_t) <<0>> and set errno to indicate |
---|
| 46 | the error. |
---|
| 47 | |
---|
| 48 | |
---|
| 49 | PORTABILITY |
---|
| 50 | <<uselocale>> is POSIX-1.2008. |
---|
| 51 | */ |
---|
| 52 | |
---|
| 53 | #include <newlib.h> |
---|
| 54 | #include <reent.h> |
---|
| 55 | #include <stdlib.h> |
---|
| 56 | #include "setlocale.h" |
---|
| 57 | |
---|
| 58 | struct __locale_t * |
---|
| 59 | _uselocale_r (struct _reent *p, struct __locale_t *newloc) |
---|
| 60 | { |
---|
| 61 | struct __locale_t *current_locale; |
---|
| 62 | |
---|
| 63 | current_locale = __get_locale_r (p); |
---|
| 64 | if (!current_locale) |
---|
| 65 | current_locale = LC_GLOBAL_LOCALE; |
---|
| 66 | if (newloc == LC_GLOBAL_LOCALE) |
---|
| 67 | p->_locale = NULL; |
---|
| 68 | else if (newloc) |
---|
| 69 | p->_locale = newloc; |
---|
| 70 | return current_locale; |
---|
| 71 | } |
---|
| 72 | |
---|
| 73 | #ifndef _REENT_ONLY |
---|
| 74 | struct __locale_t * |
---|
| 75 | uselocale (struct __locale_t *newloc) |
---|
| 76 | { |
---|
| 77 | return _uselocale_r (_REENT, newloc); |
---|
| 78 | } |
---|
| 79 | #endif |
---|