From bb850628119c71318d1f20e2eb88bfa5e0c764e9 Mon Sep 17 00:00:00 2001 From: Bruno Haible Date: Sun, 18 Jan 2009 23:48:59 +0100 Subject: [PATCH] Revisit the condition when to use multibyte parsing in strftime. --- ChangeLog | 6 ++++++ lib/strftime.c | 17 ++++++++++------- m4/strftime.m4 | 4 ++-- 3 files changed, 18 insertions(+), 9 deletions(-) diff --git a/ChangeLog b/ChangeLog index 9105f1265..b897725ac 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,5 +1,11 @@ 2009-01-18 Bruno Haible + * m4/strftime.m4 (gl_FUNC_STRFTIME): Don't test for mblen and mbrlen. + * lib/strftime.c (HAVE_MBLEN, HAVE_MBRLEN): Remove macros. + (MULTIBYTE_IS_FORMAT_SAFE): Define to 1 on all platforms except OSF/1. + +2009-01-18 Bruno Haible + * lib/strftime.c (MEMPCPY): Remove unused macro. * m4/strftime.m4 (gl_FUNC_STRFTIME): Don't test for mempcpy. diff --git a/lib/strftime.c b/lib/strftime.c index 41b35113a..ea425c4e3 100644 --- a/lib/strftime.c +++ b/lib/strftime.c @@ -18,14 +18,11 @@ along with this program. If not, see . */ #ifdef _LIBC -# define HAVE_MBLEN 1 -# define HAVE_MBRLEN 1 # define HAVE_STRUCT_ERA_ENTRY 1 # define HAVE_TM_GMTOFF 1 # define HAVE_TM_ZONE 1 # define HAVE_TZNAME 1 # define HAVE_TZSET 1 -# define MULTIBYTE_IS_FORMAT_SAFE 1 # include "../locale/localeinfo.h" #else # include @@ -44,10 +41,16 @@ extern char *tzname[]; /* Do multibyte processing if multibytes are supported, unless multibyte sequences are safe in formats. Multibyte sequences are safe if they cannot contain byte sequences that look like format - conversion specifications. The GNU C Library uses UTF8 multibyte - encoding, which is safe for formats, but strftime.c can be used - with other C libraries that use unsafe encodings. */ -#define DO_MULTIBYTE (HAVE_MBLEN && ! MULTIBYTE_IS_FORMAT_SAFE) + conversion specifications. The multibyte encodings used by the + C library on the various platforms (UTF-8, GB2312, GBK, CP936, + GB18030, EUC-TW, BIG5, BIG5-HKSCS, CP950, EUC-JP, EUC-KR, CP949, + SHIFT_JIS, CP932, JOHAB) are safe for formats, because the byte '%' + cannot occur in a multibyte character except in the first byte. + But this does not hold for the DEC-HANYU encoding used on OSF/1. */ +#if !defined __osf__ +# define MULTIBYTE_IS_FORMAT_SAFE 1 +#endif +#define DO_MULTIBYTE (! MULTIBYTE_IS_FORMAT_SAFE) #if DO_MULTIBYTE # include diff --git a/m4/strftime.m4 b/m4/strftime.m4 index ef0c20288..15a87708e 100644 --- a/m4/strftime.m4 +++ b/m4/strftime.m4 @@ -1,4 +1,4 @@ -# serial 31 +# serial 32 # Copyright (C) 1996, 1997, 1999, 2000, 2001, 2002, 2003, 2004, 2005, # 2006, 2007, 2009 Free Software Foundation, Inc. @@ -25,7 +25,7 @@ AC_DEFUN([gl_FUNC_STRFTIME], AC_REQUIRE([AC_TYPE_MBSTATE_T]) AC_REQUIRE([gl_TM_GMTOFF]) - AC_CHECK_FUNCS_ONCE([mblen mbrlen tzset]) + AC_CHECK_FUNCS_ONCE([tzset]) AC_CHECK_HEADERS_ONCE([wchar.h]) AC_DEFINE([my_strftime], [nstrftime], -- 2.11.0