Mercurial > hg > octave-jordi > gnulib-hg
changeset 6795:9dc5bb3f3359
* lib/nanosleep.c [HAVE_SYS_SELECT_H]: Include <sys/select.h>.
Use the usual Autoconf way to include <time.h> and/or sys/time.h.
(my_usleep): Don't mishandle maximum value.
* m4/nanosleep.m4 (gl_FUNC_NANOSLEEP): Rename cache variables to use
gl_ rather than jm_. Link, don't run, so that cross-compiles are
allowed. Check that resulting type is arithmetic. Move AC_REQUIRE
and AC_CHECK_HEADERS_ONCE outside of AC_CACHE_CHECK, since they're
not really conditional on the cache.
(gl_PREREQ_NANOSLEEP): Check for sys/select.h.
author | Paul Eggert <eggert@cs.ucla.edu> |
---|---|
date | Fri, 19 May 2006 17:49:21 +0000 |
parents | a0631eab049d |
children | 8f8192a15c5e |
files | lib/ChangeLog lib/nanosleep.c m4/ChangeLog m4/nanosleep.m4 |
diffstat | 4 files changed, 59 insertions(+), 21 deletions(-) [+] |
line wrap: on
line diff
--- a/lib/ChangeLog +++ b/lib/ChangeLog @@ -1,3 +1,9 @@ +2006-05-19 Paul Eggert <eggert@cs.ucla.edu> + + * nanosleep.c [HAVE_SYS_SELECT_H]: Include <sys/select.h>. + Use the usual Autoconf way to include <time.h> and/or sys/time.h. + (my_usleep): Don't mishandle maximum value. + 2006-05-19 Jim Meyering <jim@meyering.net> * getugroups.c: Correct an outdated comment. From Bruno Haible.
--- a/lib/nanosleep.c +++ b/lib/nanosleep.c @@ -1,5 +1,7 @@ /* Provide a replacement for the POSIX nanosleep function. - Copyright (C) 1999, 2000, 2002, 2004, 2005 Free Software Foundation, Inc. + + Copyright (C) 1999, 2000, 2002, 2004, 2005, 2006 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 @@ -27,9 +29,23 @@ #include <stdbool.h> #include <stdio.h> +#if HAVE_SYS_SELECT_H +# include <sys/select.h> +#endif #include <sys/types.h> #include <signal.h> +#if TIME_WITH_SYS_TIME +# include <sys/time.h> +# include <time.h> +#else +# if HAVE_SYS_TIME_H +# include <sys/time.h> +# else +# include <time.h> +# endif +#endif + #include <errno.h> #include <unistd.h> @@ -57,7 +73,7 @@ suspended = 1; } -/* FIXME: comment */ +/* Suspend execution for at least *TS_DELAY seconds. */ static void my_usleep (const struct timespec *ts_delay) @@ -67,13 +83,20 @@ tv_delay.tv_usec = (ts_delay->tv_nsec + 999) / 1000; if (tv_delay.tv_usec == 1000000) { - tv_delay.tv_sec++; - tv_delay.tv_usec = 0; + time_t t1 = tv_delay.tv_sec + 1; + if (t1 < tv_delay.tv_sec) + tv_delay.tv_usec = 1000000 - 1; /* close enough */ + else + { + tv_delay.tv_sec = t1; + tv_delay.tv_usec = 0; + } } select (0, NULL, NULL, NULL, &tv_delay); } -/* FIXME: comment */ +/* Suspend execution for at least *REQUESTED_DELAY seconds. The + *REMAINING_DELAY part isn't implemented yet. */ int rpl_nanosleep (const struct timespec *requested_delay,
--- a/m4/ChangeLog +++ b/m4/ChangeLog @@ -1,3 +1,12 @@ +2006-05-19 Paul Eggert <eggert@cs.ucla.edu> + + * nanosleep.m4 (gl_FUNC_NANOSLEEP): Rename cache variables to use + gl_ rather than jm_. Link, don't run, so that cross-compiles are + allowed. Check that resulting type is arithmetic. Move AC_REQUIRE + and AC_CHECK_HEADERS_ONCE outside of AC_CACHE_CHECK, since they're + not really conditional on the cache. + (gl_PREREQ_NANOSLEEP): Check for sys/select.h. + 2006-05-14 Paul Eggert <eggert@cs.ucla.edu> * stdbool.m4 (AC_HEADER_STDBOOL): Fix overly-picky
--- a/m4/nanosleep.m4 +++ b/m4/nanosleep.m4 @@ -1,4 +1,4 @@ -#serial 16 +#serial 17 dnl From Jim Meyering. dnl Check for the nanosleep function. @@ -16,6 +16,12 @@ [ AC_LIBSOURCES([nanosleep.c]) + dnl Persuade glibc and Solaris <time.h> to declare nanosleep. + AC_REQUIRE([gl_USE_SYSTEM_EXTENSIONS]) + + AC_REQUIRE([AC_HEADER_TIME]) + AC_CHECK_HEADERS_ONCE(sys/time.h) + nanosleep_save_libs=$LIBS # Solaris 2.5.1 needs -lposix4 to get the nanosleep function. @@ -25,15 +31,10 @@ LIB_NANOSLEEP=$ac_cv_search_nanosleep]) AC_SUBST([LIB_NANOSLEEP]) - AC_CACHE_CHECK([whether nanosleep works], - jm_cv_func_nanosleep_works, + AC_CACHE_CHECK([for nanosleep], + [gl_cv_func_nanosleep], [ - dnl Persuade glibc and Solaris <time.h> to declare nanosleep. - AC_REQUIRE([gl_USE_SYSTEM_EXTENSIONS]) - - AC_REQUIRE([AC_HEADER_TIME]) - AC_CHECK_HEADERS_ONCE(sys/time.h) - AC_TRY_RUN([ + AC_LINK_IFELSE([AC_LANG_SOURCE([[ # if TIME_WITH_SYS_TIME # include <sys/time.h> # include <time.h> @@ -51,15 +52,13 @@ struct timespec ts_sleep, ts_remaining; ts_sleep.tv_sec = 0; ts_sleep.tv_nsec = 1; - return nanosleep (&ts_sleep, &ts_remaining) != 0; + return nanosleep (&ts_sleep, &ts_remaining) < 0; } - ], - jm_cv_func_nanosleep_works=yes, - jm_cv_func_nanosleep_works=no, - dnl When crosscompiling, assume the worst. - jm_cv_func_nanosleep_works=no) + ]])], + [gl_cv_func_nanosleep=yes], + [gl_cv_func_nanosleep=no]) ]) - if test $jm_cv_func_nanosleep_works = no; then + if test $gl_cv_func_nanosleep = no; then AC_LIBOBJ(nanosleep) AC_DEFINE(nanosleep, rpl_nanosleep, [Define to rpl_nanosleep if the replacement function should be used.]) @@ -73,4 +72,5 @@ AC_DEFUN([gl_PREREQ_NANOSLEEP], [ AC_CHECK_FUNCS_ONCE(siginterrupt) + AC_CHECK_HEADERS_ONCE(sys/select.h) ])