bug-gnulib
[Top][All Lists]
Advanced

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

Re: __GLIBC__ and uClibc


From: Bruno Haible
Subject: Re: __GLIBC__ and uClibc
Date: Wed, 15 Dec 2010 20:33:27 +0100
User-agent: KMail/1.9.9

Hi Pádraig,

> >     * lib/freading.h: Treat uClibc like a non-glibc platform.
> >     ...
> >     * m4/memmem.m4 (gl_FUNC_MEMMEM_SIMPLE, gl_FUNC_MEMMEM): Likewise.
> >     * m4/printf.m4 (gl_PRINTF_DIRECTIVE_A): Likewise.
> >     * m4/strcasestr.m4 (gl_FUNC_STRCASESTR_SIMPLE, gl_FUNC_STRCASESTR):
> >     Likewise.
> >     * m4/strstr.m4 (gl_FUNC_STRSTR_SIMPLE, gl_FUNC_STRSTR): Likewise.
> >     ...

> I noticed a slight issue with this on code inspection.
> When cross-compiling for uClibc, memmem, printf, strcasestr and strstr
> would be replaced, which was a change from the original.

This is good and expected:
  - memmem in uClibc is defined by uClibc-0.9.31/libc/string/memmem.c
    which is an O(n²) algorithm and therefore needs to be replaced.
  - strstr is defined in uClibc-0.9.31/libc/string/strstr.c, also O(n²).
  - strcasestr is defined in uClibc-0.9.31/libc/string/strcasestr.c, also O(n²).
  - *printf is defined in uClibc-0.9.31/libc/stdio/_vfprintf.c or
    uClibc-0.9.31/libc/stdio/old_vfprintf.c, depending on the configuration,
    and uClibc-0.9.31/libc/stdio/_fpmaxtostr.c. In the latter code, the support
    of hexadecimal floats is conditional on configuration
    (__UCLIBC_HAS_HEXADECIMAL_FLOATS__).
So in all cases the cross-compilation guesses are correct.

> OK to apply the attached?

Certainly not. It would add a preprocessor directive syntax error in each
of the affected files. It also lacks comments and a rationale. You didn't
say that you have verified that each of the versions of memmem.c in
  http://git.uclibc.org/uClibc/log/libc/string/memmem.c
does not have the glibc bug. Likewise for
  http://git.uclibc.org/uClibc/log/libc/string/strstr.c
  http://git.uclibc.org/uClibc/log/libc/string/strcasestr.c


I'm applying this modified patch instead:

2010-12-15  Pádraig Brady <address@hidden>
            Bruno Haible  <address@hidden>

        Improve cross-compilation guesses for uClibc.
        * m4/memmem.m4 (gl_FUNC_MEMMEM_SIMPLE): When cross-compiling, assume
        that uClibc does not have the glibc bug.
        * m4/strcasestr.m4 (gl_FUNC_STRCASESTR_SIMPLE): Likewise.
        * m4/strstr.m4 (gl_FUNC_STRSTR_SIMPLE): Likewise.

--- m4/memmem.m4.orig   Wed Dec 15 20:24:56 2010
+++ m4/memmem.m4        Wed Dec 15 20:18:33 2010
@@ -1,4 +1,4 @@
-# memmem.m4 serial 20
+# memmem.m4 serial 21
 dnl Copyright (C) 2002, 2003, 2004, 2007, 2008, 2009, 2010 Free Software
 dnl Foundation, Inc.
 dnl This file is free software; the Free Software Foundation
@@ -29,14 +29,17 @@
     ]])],
         [gl_cv_func_memmem_works_always=yes],
         [gl_cv_func_memmem_works_always=no],
-        [dnl glibc 2.12 and cygwin 1.7.7 have a known bug.  Assume that it
-         dnl works on all other platforms, even if it is not linear.
+        [dnl glibc 2.12 and cygwin 1.7.7 have a known bug.  uClibc is not
+         dnl affected, since it uses different source code for memmem than
+         dnl glibc.
+         dnl Assume that it works on all other platforms, even if it is not
+         dnl linear.
          AC_EGREP_CPP([Lucky user],
            [
 #ifdef __GNU_LIBRARY__
  #include <features.h>
  #if ((__GLIBC__ == 2 && __GLIBC_MINOR__ > 12) || (__GLIBC__ > 2)) \
-     && !defined __UCLIBC__
+     || defined __UCLIBC__
   Lucky user
  #endif
 #elif defined __CYGWIN__
--- m4/strcasestr.m4.orig       Wed Dec 15 20:24:56 2010
+++ m4/strcasestr.m4    Wed Dec 15 20:23:39 2010
@@ -1,4 +1,4 @@
-# strcasestr.m4 serial 18
+# strcasestr.m4 serial 19
 dnl Copyright (C) 2005, 2007, 2008, 2009, 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,
@@ -32,14 +32,17 @@
       ]])],
           [gl_cv_func_strcasestr_works_always=yes],
           [gl_cv_func_strcasestr_works_always=no],
-          [dnl glibc 2.12 and cygwin 1.7.7 have a known bug.  Assume that it
-           dnl works on all other platforms, even if it is not linear.
+          [dnl glibc 2.12 and cygwin 1.7.7 have a known bug.  uClibc is not
+           dnl affected, since it uses different source code for strcasestr
+           dnl than glibc.
+           dnl Assume that it works on all other platforms, even if it is not
+           dnl linear.
            AC_EGREP_CPP([Lucky user],
              [
 #ifdef __GNU_LIBRARY__
  #include <features.h>
  #if ((__GLIBC__ == 2 && __GLIBC_MINOR__ > 12) || (__GLIBC__ > 2)) \
-     && !defined __UCLIBC__
+     || defined __UCLIBC__
   Lucky user
  #endif
 #elif defined __CYGWIN__
--- m4/strstr.m4.orig   Wed Dec 15 20:24:56 2010
+++ m4/strstr.m4        Wed Dec 15 20:21:00 2010
@@ -1,4 +1,4 @@
-# strstr.m4 serial 12
+# strstr.m4 serial 13
 dnl Copyright (C) 2008, 2009, 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,
@@ -25,14 +25,17 @@
     ]])],
         [gl_cv_func_strstr_works_always=yes],
         [gl_cv_func_strstr_works_always=no],
-        [dnl glibc 2.12 and cygwin 1.7.7 have a known bug.  Assume that it
-         dnl works on all other platforms, even if it is not linear.
+        [dnl glibc 2.12 and cygwin 1.7.7 have a known bug.  uClibc is not
+         dnl affected, since it uses different source code for strstr than
+         dnl glibc.
+         dnl Assume that it works on all other platforms, even if it is not
+         dnl linear.
          AC_EGREP_CPP([Lucky user],
            [
 #ifdef __GNU_LIBRARY__
  #include <features.h>
  #if ((__GLIBC__ == 2 && __GLIBC_MINOR__ > 12) || (__GLIBC__ > 2)) \
-     && !defined __UCLIBC__
+     || defined __UCLIBC__
   Lucky user
  #endif
 #elif defined __CYGWIN__



reply via email to

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