### 15.11 The locale support interfaces ¶

The newlib iconv library also has some interface functions (besides the `iconv`, `iconv_open` and `iconv_close` interfaces) which are intended for the Locale subsystem. All the locale-related code is placed in the lib/iconvnls.c file.

The following is the description of the locale-related interfaces:

- `_iconv_nls_open` - opens two iconv descriptors for "CCS -> wchar_t" and "wchar_t -> CCS" conversions. The normalized CCS name is passed in the function parameters. The wchar_t characters encoding is either ucs_2_internal or ucs_4_internal depending on size of wchar_t.
- `_iconv_nls_conv` - the function is similar to the `iconv` functions, but if there is no character in the output encoding which corresponds to the character in the input encoding, the default conversion isn’t performed (the `iconv` function sets such output characters to the `?` symbol and this is the behavior, which is specified in SUSv3).
- `_iconv_nls_get_state` - returns the current encoding’s shift state (the `mbstate_t` object).
- `_iconv_nls_set_state` sets the current encoding’s shift state (the `mbstate_t` object).
- `_iconv_nls_is_stateful` - checks whether the encoding is stateful or stateless.
- `_iconv_nls_get_mb_cur_max` - returns the maximum length (the maximum bytes number) of the encoding’s characters.