3 <<mblen>>---minimal multibyte length function
10 int mblen(const char *<[s]>, size_t <[n]>);
13 When _MB_CAPABLE is not defined, this is a minimal ANSI-conforming
14 implementation of <<mblen>>. In this case, the
15 only ``multi-byte character sequences'' recognized are single bytes,
16 and thus <<1>> is returned unless <[s]> is the null pointer or
17 has a length of 0 or is the empty string.
19 When _MB_CAPABLE is defined, this routine calls <<_mbtowc_r>> to perform
20 the conversion, passing a state variable to allow state dependent
21 decoding. The result is based on the locale setting which may
22 be restricted to a defined set of locales.
25 This implementation of <<mblen>> returns <<0>> if
26 <[s]> is <<NULL>> or the empty string; it returns <<1>> if not _MB_CAPABLE or
27 the character is a single-byte character; it returns <<-1>>
28 if the multi-byte character is invalid; otherwise it returns
29 the number of bytes in the multibyte character.
32 <<mblen>> is required in the ANSI C standard. However, the precise
33 effects vary with the locale.
35 <<mblen>> requires no supporting OS subroutines.
45 #ifdef _REENT_THREAD_LOCAL
46 _Thread_local _mbstate_t _tls_mblen_state
;
55 struct _reent
*reent
= _REENT
;
58 _REENT_CHECK_MISC(reent
);
59 state
= &(_REENT_MBLEN_STATE(reent
));
60 retval
= __MBTOWC (reent
, NULL
, s
, n
, state
);
69 #else /* not _MB_CAPABLE */
70 if (s
== NULL
|| *s
== '\0')
75 #endif /* not _MB_CAPABLE */
78 #endif /* !_REENT_ONLY */