Revisit the condition when to use multibyte parsing in strftime.
authorBruno Haible <bruno@clisp.org>
Sun, 18 Jan 2009 22:48:59 +0000 (23:48 +0100)
committerBruno Haible <bruno@clisp.org>
Sun, 18 Jan 2009 22:48:59 +0000 (23:48 +0100)
ChangeLog
lib/strftime.c
m4/strftime.m4

index 9105f12..b897725 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,11 @@
 2009-01-18  Bruno Haible  <bruno@clisp.org>
 
+       * 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  <bruno@clisp.org>
+
        * lib/strftime.c (MEMPCPY): Remove unused macro.
        * m4/strftime.m4 (gl_FUNC_STRFTIME): Don't test for mempcpy.
 
index 41b3511..ea425c4 100644 (file)
    along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
 
 #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 <config.h>
@@ -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 <wchar.h>
index ef0c202..15a8770 100644 (file)
@@ -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],