bug-gnulib
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

mbslen on MirBSD (was: select, nanosleep, mbslen, at-func2)


From: Bruno Haible
Subject: mbslen on MirBSD (was: select, nanosleep, mbslen, at-func2)
Date: Thu, 7 Jan 2010 23:41:52 +0100
User-agent: KMail/1.9.9

Hi,

Ian Beckwith cited:
> > Today, I tried a recent addition to our test laboratory: MirOS
> > (http://www.mirbsd.org/), formerly known as MirBSD, and an offshoot of
> > the OpenBSD development.
> >
> > Compilation failed in lib/mbslen.c because of a macro expansion of the
> > name mbslen.  I added protecting parentheses, and the build,
> > validation, and installation then succeeded.  The patch is trivial:
> >
> > % diff mbslen.c~ mbslen.c
> > 29c29
> > < mbslen (const char *string)
> > ---
> > > (mbslen) (const char *string)
> 
> It looks more like a workaround than a fix to me, hopefully you can
> figure out the right thing to do.

AIX, OSF/1, and MirBSD define an 'mbslen' function in libc. Only AIX
documents it. Only MirBSD defines it as a macro. Let's override this
macro:


2010-01-07  Bruno Haible  <address@hidden>

        mbslen: Avoid collision with system function.
        * lib/string.in.h [MirBSD]: Include <wchar.h>.
        (mbslen): Undefine first. Alias mbslen to rpl_mbslen.
        * m4/mbslen.m4: New file.
        * modules/mbslen (Files): Add it.
        (configure.ac): Invoke gl_MBSLEN.
        * m4/string_h.m4 (gl_HEADER_STRING_H_DEFAULTS): Initialize HAVE_MBSLEN.
        * modules/string (Makefile.am): Substitute HAVE_MBSLEN.
        Reported by Nelson H. F. Beebe <address@hidden>
        via Ian Beckwith <address@hidden>.

--- lib/string.in.h.orig        Thu Jan  7 23:35:48 2010
+++ lib/string.in.h     Thu Jan  7 23:33:27 2010
@@ -31,6 +31,11 @@
 /* NetBSD 5.0 mis-defines NULL.  */
 #include <stddef.h>
 
+/* MirBSD defines mbslen as a macro.  */
+#if @GNULIB_MBSLEN@ && defined __MirBSD__
+# include <wchar.h>
+#endif
+
 #ifndef __attribute__
 /* This feature is available in gcc versions 2.5 and later.  */
 # if __GNUC__ < 2 || (__GNUC__ == 2 && __GNUC_MINOR__ < 5)
@@ -439,6 +444,12 @@
 #if @GNULIB_MBSLEN@
 /* Return the number of multibyte characters in the character string STRING.
    This considers multibyte characters, unlike strlen, which counts bytes.  */
+# ifdef __MirBSD__  /* MirBSD defines mbslen as a macro.  Override it.  */
+#  undef mbslen
+# endif
+# if @HAVE_MBSLEN@  /* AIX, OSF/1, MirBSD define mbslen already in libc.  */
+#  define mbslen rpl_mbslen
+# endif
 extern size_t mbslen (const char *string) _GL_ARG_NONNULL ((1));
 #endif
 
Changing permissions from . to 100644
--- m4/mbslen.m4.orig   Tue Apr 14 12:31:40 2009
+++ m4/mbslen.m4        Thu Jan  7 23:35:05 2010
@@ -0,0 +1,16 @@
+# mbslen.m4 serial 1
+dnl Copyright (C) 2010 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+AC_DEFUN([gl_MBSLEN],
+[
+  AC_REQUIRE([gl_HEADER_STRING_H_DEFAULTS])
+  AC_CHECK_FUNCS_ONCE([mbslen])
+  if test $ac_cv_func_mbslen = yes; then
+    HAVE_MBSLEN=1
+  else
+    HAVE_MBSLEN=0
+  fi
+])
--- modules/mbslen.orig Thu Jan  7 23:35:48 2010
+++ modules/mbslen      Thu Jan  7 23:35:12 2010
@@ -3,12 +3,14 @@
 
 Files:
 lib/mbslen.c
+m4/mbslen.m4
 
 Depends-on:
 mbuiter
 string
 
 configure.ac:
+gl_MBSLEN
 gl_STRING_MODULE_INDICATOR([mbslen])
 
 Makefile.am:
--- m4/string_h.m4.orig Thu Jan  7 23:35:48 2010
+++ m4/string_h.m4      Thu Jan  7 23:31:22 2010
@@ -1,11 +1,11 @@
 # Configure a GNU-like replacement for <string.h>.
 
-# Copyright (C) 2007, 2008, 2009, 2010 Free Software Foundation, Inc.
+# Copyright (C) 2007-2010 Free Software Foundation, Inc.
 # This file is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
 # with or without modifications, as long as this notice is preserved.
 
-# serial 9
+# serial 10
 
 # Written by Paul Eggert.
 
@@ -64,7 +64,8 @@
   GNULIB_MBSTOK_R=0;    AC_SUBST([GNULIB_MBSTOK_R])
   GNULIB_STRERROR=0;    AC_SUBST([GNULIB_STRERROR])
   GNULIB_STRSIGNAL=0;   AC_SUBST([GNULIB_STRSIGNAL])
-  GNULIB_STRVERSCMP=0;   AC_SUBST([GNULIB_STRVERSCMP])
+  GNULIB_STRVERSCMP=0;  AC_SUBST([GNULIB_STRVERSCMP])
+  HAVE_MBSLEN=0;        AC_SUBST([HAVE_MBSLEN])
   dnl Assume proper GNU behavior unless another module says otherwise.
   HAVE_DECL_MEMMEM=1;           AC_SUBST([HAVE_DECL_MEMMEM])
   HAVE_MEMPCPY=1;               AC_SUBST([HAVE_MEMPCPY])
--- modules/string.orig Thu Jan  7 23:35:48 2010
+++ modules/string      Thu Jan  7 23:29:38 2010
@@ -59,6 +59,7 @@
              -e 's|@''GNULIB_STRERROR''@|$(GNULIB_STRERROR)|g' \
              -e 's|@''GNULIB_STRSIGNAL''@|$(GNULIB_STRSIGNAL)|g' \
              -e 's|@''GNULIB_STRVERSCMP''@|$(GNULIB_STRVERSCMP)|g' \
+             -e 's|@''HAVE_MBSLEN''@|$(HAVE_MBSLEN)|g' \
              -e 's|@''HAVE_DECL_MEMMEM''@|$(HAVE_DECL_MEMMEM)|g' \
              -e 's|@''HAVE_MEMPCPY''@|$(HAVE_MEMPCPY)|g' \
              -e 's|@''HAVE_DECL_MEMRCHR''@|$(HAVE_DECL_MEMRCHR)|g' \




reply via email to

[Prev in Thread] Current Thread [Next in Thread]