From 558383d62c8c63027e0f192b02a0fdd86690351e Mon Sep 17 00:00:00 2001 From: Matthias Clasen Date: Mon, 18 Dec 2006 14:38:07 +0000 Subject: [PATCH] Fix bug 161288: 2006-12-18 Matthias Clasen Fix bug 161288: * configure.in: Check for wcslen. * glib/gnulib/vasnprintf.c: Handle wcslen missing. --- ChangeLog | 8 ++++++++ configure.in | 2 +- glib/gnulib/vasnprintf.c | 25 ++++++++++++++++++++++++- 3 files changed, 33 insertions(+), 2 deletions(-) diff --git a/ChangeLog b/ChangeLog index b014992..9d2cd95 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,5 +1,13 @@ 2006-12-18 Matthias Clasen + Fix bug 161288: + + * configure.in: Check for wcslen. + + * glib/gnulib/vasnprintf.c: Handle wcslen missing. + +2006-12-18 Matthias Clasen + * glib/gkeyfile.c: Accept '@' in locale names. * glib/gkeyfile.c: Tighten up the check for allowed diff --git a/configure.in b/configure.in index 94e7901..e4b9189 100644 --- a/configure.in +++ b/configure.in @@ -917,7 +917,7 @@ gt_TYPE_WINT_T AC_TYPE_SIZE_T AC_CHECK_TYPES(ptrdiff_t) jm_AC_TYPE_INTMAX_T -AC_CHECK_FUNCS(snprintf) +AC_CHECK_FUNCS([snprintf wcslen]) AC_FUNC_SNPRINTF_C99 # Check if bcopy can be used for overlapping copies, if memmove isn't found. diff --git a/glib/gnulib/vasnprintf.c b/glib/gnulib/vasnprintf.c index e279fc0..c31075f 100644 --- a/glib/gnulib/vasnprintf.c +++ b/glib/gnulib/vasnprintf.c @@ -41,6 +41,29 @@ #include /* DBL_MAX_EXP, LDBL_MAX_EXP */ #include "printf-parse.h" +#ifdef HAVE_WCHAR_T +# ifdef HAVE_WCSLEN +# define local_wcslen wcslen +# else + /* Solaris 2.5.1 has wcslen() in a separate library libw.so. To avoid + a dependency towards this library, here is a local substitute. + Define this substitute only once, even if this file is included + twice in the same compilation unit. */ +# ifndef local_wcslen_defined +# define local_wcslen_defined 1 +static size_t +local_wcslen (const wchar_t *s) +{ + const wchar_t *ptr; + + for (ptr = s; *ptr != (wchar_t) 0; ptr++) + ; + return ptr - s; +} +# endif +# endif +#endif + /* For those losing systems which don't have 'alloca' we have to add some additional code emulating it. */ #ifdef HAVE_ALLOCA @@ -549,7 +572,7 @@ vasnprintf (char *resultbuf, size_t *lengthp, const char *format, va_list args) # ifdef HAVE_WCHAR_T if (type == TYPE_WIDE_STRING) tmp_length = - wcslen (a.arg[dp->arg_index].a.a_wide_string) + local_wcslen (a.arg[dp->arg_index].a.a_wide_string) * MB_CUR_MAX; else # endif -- 2.7.4