diff options
| -rw-r--r-- | include/time.h | 10 | ||||
| -rw-r--r-- | libc/misc/time/Makefile | 2 | ||||
| -rw-r--r-- | libc/misc/time/clock_gettime.c | 40 | ||||
| -rw-r--r-- | libc/sysdeps/linux/common/clock_getres.c | 51 | ||||
| -rw-r--r-- | libc/sysdeps/linux/common/clock_gettime.c | 51 | ||||
| -rw-r--r-- | libc/sysdeps/linux/common/clock_settime.c | 53 | 
6 files changed, 161 insertions, 46 deletions
| diff --git a/include/time.h b/include/time.h index b14bb3673..e8e514ca5 100644 --- a/include/time.h +++ b/include/time.h @@ -345,17 +345,17 @@ extern int nanosleep (__const struct timespec *__requested_time,  		      struct timespec *__remaining); -/* Get current value of clock CLOCK_ID and store it in TP.  */ -extern int clock_gettime (clockid_t __clock_id, struct timespec *__tp) __THROW; - -#ifdef __UCLIBC_MJN3_ONLY__ -#warning "mjn3 FIXME: a bunch of unimplemented function prototypes."  /* Get resolution of clock CLOCK_ID.  */  extern int clock_getres (clockid_t __clock_id, struct timespec *__res) __THROW; +/* Get current value of clock CLOCK_ID and store it in TP.  */ +extern int clock_gettime (clockid_t __clock_id, struct timespec *__tp) __THROW; +  /* Set clock CLOCK_ID to value TP.  */  extern int clock_settime (clockid_t __clock_id, __const struct timespec *__tp) __THROW; +#ifdef __UCLIBC_MJN3_ONLY__ +#warning "mjn3 FIXME: a bunch of unimplemented function prototypes."  #  ifdef __USE_XOPEN2K  /* High-resolution sleep with the specified clock. diff --git a/libc/misc/time/Makefile b/libc/misc/time/Makefile index 236a160bf..ebeea09e6 100644 --- a/libc/misc/time/Makefile +++ b/libc/misc/time/Makefile @@ -45,7 +45,7 @@ ifeq ($(UCLIBC_HAS_XLOCALE),y)  endif  endif -CSRC= adjtime.c ftime.c clock_gettime.c +CSRC= adjtime.c ftime.c  COBJS=$(patsubst %.c,%.o, $(CSRC))  OBJS=$(COBJS) $(MOBJ) $(MOBJx) diff --git a/libc/misc/time/clock_gettime.c b/libc/misc/time/clock_gettime.c deleted file mode 100644 index 550cf4dc4..000000000 --- a/libc/misc/time/clock_gettime.c +++ /dev/null @@ -1,40 +0,0 @@ -/*  Copyright (C) 2003     Justus Pendleton     <uc@ryoohki.net> - * - *  This library is free software; you can redistribute it and/or - *  modify it under the terms of the GNU Library General Public - *  License as published by the Free Software Foundation; either - *  version 2 of the License, or (at your option) any later version. - * - *  This library 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 - *  Library General Public License for more details. - * - *  You should have received a copy of the GNU Library General Public - *  License along with this library; if not, write to the Free - *  Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - */ - -#define _GNU_SOURCE -#include <time.h> -#include <errno.h> -#include <sys/time.h> - -int clock_gettime (clockid_t clock, struct timespec* ts) -{ -	struct timeval tv; -	int retval = -1; -	switch (clock) { -		case CLOCK_REALTIME: -			retval = gettimeofday (&tv, NULL); -			if (retval == 0) { -				TIMEVAL_TO_TIMESPEC (&tv, ts); -			} -			break; -		default: -			errno = EINVAL; -			break; -	} -	return retval; -} - diff --git a/libc/sysdeps/linux/common/clock_getres.c b/libc/sysdeps/linux/common/clock_getres.c new file mode 100644 index 000000000..0ae2bb07d --- /dev/null +++ b/libc/sysdeps/linux/common/clock_getres.c @@ -0,0 +1,51 @@ +/* + * clock_getres() for uClibc + * + * Copyright (C) 2005 by Peter Kjellerstedt <pkj@axis.com> + * + * This program is free software; you can redistribute it and/or modify it + * under the terms of the GNU Library General Public License as published by + * the Free Software Foundation; either version 2 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 Library General Public License + * for more details. + * + * You should have received a copy of the GNU Library General Public License + * along with this program; if not, write to the Free Software Foundation, + * Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + */ + +#define _GNU_SOURCE +#include "syscalls.h" +#include <time.h> +#include <unistd.h> + +#ifdef __NR_clock_getres +_syscall2(int, clock_getres, clockid_t, clock_id, struct timespec*, res); +#else +int clock_getres(clockid_t clock_id, struct timespec* res) +{ +	long clk_tck; +	int retval = -1; + +	switch (clock_id) { +		case CLOCK_REALTIME: +			if ((clk_tck = sysconf(_SC_CLK_TCK)) < 0) +				clk_tck = 100; +			res->tv_sec = 0; +			res->tv_nsec = 1000000000 / clk_tck; +			retval = 0; +			break; + +		default: +			errno = EINVAL; +			break; +	} + +	return retval; +} +#endif diff --git a/libc/sysdeps/linux/common/clock_gettime.c b/libc/sysdeps/linux/common/clock_gettime.c new file mode 100644 index 000000000..d6369681d --- /dev/null +++ b/libc/sysdeps/linux/common/clock_gettime.c @@ -0,0 +1,51 @@ +/* + * clock_gettime() for uClibc + * + * Copyright (C) 2003 by Justus Pendleton <uc@ryoohki.net> + * Copyright (C) 2005 by Peter Kjellerstedt <pkj@axis.com> + * + * This program is free software; you can redistribute it and/or modify it + * under the terms of the GNU Library General Public License as published by + * the Free Software Foundation; either version 2 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 Library General Public License + * for more details. + * + * You should have received a copy of the GNU Library General Public License + * along with this program; if not, write to the Free Software Foundation, + * Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + */ + +#define _GNU_SOURCE +#include "syscalls.h" +#include <time.h> +#include <sys/time.h> + +#ifdef __NR_clock_gettime +_syscall2(int, clock_gettime, clockid_t, clock_id, struct timespec*, tp); +#else +int clock_gettime(clockid_t clock_id, struct timespec* tp) +{ +	struct timeval tv; +	int retval = -1; + +	switch (clock_id) { +		case CLOCK_REALTIME: +			retval = gettimeofday(&tv, NULL); +			if (retval == 0) { +				TIMEVAL_TO_TIMESPEC(&tv, tp); +			} +			break; + +		default: +			errno = EINVAL; +			break; +	} + +	return retval; +} +#endif diff --git a/libc/sysdeps/linux/common/clock_settime.c b/libc/sysdeps/linux/common/clock_settime.c new file mode 100644 index 000000000..40dadc78d --- /dev/null +++ b/libc/sysdeps/linux/common/clock_settime.c @@ -0,0 +1,53 @@ +/* + * clock_settime() for uClibc + * + * Copyright (C) 2005 by Peter Kjellerstedt <pkj@axis.com> + * + * This program is free software; you can redistribute it and/or modify it + * under the terms of the GNU Library General Public License as published by + * the Free Software Foundation; either version 2 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 Library General Public License + * for more details. + * + * You should have received a copy of the GNU Library General Public License + * along with this program; if not, write to the Free Software Foundation, + * Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + */ + +#define _GNU_SOURCE +#include "syscalls.h" +#include <time.h> +#include <sys/time.h> + +#ifdef __NR_clock_settime +_syscall2(int, clock_settime, clockid_t, clock_id, const struct timespec*, tp); +#else +int clock_settime(clockid_t clock_id, const struct timespec* tp) +{ +	struct timeval tv; +	int retval = -1; + +	if (tp->tv_nsec < 0 || tp->tv_nsec >= 1000000000) { +		errno = EINVAL; +		return -1; +	} + +	switch (clock_id) { +		case CLOCK_REALTIME: +			TIMESPEC_TO_TIMEVAL(&tv, tp); +			retval = settimeofday(&tv, NULL); +			break; + +		default: +			errno = EINVAL; +			break; +	} + +	return retval; +} +#endif | 
