# HG changeset patch # User Eric Blake # Date 1258607679 25200 # Node ID bf3fd58aaf19dba31a40f1cccf7c90ef7cac9e7f # Parent 9e07d6d6ed00009542c69ad8a5a17f5bbe8f6a8f nanosleep: improve port to mingw test-nanosleep failed to link, and exposed a need for argument validation when nanosleep is missing. * lib/nanosleep.c (rpl_nanosleep): Reject invalid arguments. * m4/nanosleep.m4 (gl_FUNC_NANOSLEEP): Incorporate LIBSOCKET into LIB_NANOSLEEP, but only when needed. * modules/select (Link): Document LIBSOCKET. * m4/select.m4 (gl_FUNC_SELECT): Ensure LIBSOCKET is defined early enough. diff --git a/ChangeLog b/ChangeLog --- a/ChangeLog +++ b/ChangeLog @@ -1,5 +1,13 @@ 2009-11-20 Eric Blake + nanosleep: improve port to mingw + * lib/nanosleep.c (rpl_nanosleep): Reject invalid arguments. + * m4/nanosleep.m4 (gl_FUNC_NANOSLEEP): Incorporate LIBSOCKET into + LIB_NANOSLEEP, but only when needed. + * modules/select (Link): Document LIBSOCKET. + * m4/select.m4 (gl_FUNC_SELECT): Ensure LIBSOCKET is defined early + enough. + nanosleep: work around cygwin bug * lib/nanosleep.c (rpl_nanosleep) [HAVE_BUG_BIG_NANOSLEEP]: Fix logic bug when nanosleep fails. Work around cygwin 1.5.x diff --git a/lib/nanosleep.c b/lib/nanosleep.c --- a/lib/nanosleep.c +++ b/lib/nanosleep.c @@ -134,6 +134,12 @@ { static bool initialized; + if (requested_delay->tv_nsec < 0 || BILLION <= requested_delay->tv_nsec) + { + errno = EINVAL; + return -1; + } + /* set up sig handler */ if (! initialized) { diff --git a/m4/nanosleep.m4 b/m4/nanosleep.m4 --- a/m4/nanosleep.m4 +++ b/m4/nanosleep.m4 @@ -1,4 +1,4 @@ -# serial 29 +# serial 30 dnl From Jim Meyering. dnl Check for the nanosleep function. @@ -18,6 +18,7 @@ AC_REQUIRE([gl_HEADER_TIME_H_DEFAULTS]) AC_CHECK_HEADERS_ONCE([sys/time.h]) + AC_REQUIRE([gl_FUNC_SELECT]) nanosleep_save_libs=$LIBS @@ -102,6 +103,13 @@ if test "$gl_cv_func_nanosleep" = 'no (mishandles large arguments)'; then AC_DEFINE([HAVE_BUG_BIG_NANOSLEEP], [1], [Define to 1 if nanosleep mishandles large arguments.]) + else + for ac_lib in $LIBSOCKET; do + case " $LIB_NANOSLEEP " in + *" $ac_lib "*) ;; + *) LIB_NANOSLEEP="$LIB_NANOSLEEP $ac_lib";; + esac + done fi AC_LIBOBJ([nanosleep]) gl_PREREQ_NANOSLEEP diff --git a/m4/select.m4 b/m4/select.m4 --- a/m4/select.m4 +++ b/m4/select.m4 @@ -1,4 +1,4 @@ -# select.m4 serial 2 +# select.m4 serial 3 dnl Copyright (C) 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, @@ -8,6 +8,7 @@ [ AC_REQUIRE([gl_HEADER_SYS_SELECT]) AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles + AC_REQUIRE([gl_SOCKETS]) if test "$ac_cv_header_winsock2_h" = yes; then AC_LIBOBJ([select]) else diff --git a/modules/select b/modules/select --- a/modules/select +++ b/modules/select @@ -18,6 +18,9 @@ Include: +Link: +$(LIBSOCKET) + License: LGPLv2+