[PATCH] libc/posix: Add mkfifo, sleep, and usleep
Jeff Johnston
jjohnstn@redhat.com
Mon Jun 5 21:52:00 GMT 2006
I have checked in this patch, sans the configure.host changes. It is
not correct to set the flag on generally for these platforms. You must
have a local fix in your configure.host to be using the libc/posix
directory so I think it more appropriate for the time-being that you
should also have the -DHAVE_NANOSLEEP change locally as well or specify
it with your build flags.
-- Jeff J.
Shaun Jackman wrote:
> On 6/1/06, Jeff Johnston <jjohnstn@redhat.com> wrote:
>
>> If we protect the sleep functions with a check for HAVE_NANOSLEEP, then
>> this would be fine. The three users of the libc/posix dir right now are
>
>
> I've defined -DHAVE_NANOSLEEP for arm/thumb/xscale. ARM
> (-lgloss-linux) is the only configuration that provides nanosleep. It
> shouldn't harm the others though.
>
> Cheers,
> Shaun
>
> 2006-06-02 Shaun Jackman <sjackman@gmail.com>
>
> * configure.host (newlib_cflags) [arm, thumb, xscale]: Add
> -DHAVE_NANOSLEEP.
> * libc/posix/Makefile.am (GENERAL_SOURCES): Add sleep.c and
> usleep.c.
> * libc/posix/Makefile.in: Regenerate.
> * libc/posix/sleep.c: New file.
> * libc/posix/usleep.c: Ditto.
>
> Index: configure.host
> ===================================================================
> RCS file: /cvs/src/src/newlib/configure.host,v
> retrieving revision 1.81
> diff -u -r1.81 configure.host
> --- configure.host 13 Apr 2006 19:56:23 -0000 1.81
> +++ configure.host 2 Jun 2006 15:17:55 -0000
> @@ -514,7 +514,7 @@
> ;;
> arm-*-*)
> syscall_dir=syscalls
> - newlib_cflags="${newlib_cflags} -DABORT_PROVIDED -DHAVE_GETTIMEOFDAY"
> + newlib_cflags="${newlib_cflags} -DABORT_PROVIDED -DHAVE_GETTIMEOFDAY
> -DHAVE_NANOSLEEP"
> # If newlib is supplying syscalls, select which debug protocol is being
> used.
> # ARM_RDP_MONITOR selects the Demon monitor.
> # ARM_RDI_MONITOR selects the Angel monitor.
> @@ -669,7 +669,7 @@
> ;;
> thumb-*-*)
> syscall_dir=syscalls
> - newlib_cflags="${newlib_cflags} -DABORT_PROVIDED -DHAVE_GETTIMEOFDAY"
> + newlib_cflags="${newlib_cflags} -DABORT_PROVIDED -DHAVE_GETTIMEOFDAY
> -DHAVE_NANOSLEEP"
> # If newlib is supplying syscalls, select which debug protocol is being
> used.
> # ARM_RDP_MONITOR selects the Demon monitor.
> # ARM_RDI_MONITOR selects the Angel monitor.
> @@ -700,7 +700,7 @@
> ;;
> xscale-*-*)
> syscall_dir=syscalls
> - newlib_cflags="${newlib_cflags} -DABORT_PROVIDED -DHAVE_GETTIMEOFDAY"
> + newlib_cflags="${newlib_cflags} -DABORT_PROVIDED -DHAVE_GETTIMEOFDAY
> -DHAVE_NANOSLEEP"
> newlib_cflags="${newlib_cflags} -DHAVE_SYSTEM -DHAVE_RENAME"
> if [ "x${newlib_may_supply_syscalls}" = "xyes" ] ; then
> newlib_cflags="${newlib_cflags} -DARM_RDI_MONITOR"
> Index: libc/posix/Makefile.am
> ===================================================================
> RCS file: /cvs/src/src/newlib/libc/posix/Makefile.am,v
> retrieving revision 1.6
> diff -u -r1.6 Makefile.am
> --- libc/posix/Makefile.am 1 May 2006 22:01:02 -0000 1.6
> +++ libc/posix/Makefile.am 2 Jun 2006 15:19:22 -0000
> @@ -7,7 +7,8 @@
> GENERAL_SOURCES = \
> closedir.c creat.c isatty.c \
> opendir.c readdir.c \
> - readdir_r.c rewinddir.c telldir.c
> + readdir_r.c rewinddir.c sleep.c usleep.c \
> + telldir.c
>
> ELIX_2_SOURCES = \
> scandir.c seekdir.c
> --- /dev/null 2006-05-29 10:11:53.893844952 -0600
> +++ libc/posix/sleep.c 2006-06-02 09:14:18.000000000 -0600
> @@ -0,0 +1,22 @@
> +/* libc/posix/sleep.c - sleep function */
> +
> +/* Written 2000 by Werner Almesberger */
> +
> +#ifdef HAVE_NANOSLEEP
> +
> +#include <errno.h>
> +#include <time.h>
> +#include <unistd.h>
> +
> +unsigned sleep(unsigned seconds)
> +{
> + struct timespec ts;
> +
> + ts.tv_sec = seconds;
> + ts.tv_nsec = 0;
> + if (!nanosleep(&ts,&ts)) return 0;
> + if (errno == EINTR) return ts.tv_sec;
> + return -1;
> +}
> +
> +#endif
> --- /dev/null 2006-05-29 10:11:53.893844952 -0600
> +++ libc/posix/usleep.c 2006-06-02 09:14:30.000000000 -0600
> @@ -0,0 +1,22 @@
> +/* libc/posix/usleep.c - usleep function */
> +
> +/* Written 2002 by Jeff Johnston */
> +
> +#ifdef HAVE_NANOSLEEP
> +
> +#include <errno.h>
> +#include <time.h>
> +#include <unistd.h>
> +
> +int usleep(useconds_t useconds)
> +{
> + struct timespec ts;
> +
> + ts.tv_sec = (long int)useconds / 1000000;
> + ts.tv_nsec = ((long int)useconds % 1000000) * 1000;
> + if (!nanosleep(&ts,&ts)) return 0;
> + if (errno == EINTR) return ts.tv_sec;
> + return -1;
> +}
> +
> +#endif
>
>
> ------------------------------------------------------------------------
>
> 2006-06-02 Shaun Jackman <sjackman@gmail.com>
>
> * configure.host (newlib_cflags) [arm, thumb, xscale]: Add
> -DHAVE_NANOSLEEP.
> * libc/posix/Makefile.am (GENERAL_SOURCES): Add sleep.c and
> usleep.c.
> * libc/posix/Makefile.in: Regenerate.
> * libc/posix/sleep.c: New file.
> * libc/posix/usleep.c: Ditto.
>
> Index: configure.host
> ===================================================================
> RCS file: /cvs/src/src/newlib/configure.host,v
> retrieving revision 1.81
> diff -u -r1.81 configure.host
> --- configure.host 13 Apr 2006 19:56:23 -0000 1.81
> +++ configure.host 2 Jun 2006 15:17:55 -0000
> @@ -514,7 +514,7 @@
> ;;
> arm-*-*)
> syscall_dir=syscalls
> - newlib_cflags="${newlib_cflags} -DABORT_PROVIDED -DHAVE_GETTIMEOFDAY"
> + newlib_cflags="${newlib_cflags} -DABORT_PROVIDED -DHAVE_GETTIMEOFDAY -DHAVE_NANOSLEEP"
> # If newlib is supplying syscalls, select which debug protocol is being used.
> # ARM_RDP_MONITOR selects the Demon monitor.
> # ARM_RDI_MONITOR selects the Angel monitor.
> @@ -669,7 +669,7 @@
> ;;
> thumb-*-*)
> syscall_dir=syscalls
> - newlib_cflags="${newlib_cflags} -DABORT_PROVIDED -DHAVE_GETTIMEOFDAY"
> + newlib_cflags="${newlib_cflags} -DABORT_PROVIDED -DHAVE_GETTIMEOFDAY -DHAVE_NANOSLEEP"
> # If newlib is supplying syscalls, select which debug protocol is being used.
> # ARM_RDP_MONITOR selects the Demon monitor.
> # ARM_RDI_MONITOR selects the Angel monitor.
> @@ -700,7 +700,7 @@
> ;;
> xscale-*-*)
> syscall_dir=syscalls
> - newlib_cflags="${newlib_cflags} -DABORT_PROVIDED -DHAVE_GETTIMEOFDAY"
> + newlib_cflags="${newlib_cflags} -DABORT_PROVIDED -DHAVE_GETTIMEOFDAY -DHAVE_NANOSLEEP"
> newlib_cflags="${newlib_cflags} -DHAVE_SYSTEM -DHAVE_RENAME"
> if [ "x${newlib_may_supply_syscalls}" = "xyes" ] ; then
> newlib_cflags="${newlib_cflags} -DARM_RDI_MONITOR"
> Index: libc/posix/Makefile.am
> ===================================================================
> RCS file: /cvs/src/src/newlib/libc/posix/Makefile.am,v
> retrieving revision 1.6
> diff -u -r1.6 Makefile.am
> --- libc/posix/Makefile.am 1 May 2006 22:01:02 -0000 1.6
> +++ libc/posix/Makefile.am 2 Jun 2006 15:19:22 -0000
> @@ -7,7 +7,8 @@
> GENERAL_SOURCES = \
> closedir.c creat.c isatty.c \
> opendir.c readdir.c \
> - readdir_r.c rewinddir.c telldir.c
> + readdir_r.c rewinddir.c sleep.c usleep.c \
> + telldir.c
>
> ELIX_2_SOURCES = \
> scandir.c seekdir.c
> --- /dev/null 2006-05-29 10:11:53.893844952 -0600
> +++ libc/posix/sleep.c 2006-06-02 09:14:18.000000000 -0600
> @@ -0,0 +1,22 @@
> +/* libc/posix/sleep.c - sleep function */
> +
> +/* Written 2000 by Werner Almesberger */
> +
> +#ifdef HAVE_NANOSLEEP
> +
> +#include <errno.h>
> +#include <time.h>
> +#include <unistd.h>
> +
> +unsigned sleep(unsigned seconds)
> +{
> + struct timespec ts;
> +
> + ts.tv_sec = seconds;
> + ts.tv_nsec = 0;
> + if (!nanosleep(&ts,&ts)) return 0;
> + if (errno == EINTR) return ts.tv_sec;
> + return -1;
> +}
> +
> +#endif
> --- /dev/null 2006-05-29 10:11:53.893844952 -0600
> +++ libc/posix/usleep.c 2006-06-02 09:14:30.000000000 -0600
> @@ -0,0 +1,22 @@
> +/* libc/posix/usleep.c - usleep function */
> +
> +/* Written 2002 by Jeff Johnston */
> +
> +#ifdef HAVE_NANOSLEEP
> +
> +#include <errno.h>
> +#include <time.h>
> +#include <unistd.h>
> +
> +int usleep(useconds_t useconds)
> +{
> + struct timespec ts;
> +
> + ts.tv_sec = (long int)useconds / 1000000;
> + ts.tv_nsec = ((long int)useconds % 1000000) * 1000;
> + if (!nanosleep(&ts,&ts)) return 0;
> + if (errno == EINTR) return ts.tv_sec;
> + return -1;
> +}
> +
> +#endif
>
More information about the Newlib
mailing list