summaryrefslogtreecommitdiff
path: root/gl
diff options
context:
space:
mode:
Diffstat (limited to 'gl')
-rw-r--r--gl/gnulib.mk1
-rw-r--r--gl/m4/string_h.m41
-rw-r--r--gl/string_.h28
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