view tests/test-sys_select.c @ 16327:588e064cc6e1

sys_time: Override 'struct timeval' on some native Windows platforms. * m4/sys_time_h.m4 (gl_HEADER_SYS_TIME_H_BODY): Test whether tv_sec has the right type. Set REPLACE_STRUCT_TIMEVAL if not. (gl_HEADER_SYS_TIME_H_DEFAULTS): Initialize REPLACE_STRUCT_TIMEVAL. * lib/sys_time.in.h: Include <winsock2.h> also when 'struct timeval' needs to be overridden. (timeval): Override if REPLACE_STRUCT_TIMEVAL is set. * modules/sys_time (Makefile.am): Substitute REPLACE_STRUCT_TIMEVAL. * tests/test-sys_select.c: Check that the tv_sec member has the same size as a 'time_t'. * tests/test-sys_time.c: Likewise. * m4/gettimeofday.m4 (gl_FUNC_GETTIMEOFDAY): If REPLACE_STRUCT_TIMEVAL is set, set also REPLACE_GETTIMEOFDAY. * lib/gettimeofday.c (gettimeofday): If 'struct timeval' is overridden, convert the resulting 'struct timeval' before returning. * lib/select.c: Include <sys/time.h>. (select, timeval): Undefine at the right place. * modules/select (Depends-on): Add sys_time. * doc/posix-headers/sys_time.texi: Mention the problem with tv_sec on some Windows platforms. Reported by Marc-André Lureau <marcandre.lureau@redhat.com>.
author Bruno Haible <bruno@clisp.org>
date Sat, 28 Jan 2012 18:12:10 +0100
parents 8250f2777afc
children e542fd46ad6f
line wrap: on
line source

/* Test of <sys/select.h> substitute.
   Copyright (C) 2007-2012 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
   the Free Software Foundation; either version 3 of the License, or
   (at your option) any later version.

   This program is distributed in the hope that it will be useful,
   but WITHOUT ANY WARRANTY; without even the implied warranty of
   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
   GNU General Public License for more details.

   You should have received a copy of the GNU General Public License
   along with this program.  If not, see <http://www.gnu.org/licenses/>.  */

/* Written by Bruno Haible <bruno@clisp.org>, 2007.  */

#include <config.h>

#include <sys/select.h>

#include "signature.h"

/* The following may be macros without underlying functions, so only
   check signature if they are not macros.  */
#ifndef FD_CLR
SIGNATURE_CHECK (FD_CLR, void, (int, fd_set *));
#endif
#ifndef FD_ISSET
SIGNATURE_CHECK (FD_ISSET, void, (int, fd_set *));
#endif
#ifndef FD_SET
SIGNATURE_CHECK (FD_SET, int, (int, fd_set *));
#endif
#ifndef FD_ZERO
SIGNATURE_CHECK (FD_ZERO, void, (fd_set *));
#endif

/* Check that the 'struct timeval' type is defined.  */
struct timeval a;

/* Check that &a.tv_sec is a 'time_t *', ignoring signedness issues.  */
typedef int verify_tv_sec_type[sizeof (a.tv_sec) == sizeof (time_t) ? 1 : -1];

/* Check that sigset_t is defined.  */
sigset_t t2;

int
main (void)
{
  /* 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;
}