mirror of
git://git.gnupg.org/gnupg.git
synced 2025-01-03 12:11:33 +01:00
common: New function gnupg_usleep.
* configure.ac (HAVE_NANOSLEEP): Test for nanosleep. * common/sysutils.c: Always include time.h. (gnupg_usleep): New. -- This function has been compiled from nPth and Libassuan. Signed-off-by: Werner Koch <wk@gnupg.org>
This commit is contained in:
parent
3b6b8fe32a
commit
ad491ceec6
@ -49,8 +49,8 @@
|
|||||||
# include <asm/sysinfo.h>
|
# include <asm/sysinfo.h>
|
||||||
# include <asm/unistd.h>
|
# include <asm/unistd.h>
|
||||||
#endif
|
#endif
|
||||||
|
#include <time.h>
|
||||||
#ifdef HAVE_SETRLIMIT
|
#ifdef HAVE_SETRLIMIT
|
||||||
# include <time.h>
|
|
||||||
# include <sys/time.h>
|
# include <sys/time.h>
|
||||||
# include <sys/resource.h>
|
# include <sys/resource.h>
|
||||||
#endif
|
#endif
|
||||||
@ -307,6 +307,50 @@ gnupg_sleep (unsigned int seconds)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/* Wrapper around the platforms usleep function. This one won't wake
|
||||||
|
* up before the sleep time has really elapsed. When build with nPth
|
||||||
|
* it merely calls npth_usleep and thus suspends only the current
|
||||||
|
* thread. */
|
||||||
|
void
|
||||||
|
gnupg_usleep (unsigned int usecs)
|
||||||
|
{
|
||||||
|
#if defined(USE_NPTH)
|
||||||
|
|
||||||
|
npth_usleep (usecs);
|
||||||
|
|
||||||
|
#elif defined(HAVE_W32_SYSTEM)
|
||||||
|
|
||||||
|
Sleep ((usecs + 999) / 1000);
|
||||||
|
|
||||||
|
#elif defined(HAVE_NANOSLEEP)
|
||||||
|
|
||||||
|
if (usecs)
|
||||||
|
{
|
||||||
|
struct timespec req;
|
||||||
|
struct timespec rem;
|
||||||
|
|
||||||
|
req.tv_sec = 0;
|
||||||
|
req.tv_nsec = usecs * 1000;
|
||||||
|
|
||||||
|
while (nanosleep (&req, &rem) < 0 && errno == EINTR)
|
||||||
|
req = rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
#else /*Standard Unix*/
|
||||||
|
|
||||||
|
if (usecs)
|
||||||
|
{
|
||||||
|
struct timeval tv;
|
||||||
|
|
||||||
|
tv.tv_sec = usecs / 1000000;
|
||||||
|
tv.tv_usec = usecs % 1000000;
|
||||||
|
select (0, NULL, NULL, NULL, &tv);
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/* This function is a NOP for POSIX systems but required under Windows
|
/* This function is a NOP for POSIX systems but required under Windows
|
||||||
as the file handles as returned by OS calls (like CreateFile) are
|
as the file handles as returned by OS calls (like CreateFile) are
|
||||||
different from the libc file descriptors (like open). This function
|
different from the libc file descriptors (like open). This function
|
||||||
|
@ -54,6 +54,7 @@ const unsigned char *get_session_marker (size_t *rlen);
|
|||||||
unsigned int get_uint_nonce (void);
|
unsigned int get_uint_nonce (void);
|
||||||
/*int check_permissions (const char *path,int extension,int checkonly);*/
|
/*int check_permissions (const char *path,int extension,int checkonly);*/
|
||||||
void gnupg_sleep (unsigned int seconds);
|
void gnupg_sleep (unsigned int seconds);
|
||||||
|
void gnupg_usleep (unsigned int usecs);
|
||||||
int translate_sys2libc_fd (gnupg_fd_t fd, int for_write);
|
int translate_sys2libc_fd (gnupg_fd_t fd, int for_write);
|
||||||
int translate_sys2libc_fd_int (int fd, int for_write);
|
int translate_sys2libc_fd_int (int fd, int for_write);
|
||||||
FILE *gnupg_tmpfile (void);
|
FILE *gnupg_tmpfile (void);
|
||||||
|
10
configure.ac
10
configure.ac
@ -1387,6 +1387,16 @@ AC_CHECK_FUNCS([memicmp stpcpy strsep strlwr strtoul memmove stricmp strtol \
|
|||||||
flockfile funlockfile getpwnam getpwuid \
|
flockfile funlockfile getpwnam getpwuid \
|
||||||
getenv inet_pton strpbrk])
|
getenv inet_pton strpbrk])
|
||||||
|
|
||||||
|
# On some systems (e.g. Solaris) nanosleep requires linking to librl.
|
||||||
|
# Given that we use nanosleep only as an optimization over a select
|
||||||
|
# based wait function we want it only if it is available in libc.
|
||||||
|
_save_libs="$LIBS"
|
||||||
|
AC_SEARCH_LIBS([nanosleep], [],
|
||||||
|
[AC_DEFINE(HAVE_NANOSLEEP,1,
|
||||||
|
[Define to 1 if you have the `nanosleep' function in libc.])])
|
||||||
|
LIBS="$_save_libs"
|
||||||
|
|
||||||
|
|
||||||
# See whether libc supports the Linux inotify interface
|
# See whether libc supports the Linux inotify interface
|
||||||
case "${host}" in
|
case "${host}" in
|
||||||
*-*-linux*)
|
*-*-linux*)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user