|
@@ -8,12 +8,36 @@
|
|
*/
|
|
*/
|
|
|
|
|
|
#include <sys/syscall.h>
|
|
#include <sys/syscall.h>
|
|
-#include <sys/time.h>
|
|
|
|
|
|
|
|
#ifdef __USE_BSD
|
|
#ifdef __USE_BSD
|
|
|
|
+# include <sys/time.h>
|
|
|
|
+# ifdef __NR_settimeofday
|
|
|
|
+_syscall2(int, settimeofday, const struct timeval *, tv,
|
|
|
|
+ const struct timezone *, tz)
|
|
|
|
+# elif defined __USE_SVID && defined __NR_stime
|
|
|
|
+# define __need_NULL
|
|
|
|
+# include <stddef.h>
|
|
|
|
+# include <errno.h>
|
|
|
|
+# include <time.h>
|
|
|
|
+int settimeofday(const struct timeval *tv, const struct timezone *tz)
|
|
|
|
+{
|
|
|
|
+ time_t when;
|
|
|
|
|
|
|
|
+ if (tv == NULL) {
|
|
|
|
+ __set_errno(EINVAL);
|
|
|
|
+ return -1;
|
|
|
|
+ }
|
|
|
|
|
|
-_syscall2(int, settimeofday, const struct timeval *, tv,
|
|
+ if (tz != NULL || tv->tv_usec % 1000000 != 0) {
|
|
- const struct timezone *, tz)
|
|
+ __set_errno(ENOSYS);
|
|
|
|
+ return -1;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ when = tv->tv_sec + (tv->tv_usec / 1000000);
|
|
|
|
+ return stime(&when);
|
|
|
|
+}
|
|
|
|
+# endif
|
|
|
|
+# if defined __NR_settimeofday || (defined __USE_SVID && defined __NR_stime)
|
|
libc_hidden_def(settimeofday)
|
|
libc_hidden_def(settimeofday)
|
|
|
|
+# endif
|
|
#endif
|
|
#endif
|