bug-gnulib
[Top][All Lists]
Advanced

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

Re: [PATCH] tests: avoid warnings due to implicit declaration of memset


From: Bruno Haible
Subject: Re: [PATCH] tests: avoid warnings due to implicit declaration of memset
Date: Mon, 10 Aug 2009 00:25:55 +0200
User-agent: KMail/1.9.9

Jim Meyering wrote:
> Ok to push this fix?
> 
> +     * tests/test-select-stdin.c: Include <string.h> for decl of memset,

No. test-select-stdin.c does not use memset(), therefore there is no reason
for this file to include <string.h>.

The memset() call that the warnings refers to comes from an FD_ZERO
expansion. The problem is that Solaris' <sys/select.h> is only really
complete when accompanied with a #include <string.h>. So let's fix that.

I'm applying this:


2009-08-09  Bruno Haible  <address@hidden>

        Make <sys/select.h> really self-contained, also on Solaris 10.
        * lib/sys_select.in.h: Include <string.h>.
        * m4/sys_select_h.m4 (gl_HEADER_SYS_SELECT): Test also against
        Solaris 10 problem.
        * tests/test-sys_select.c (main): Add check that FD_ZERO can be used.
        * doc/posix-headers/sys_select.texi: Mention the Solaris 10 problem.
        Reported by Jim Meyering.

--- doc/posix-headers/sys_select.texi.orig      2009-08-10 00:20:23.000000000 
+0200
+++ doc/posix-headers/sys_select.texi   2009-08-09 23:55:27.000000000 +0200
@@ -16,6 +16,10 @@
 @item
 This header file does not define @code{struct timeval} on some platforms:
 OSF/1 4.0.
address@hidden
+This header file is not self-contained --- it requires @code{<string.h>}
+before @code{FD_ZERO} can be used --- on some platforms:
+Solaris 10.
 @end itemize
 
 Portability problems not fixed by Gnulib:
--- lib/sys_select.in.h.orig    2009-08-10 00:20:23.000000000 +0200
+++ lib/sys_select.in.h 2009-08-09 23:58:22.000000000 +0200
@@ -42,9 +42,13 @@
 # include <sys/types.h>
 
 /* On OSF/1 4.0, <sys/select.h> provides only a forward declaration
-   of 'struct timeval', and no definition of this type..  */
+   of 'struct timeval', and no definition of this type.  */
 # include <sys/time.h>
 
+/* On Solaris 10, <sys/select.h> provides an FD_ZERO implementation
+   that relies on memset(), but without including <string.h>.  */
+# include <string.h>
+
 /* The include_next requires a split double-inclusion guard.  */
 # @INCLUDE_NEXT@ @NEXT_SYS_SELECT_H@
 
--- m4/sys_select_h.m4.orig     2009-08-10 00:20:23.000000000 +0200
+++ m4/sys_select_h.m4  2009-08-10 00:06:57.000000000 +0200
@@ -1,4 +1,4 @@
-# sys_select_h.m4 serial 7
+# sys_select_h.m4 serial 8
 dnl Copyright (C) 2006-2009 Free Software Foundation, Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
@@ -11,10 +11,39 @@
   AC_CACHE_CHECK([whether <sys/select.h> is self-contained],
     [gl_cv_header_sys_select_h_selfcontained],
     [
+      dnl Test against two bugs:
+      dnl 1. On many platforms, <sys/select.h> assumes prior inclusion of
+      dnl    <sys/types.h>.
+      dnl 2. On OSF/1 4.0, <sys/select.h> provides only a forward declaration
+      dnl    of 'struct timeval', and no definition of this type.
       AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <sys/select.h>]],
                                         [[struct timeval b;]])],
         [gl_cv_header_sys_select_h_selfcontained=yes],
         [gl_cv_header_sys_select_h_selfcontained=no])
+      dnl Test against another bug:
+      dnl 3. On Solaris 10, <sys/select.h> provides an FD_ZERO implementation
+      dnl    that relies on memset(), but without including <string.h>.
+      if test $gl_cv_header_sys_select_h_selfcontained = yes; then
+        AC_COMPILE_IFELSE(
+          [AC_LANG_PROGRAM([[#include <sys/select.h>]],
+                           [[int memset; int bzero;]])
+          ],
+          [AC_LINK_IFELSE(
+             [AC_LANG_PROGRAM([[#include <sys/select.h>]], [[
+                  #undef memset
+                  #define memset nonexistent_memset
+                  extern void *memset (void *, int, unsigned long);
+                  #undef bzero
+                  #define bzero nonexistent_bzero
+                  extern void bzero (void *, unsigned long);
+                  fd_set fds;
+                  FD_ZERO (&fds);
+                ]])
+             ],
+             [],
+             [gl_cv_header_sys_select_h_selfcontained=no])
+          ])
+      fi
     ])
   if test $gl_cv_header_sys_select_h_selfcontained = yes; then
     SYS_SELECT_H=''
--- tests/test-sys_select.c.orig        2009-08-10 00:20:23.000000000 +0200
+++ tests/test-sys_select.c     2009-08-09 23:50:11.000000000 +0200
@@ -1,5 +1,5 @@
 /* Test of <sys/select.h> substitute.
-   Copyright (C) 2007-2008 Free Software Foundation, Inc.
+   Copyright (C) 2007-2009 Free Software Foundation, Inc.
 
    This program is free software: you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
@@ -26,5 +26,10 @@
 int
 main ()
 {
+  /* Check that FD_ZERO can be used.  This should not yield a warning
+     such as "warning: implicit declaration of function 'memset'".  */
+  fd_set fds;
+  FD_ZERO (&fds);
+
   return 0;
 }




reply via email to

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