[Top][All Lists]
[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;
}