[Top][All Lists]
[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' \
- select, nanosleep, mbslen, at-func2, Ian Beckwith, 2010/01/06
- at-func2 (was: select, nanosleep, mbslen, at-func2), Eric Blake, 2010/01/06
- select (was: select, nanosleep, mbslen, at-func2), Eric Blake, 2010/01/06
- mbslen on MirBSD (was: select, nanosleep, mbslen, at-func2),
Bruno Haible <=