Commit Graph

11 Commits

Author SHA1 Message Date
Pekka Seppänen 766f1beb4d Reentrancy, use _REENT_ERRNO()
Use _REENT_ERRNO() macro to access errno.  This encapsulation is
required, as errno might be either _errno member of struct _reent,
_tls_errno or any such implementation detail.
2023-09-11 09:23:05 +02:00
Corinna Vinschen 606373e7d2 newlocale: set errno to ENOENT if __loadlocale fails
__loadlocale never sets errno, but newlocale is supposed to
return ENOENT if the locale isn't valid.

Fixes: aefd8b5b51 ("Implement newlocale, freelocale, duplocale, uselocale")
Signed-off-by: Corinna Vinschen <corinna@vinschen.de>
2023-03-24 12:44:52 +01:00
Corinna Vinschen 85be74f295 newlocale: fix crash when trying to write to __C_locale
This simple testcase:

  locale_t st = newlocale(LC_ALL_MASK, "C", (locale_t)0);
  locale_t st2 = newlocale(LC_CTYPE_MASK, "en_US.UTF-8", st);

is sufficient to reproduce a crash in _newlocale_r.  After the first call
to newlocale, `st' points to __C_locale, which is const.  When using `st'
as locale base in the second call, _newlocale_r tries to set pointers
inside base to NULL.  This is bad if base is __C_locale, obviously.

Add a test to avoid trying to overwrite pointer values inside base if
base is __C_locale.

Signed-off-by: Corinna Vinschen <corinna@vinschen.de>
2022-08-12 12:29:26 +02:00
Corinna Vinschen ccea3b45b0 newlib: newlocale: fix typo rendering ctype_ptr invalid
Signed-off-by: Corinna Vinschen <corinna@vinschen.de>
2018-08-08 09:26:32 +02:00
Yaakov Selkowitz 59235deeec locale: remove TRAD_SYNOPSIS
Signed-off-by: Yaakov Selkowitz <yselkowi@redhat.com>
2017-12-01 03:41:50 -06:00
Corinna Vinschen 34aded1f54 Fix check for empty locale string in newlocale
The original test is broken.  It tests for a NULL locale which
isn't just wrong, it simply can't occur at this point due to an
earlier check for a NULL locale string.  Thus, the locale info
for a category is never taken from the environment.

Fixes Coverty CID 153467.

Also, add comment.

Also, add some parens for readability.

Signed-off-by: Corinna Vinschen <corinna@vinschen.de>
2016-10-22 20:22:20 +02:00
Corinna Vinschen 3f36c6fa62 Add __get_C_locale inline function and fix new locale code for !_MB_CAPABLE targets
Only access "C" locale using the new __get_C_locale inline function.
Enable __global_locale for !_MB_CAPABLE targets.  Accommodate !_MB_CAPABLE
targets in new locale code.

Signed-off-by: Corinna Vinschen <corinna@vinschen.de>
2016-08-23 17:57:06 +02:00
Corinna Vinschen f4fb06ce17 Add/change a few #ifdef comments in locale code for clearness
Signed-off-by: Corinna Vinschen <corinna@vinschen.de>
2016-08-23 12:43:40 +02:00
Corinna Vinschen 5ef60b7e6a Add documentation for duplocale, freelocale, newlocale, and uselocale.
Signed-off-by: Corinna Vinschen <corinna@vinschen.de>
2016-08-15 17:34:40 +02:00
Corinna Vinschen d7281b92ab Fix multiple thinkos in newlocale
- Setting the categories strings in tmp_locale short-circuits
  __loadlocale.  Use a new_categories array instead, just as in
  _setlocale_r.

- If we have a base, copy over the *not* defined categories in
  category_mask in the first place.  Rearrange loop accordingly.

- Free base right in newlocale.

Signed-off by: Corinna Vinschen <corinna@vinschen.de>
2016-08-15 10:56:58 +02:00
Corinna Vinschen 956565be70 Move localeconv, duplocale, freelocale, newlocale, uselocale into separate files
Signed-off by: Corinna Vinschen <corinna@vinschen.de>
2016-08-15 10:56:57 +02:00