diff options
Diffstat (limited to 'gl')
-rw-r--r-- | gl/gnulib.mk | 1 | ||||
-rw-r--r-- | gl/m4/string_h.m4 | 1 | ||||
-rw-r--r-- | gl/string_.h | 28 |
3 files changed, 29 insertions, 1 deletions
diff --git a/gl/gnulib.mk b/gl/gnulib.mk index 50267550e5..2ea95af379 100644 --- a/gl/gnulib.mk +++ b/gl/gnulib.mk @@ -172,6 +172,7 @@ string.h: string_.h -e 's|@''GNULIB_MBSCSPN''@|$(GNULIB_MBSCSPN)|g' \ -e 's|@''GNULIB_MBSPBRK''@|$(GNULIB_MBSPBRK)|g' \ -e 's|@''GNULIB_MBSSPN''@|$(GNULIB_MBSSPN)|g' \ + -e 's|@''GNULIB_MBSSEP''@|$(GNULIB_MBSSEP)|g' \ -e 's|@''GNULIB_MBSTOK_R''@|$(GNULIB_MBSTOK_R)|g' \ -e 's|@''GNULIB_MEMMEM''@|$(GNULIB_MEMMEM)|g' \ -e 's|@''GNULIB_MEMPCPY''@|$(GNULIB_MEMPCPY)|g' \ diff --git a/gl/m4/string_h.m4 b/gl/m4/string_h.m4 index 14ed54ad54..80e95e1bb2 100644 --- a/gl/m4/string_h.m4 +++ b/gl/m4/string_h.m4 @@ -75,5 +75,6 @@ AC_DEFUN([gl_STRING_MODULE_INDICATOR_DEFAULTS], GNULIB_MBSCSPN=0; AC_SUBST([GNULIB_MBSCSPN]) GNULIB_MBSPBRK=0; AC_SUBST([GNULIB_MBSPBRK]) GNULIB_MBSSPN=0; AC_SUBST([GNULIB_MBSSPN]) + GNULIB_MBSSEP=0; AC_SUBST([GNULIB_MBSSEP]) GNULIB_MBSTOK_R=0; AC_SUBST([GNULIB_MBSTOK_R]) ]) diff --git a/gl/string_.h b/gl/string_.h index f26a1da620..113bfb4806 100644 --- a/gl/string_.h +++ b/gl/string_.h @@ -270,6 +270,12 @@ extern char *strpbrk (char const *__s, char const *__accept); # if ! @HAVE_STRSEP@ extern char *strsep (char **restrict __stringp, char const *restrict __delim); # endif +# if defined GNULIB_POSIXCHECK +# undef strsep +# define strsep(s,d) \ + (GL_LINK_WARNING ("strsep cannot work correctly on character strings in multibyte locales - use mbssep if you care about internationalization"), \ + strsep (s, d)) +# endif #elif defined GNULIB_POSIXCHECK # undef strsep # define strsep strsep_is_unportable__use_gnulib_module_strsep_for_portability @@ -415,6 +421,24 @@ extern char * mbspbrk (const char *string, const char *accept); extern size_t mbsspn (const char *string, const char *reject); #endif +#if @GNULIB_MBSSEP@ +/* Search the next delimiter (multibyte character listed in the character + string DELIM) starting at the character string *STRINGP. + If one is found, overwrite it with a NUL, and advance *STRINGP to point + to the next multibyte character after it. Otherwise, set *STRINGP to NULL. + If *STRINGP was already NULL, nothing happens. + Return the old value of *STRINGP. + + This is a variant of mbstok_r() that supports empty fields. + + Caveat: It modifies the original string. + Caveat: These functions cannot be used on constant strings. + Caveat: The identity of the delimiting character is lost. + + See also mbstok_r(). */ +extern char * mbssep (char **stringp, const char *delim); +#endif + #if @GNULIB_MBSTOK_R@ /* Parse the character string STRING into tokens separated by characters in the character string DELIM. @@ -429,7 +453,9 @@ extern size_t mbsspn (const char *string, const char *reject); Caveat: It modifies the original string. Caveat: These functions cannot be used on constant strings. - Caveat: The identity of the delimiting character is lost. */ + Caveat: The identity of the delimiting character is lost. + + See also mbssep(). */ extern char * mbstok_r (char *string, const char *delim, char **save_ptr); #endif |