Welcome to mirror list, hosted at ThFree Co, Russian Federation.

cygwin.com/git/newlib-cygwin.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJeff Johnston <jjohnstn@redhat.com>2002-06-21 22:29:23 +0400
committerJeff Johnston <jjohnstn@redhat.com>2002-06-21 22:29:23 +0400
commitd427d09204c97df14607149e94a1da9beddd76ab (patch)
tree364e68aebab51cfb339ff2b0f21a1f97d22a131d /newlib/libc/sys/linux
parent35728d4f142bbab0d8a963561d76b9066421b1ac (diff)
2002-06-21 Jeff Johnston <jjohnstn@redhat.com>
* libc/include/stdio.h (__getline, __getdelim): New prototypes. * libc/include/time.h [HAVE_GETDATE](getdate, getdate_r): Ditto. [HAVE_GETDATE](getdate_err): New error code. * libc/stdio/Makefile.am: Add support for getline.c and getdelim.c. * libc/stdio/Makefile.in: Regenerated. * libc/stdio/getdelim.c: New file. * libc/stdio/getline.c: Ditto. * libc/sys/linux/Makefile.am: Add support for getdate.c, getdate_err.c and ntp_gettime.c. Also add AM_CFLAGS to point to libc/stdio. * libc/sys/linux/Makefile.in: Regenerated. * libc/sys/linux/getdate.c: New file. * libc/sys/linux/getdate_err.c: Ditto. * libc/sys/linux/ntp_gettime.c: Ditto. * libc/sys/linux/time.c (adjtimex, ntp_adjtime): New functions. * libc/sys/linux/sys/stdio.h (getline, getdelim): New macros.
Diffstat (limited to 'newlib/libc/sys/linux')
-rw-r--r--newlib/libc/sys/linux/Makefile.am4
-rw-r--r--newlib/libc/sys/linux/Makefile.in37
-rw-r--r--newlib/libc/sys/linux/getdate.c319
-rw-r--r--newlib/libc/sys/linux/getdate_err.c18
-rw-r--r--newlib/libc/sys/linux/ntp_gettime.c38
-rw-r--r--newlib/libc/sys/linux/sys/stdio.h3
-rw-r--r--newlib/libc/sys/linux/time.c5
7 files changed, 408 insertions, 16 deletions
diff --git a/newlib/libc/sys/linux/Makefile.am b/newlib/libc/sys/linux/Makefile.am
index 861340d22..78cdd399e 100644
--- a/newlib/libc/sys/linux/Makefile.am
+++ b/newlib/libc/sys/linux/Makefile.am
@@ -15,6 +15,8 @@ LIB_SOURCES = \
flockfile.c \
ftok.c \
funlockfile.c \
+ getdate.c \
+ getdate_err.c \
gethostname.c \
getoptlong.c \
getreent.c \
@@ -33,6 +35,7 @@ LIB_SOURCES = \
mq_send.c \
mq_setattr.c \
mq_unlink.c \
+ ntp_gettime.c \
pread.c \
pread64.c \
process.c \
@@ -124,5 +127,6 @@ siglist.inc:
< $(SIGNAL_H) > siglist.inc || \
{ rm -f siglist.inc; exit 1; }
+AM_CFLAGS = -I $(srcdir)/../../stdio
ACLOCAL_AMFLAGS = -I ../../..
CONFIG_STATUS_DEPENDENCIES = $(newlib_basedir)/configure.host
diff --git a/newlib/libc/sys/linux/Makefile.in b/newlib/libc/sys/linux/Makefile.in
index 9f8459e65..68a483b71 100644
--- a/newlib/libc/sys/linux/Makefile.in
+++ b/newlib/libc/sys/linux/Makefile.in
@@ -112,6 +112,8 @@ LIB_SOURCES = \
flockfile.c \
ftok.c \
funlockfile.c \
+ getdate.c \
+ getdate_err.c \
gethostname.c \
getoptlong.c \
getreent.c \
@@ -130,6 +132,7 @@ LIB_SOURCES = \
mq_send.c \
mq_setattr.c \
mq_unlink.c \
+ ntp_gettime.c \
pread.c \
pread64.c \
process.c \
@@ -184,6 +187,7 @@ liblinux_la_LDFLAGS = -Xcompiler -nostdlib
@USE_LIBTOOL_FALSE@lib_a_LIBADD = @USE_LIBTOOL_FALSE@$(LINUX_MACH_LIB)
@USE_LIBTOOL_FALSE@lib_a_DEPENDENCIES = @USE_LIBTOOL_FALSE@$(LINUX_MACH_LIB)
+AM_CFLAGS = -I $(srcdir)/../../stdio
ACLOCAL_AMFLAGS = -I ../../..
CONFIG_STATUS_DEPENDENCIES = $(newlib_basedir)/configure.host
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
@@ -197,7 +201,8 @@ CPPFLAGS = @CPPFLAGS@
LIBS = @LIBS@
@USE_LIBTOOL_FALSE@lib_a_OBJECTS = brk.$(OBJEXT) cfspeed.$(OBJEXT) \
@USE_LIBTOOL_FALSE@flockfile.$(OBJEXT) ftok.$(OBJEXT) \
-@USE_LIBTOOL_FALSE@funlockfile.$(OBJEXT) gethostname.$(OBJEXT) \
+@USE_LIBTOOL_FALSE@funlockfile.$(OBJEXT) getdate.$(OBJEXT) \
+@USE_LIBTOOL_FALSE@getdate_err.$(OBJEXT) gethostname.$(OBJEXT) \
@USE_LIBTOOL_FALSE@getoptlong.$(OBJEXT) getreent.$(OBJEXT) \
@USE_LIBTOOL_FALSE@ids.$(OBJEXT) inode.$(OBJEXT) io.$(OBJEXT) \
@USE_LIBTOOL_FALSE@io64.$(OBJEXT) ipc.$(OBJEXT) linux.$(OBJEXT) \
@@ -205,8 +210,8 @@ LIBS = @LIBS@
@USE_LIBTOOL_FALSE@mq_getattr.$(OBJEXT) mq_notify.$(OBJEXT) \
@USE_LIBTOOL_FALSE@mq_open.$(OBJEXT) mq_receive.$(OBJEXT) \
@USE_LIBTOOL_FALSE@mq_send.$(OBJEXT) mq_setattr.$(OBJEXT) \
-@USE_LIBTOOL_FALSE@mq_unlink.$(OBJEXT) pread.$(OBJEXT) \
-@USE_LIBTOOL_FALSE@pread64.$(OBJEXT) process.$(OBJEXT) \
+@USE_LIBTOOL_FALSE@mq_unlink.$(OBJEXT) ntp_gettime.$(OBJEXT) \
+@USE_LIBTOOL_FALSE@pread.$(OBJEXT) pread64.$(OBJEXT) process.$(OBJEXT) \
@USE_LIBTOOL_FALSE@psignal.$(OBJEXT) pwrite.$(OBJEXT) \
@USE_LIBTOOL_FALSE@pwrite64.$(OBJEXT) raise.$(OBJEXT) \
@USE_LIBTOOL_FALSE@realpath.$(OBJEXT) rename.$(OBJEXT) \
@@ -225,19 +230,19 @@ LTLIBRARIES = $(noinst_LTLIBRARIES)
@USE_LIBTOOL_TRUE@liblinux_la_DEPENDENCIES =
@USE_LIBTOOL_TRUE@liblinux_la_OBJECTS = brk.lo cfspeed.lo flockfile.lo \
-@USE_LIBTOOL_TRUE@ftok.lo funlockfile.lo gethostname.lo getoptlong.lo \
-@USE_LIBTOOL_TRUE@getreent.lo ids.lo inode.lo io.lo io64.lo ipc.lo \
-@USE_LIBTOOL_TRUE@linux.lo mmap.lo mq_close.lo mq_getattr.lo \
-@USE_LIBTOOL_TRUE@mq_notify.lo mq_open.lo mq_receive.lo mq_send.lo \
-@USE_LIBTOOL_TRUE@mq_setattr.lo mq_unlink.lo pread.lo pread64.lo \
-@USE_LIBTOOL_TRUE@process.lo psignal.lo pwrite.lo pwrite64.lo raise.lo \
-@USE_LIBTOOL_TRUE@realpath.lo rename.lo resource.lo sched.lo select.lo \
-@USE_LIBTOOL_TRUE@seteuid.lo shm_open.lo shm_unlink.lo sig.lo \
-@USE_LIBTOOL_TRUE@sigaction.lo sigqueue.lo signal.lo siglongjmp.lo \
-@USE_LIBTOOL_TRUE@sigset.lo sigwait.lo socket.lo sleep.lo stack.lo \
-@USE_LIBTOOL_TRUE@strsignal.lo sysconf.lo sysctl.lo systat.lo system.lo \
-@USE_LIBTOOL_TRUE@tcdrain.lo tcsendbrk.lo termios.lo time.lo usleep.lo \
-@USE_LIBTOOL_TRUE@wait.lo
+@USE_LIBTOOL_TRUE@ftok.lo funlockfile.lo getdate.lo getdate_err.lo \
+@USE_LIBTOOL_TRUE@gethostname.lo getoptlong.lo getreent.lo ids.lo \
+@USE_LIBTOOL_TRUE@inode.lo io.lo io64.lo ipc.lo linux.lo mmap.lo \
+@USE_LIBTOOL_TRUE@mq_close.lo mq_getattr.lo mq_notify.lo mq_open.lo \
+@USE_LIBTOOL_TRUE@mq_receive.lo mq_send.lo mq_setattr.lo mq_unlink.lo \
+@USE_LIBTOOL_TRUE@ntp_gettime.lo pread.lo pread64.lo process.lo \
+@USE_LIBTOOL_TRUE@psignal.lo pwrite.lo pwrite64.lo raise.lo realpath.lo \
+@USE_LIBTOOL_TRUE@rename.lo resource.lo sched.lo select.lo seteuid.lo \
+@USE_LIBTOOL_TRUE@shm_open.lo shm_unlink.lo sig.lo sigaction.lo \
+@USE_LIBTOOL_TRUE@sigqueue.lo signal.lo siglongjmp.lo sigset.lo \
+@USE_LIBTOOL_TRUE@sigwait.lo socket.lo sleep.lo stack.lo strsignal.lo \
+@USE_LIBTOOL_TRUE@sysconf.lo sysctl.lo systat.lo system.lo tcdrain.lo \
+@USE_LIBTOOL_TRUE@tcsendbrk.lo termios.lo time.lo usleep.lo wait.lo
CFLAGS = @CFLAGS@
COMPILE = $(CC) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
LTCOMPILE = $(LIBTOOL) --mode=compile $(CC) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
diff --git a/newlib/libc/sys/linux/getdate.c b/newlib/libc/sys/linux/getdate.c
new file mode 100644
index 000000000..9137a2e5b
--- /dev/null
+++ b/newlib/libc/sys/linux/getdate.c
@@ -0,0 +1,319 @@
+/* Convert a string representation of time to a time value.
+ Copyright (C) 1997, 1998, 1999, 2000, 2001 Free Software Foundation, Inc.
+ This file is part of the GNU C Library.
+ Contributed by Mark Kettenis <kettenis@phys.uva.nl>, 1997.
+
+ The GNU C Library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) any later version.
+
+ The GNU C 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
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with the GNU C Library; if not, write to the Free
+ Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA. */
+
+/*
+FUNCTION
+<<getdate>>,<<getdate_r>>---convert a string representation of time to a time value
+
+INDEX
+ getdate
+INDEX
+ getdate_r
+
+ANSI_SYNOPSIS
+ #include <time.h>
+ struct tm *getdate(const char *<[string]>);
+ int getdate_r(const char *<[string]>, struct tm *<[res]>);
+
+TRAD_SYNOPSIS
+ #include <time.h>
+ struct tm *getdate(<[string]>);
+ const char *<[string]>;
+
+ int getdate_r(<[string]>, <[res]>);
+ const char *<[string]>;
+ struct tm *<[res]>;
+
+DESCRIPTION
+<<getdate>> reads a file which is specified by the environment variable:
+DATEMSK. This file contains a number of formats valid for input to the
+<<strptime>> function. The input <[string]> is used as input to the format
+strings and the first valid match that occurs is used. The resultant
+time struct is returned. If an error occurs, the value <<getdate_err>> is
+set to one of the following values.
+
+ 1 the DATEMSK environment variable is null or undefined,
+ 2 the template file cannot be opened for reading,
+ 3 failed to get file status information,
+ 4 the template file is not a regular file,
+ 5 an error is encountered while reading the template file,
+ 6 memory allication failed (not enough memory available),
+ 7 there is no line in the template that matches the input,
+ 8 invalid input specification
+
+The <<getdate_r>> routine is similar, except that it returns the error
+code and has the <[res]> time struct pointer passed in. <<getdate>> is
+non-reentrant. Applications that wish to be reentrant should use
+<<getdate_r>> instead of <<getdate>>.
+
+RETURNS
+<<getdate>> returns a pointer to the traditional time representation
+(<<struct tm>>). <<getdate_r>> returns 0 if successful, otherwise it
+returns the error code.
+
+PORTABILITY
+<<getdate>> is defined by the Single Unix specification.
+<<getdate_r>> is a reentrant extension.
+
+<<getdate>> and <<getdate_r>> optionally require <<stat>> and <<access>>.
+*/
+
+
+/* Modified for newlib by Jeff Johnston, June 19/2002 */
+
+#include <limits.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <time.h>
+#include <unistd.h>
+#include <sys/stat.h>
+
+#define TM_YEAR_BASE 1900
+
+extern ssize_t __getline (char **, size_t *, FILE *);
+
+/* Prototypes for local functions. */
+static int first_wday (int year, int mon, int wday);
+static int check_mday (int year, int mon, int mday);
+
+#define isleap(y) ((((y) % 4) == 0 && ((y) % 100) != 0) || ((y) % 400) == 0)
+
+/* Error code is set to one of the following values to indicate an error.
+ 1 the DATEMSK environment variable is null or undefined,
+ 2 the template file cannot be opened for reading,
+ 3 failed to get file status information,
+ 4 the template file is not a regular file,
+ 5 an error is encountered while reading the template file,
+ 6 memory allication failed (not enough memory available),
+ 7 there is no line in the template that matches the input,
+ 8 invalid input specification Example: February 31 or a time is
+ specified that can not be represented in a time_t (representing
+ the time in seconds since 00:00:00 UTC, January 1, 1970) */
+
+/* Returns the first weekday WDAY of month MON in the year YEAR. */
+static int
+first_wday (int year, int mon, int wday)
+{
+ struct tm tm;
+
+ if (wday == INT_MIN)
+ return 1;
+
+ memset (&tm, 0, sizeof (struct tm));
+ tm.tm_year = year;
+ tm.tm_mon = mon;
+ tm.tm_mday = 1;
+ mktime (&tm);
+
+ return (1 + (wday - tm.tm_wday + 7) % 7);
+}
+
+
+/* Returns 1 if MDAY is a valid day of the month in month MON of year
+ YEAR, and 0 if it is not. */
+static int
+check_mday (int year, int mon, int mday)
+{
+ switch (mon)
+ {
+ case 0:
+ case 2:
+ case 4:
+ case 6:
+ case 7:
+ case 9:
+ case 11:
+ if (mday >= 1 && mday <= 31)
+ return 1;
+ break;
+ case 3:
+ case 5:
+ case 8:
+ case 10:
+ if (mday >= 1 && mday <= 30)
+ return 1;
+ break;
+ case 1:
+ if (mday >= 1 && mday <= (isleap (year) ? 29 : 28))
+ return 1;
+ break;
+ }
+
+ return 0;
+}
+
+
+int
+getdate_r (const char *string, struct tm *tp)
+{
+ FILE *fp;
+ char *line;
+ size_t len;
+ char *datemsk;
+ char *result = NULL;
+ time_t timer;
+ struct tm tm;
+ struct stat64 st;
+ int mday_ok = 0;
+
+ datemsk = getenv ("DATEMSK");
+ if (datemsk == NULL || *datemsk == '\0')
+ return 1;
+
+ if (stat64 (datemsk, &st) < 0)
+ return 3;
+
+ if (!S_ISREG (st.st_mode))
+ return 4;
+
+ if (access (datemsk, R_OK) < 0)
+ return 2;
+
+ /* Open the template file. */
+ fp = fopen (datemsk, "r");
+ if (fp == NULL)
+ return 2;
+
+ line = NULL;
+ len = 0;
+ do
+ {
+ ssize_t n;
+
+ n = __getline (&line, &len, fp);
+ if (n < 0)
+ break;
+ if (line[n - 1] == '\n')
+ line[n - 1] = '\0';
+
+ /* Do the conversion. */
+ tp->tm_year = tp->tm_mon = tp->tm_mday = tp->tm_wday = INT_MIN;
+ tp->tm_hour = tp->tm_sec = tp->tm_min = INT_MIN;
+ tp->tm_isdst = -1;
+ result = strptime (string, line, tp);
+ if (result && *result == '\0')
+ break;
+ }
+ while (!__sfeof (fp));
+
+ /* Free the buffer. */
+ free (line);
+
+ /* Check for errors. */
+ if (__sferror (fp))
+ {
+ fclose (fp);
+ return 5;
+ }
+
+ /* Close template file. */
+ fclose (fp);
+
+ if (result == NULL || *result != '\0')
+ return 7;
+
+ /* Get current time. */
+ time (&timer);
+ localtime_r (&timer, &tm);
+
+ /* If only the weekday is given, today is assumed if the given day
+ is equal to the current day and next week if it is less. */
+ if (tp->tm_wday >= 0 && tp->tm_wday <= 6 && tp->tm_year == INT_MIN
+ && tp->tm_mon == INT_MIN && tp->tm_mday == INT_MIN)
+ {
+ tp->tm_year = tm.tm_year;
+ tp->tm_mon = tm.tm_mon;
+ tp->tm_mday = tm.tm_mday + (tp->tm_wday - tm.tm_wday + 7) % 7;
+ mday_ok = 1;
+ }
+
+ /* If only the month is given, the current month is assumed if the
+ given month is equal to the current month and next year if it is
+ less and no year is given (the first day of month is assumed if
+ no day is given. */
+ if (tp->tm_mon >= 0 && tp->tm_mon <= 11 && tp->tm_mday == INT_MIN)
+ {
+ if (tp->tm_year == INT_MIN)
+ tp->tm_year = tm.tm_year + (((tp->tm_mon - tm.tm_mon) < 0) ? 1 : 0);
+ tp->tm_mday = first_wday (tp->tm_year, tp->tm_mon, tp->tm_wday);
+ mday_ok = 1;
+ }
+
+ /* If no hour, minute and second are given the current hour, minute
+ and second are assumed. */
+ if (tp->tm_hour == INT_MIN && tp->tm_min == INT_MIN && tp->tm_sec == INT_MIN)
+ {
+ tp->tm_hour = tm.tm_hour;
+ tp->tm_min = tm.tm_min;
+ tp->tm_sec = tm.tm_sec;
+ }
+
+ /* If no date is given, today is assumed if the given hour is
+ greater than the current hour and tomorrow is assumed if
+ it is less. */
+ if (tp->tm_hour >= 0 && tp->tm_hour <= 23
+ && tp->tm_year == INT_MIN && tp->tm_mon == INT_MIN
+ && tp->tm_mday == INT_MIN && tp->tm_wday == INT_MIN)
+ {
+ tp->tm_year = tm.tm_year;
+ tp->tm_mon = tm.tm_mon;
+ tp->tm_mday = tm.tm_mday + ((tp->tm_hour - tm.tm_hour) < 0 ? 1 : 0);
+ mday_ok = 1;
+ }
+
+ /* Fill in the gaps. */
+ if (tp->tm_year == INT_MIN)
+ tp->tm_year = tm.tm_year;
+ if (tp->tm_hour == INT_MIN)
+ tp->tm_hour = 0;
+ if (tp->tm_min == INT_MIN)
+ tp->tm_min = 0;
+ if (tp->tm_sec == INT_MIN)
+ tp->tm_sec = 0;
+
+ /* Check if the day of month is within range, and if the time can be
+ represented in a time_t. We make use of the fact that the mktime
+ call normalizes the struct tm. */
+ if ((!mday_ok && !check_mday (TM_YEAR_BASE + tp->tm_year, tp->tm_mon,
+ tp->tm_mday))
+ || mktime (tp) == (time_t) -1)
+ return 8;
+
+ return 0;
+}
+
+#ifndef _REENT_ONLY
+struct tm *
+getdate (const char *string)
+{
+ /* Buffer returned by getdate. */
+ static struct tm tmbuf;
+ int errval = getdate_r (string, &tmbuf);
+
+ if (errval != 0)
+ {
+ getdate_err = errval;
+ return NULL;
+ }
+
+ return &tmbuf;
+}
+#endif /* _REENT_ONLY */
diff --git a/newlib/libc/sys/linux/getdate_err.c b/newlib/libc/sys/linux/getdate_err.c
new file mode 100644
index 000000000..e90b74b83
--- /dev/null
+++ b/newlib/libc/sys/linux/getdate_err.c
@@ -0,0 +1,18 @@
+/* The getdate_err variable is stored in the reentrancy structure. This
+ function returns its address for use by the getdate_err macro defined in
+ time.h. */
+
+#include <errno.h>
+#include <reent.h>
+
+#ifndef _REENT_ONLY
+
+int *
+__getdate_err ()
+{
+ struct _reent *ptr = _REENT;
+ _REENT_CHECK_MISC(ptr);
+ return _REENT_GETDATE_ERR_P(ptr);
+}
+
+#endif
diff --git a/newlib/libc/sys/linux/ntp_gettime.c b/newlib/libc/sys/linux/ntp_gettime.c
new file mode 100644
index 000000000..2bcabbc63
--- /dev/null
+++ b/newlib/libc/sys/linux/ntp_gettime.c
@@ -0,0 +1,38 @@
+/* Copyright (C) 1999 Free Software Foundation, Inc.
+ This file is part of the GNU C Library.
+
+ The GNU C Library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) any later version.
+
+ The GNU C 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
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with the GNU C Library; if not, write to the Free
+ Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA. */
+
+#include <sys/timex.h>
+
+#ifndef MOD_OFFSET
+# define modes mode
+#endif
+
+int
+ntp_gettime (ntv)
+ struct ntptimeval *ntv;
+{
+ struct timex tntx;
+ int result;
+
+ tntx.modes = 0;
+ result = __adjtimex (&tntx);
+ ntv->time = tntx.time;
+ ntv->maxerror = tntx.maxerror;
+ ntv->esterror = tntx.esterror;
+ return result;
+}
diff --git a/newlib/libc/sys/linux/sys/stdio.h b/newlib/libc/sys/linux/sys/stdio.h
index 5c51d3b0d..29097c89e 100644
--- a/newlib/libc/sys/linux/sys/stdio.h
+++ b/newlib/libc/sys/linux/sys/stdio.h
@@ -13,4 +13,7 @@
# endif
#endif /* __SINGLE_THREAD__ */
+#define getline __getline
+#define getdelim __getdelim
+
#endif /* _NEWLIB_STDIO_H */
diff --git a/newlib/libc/sys/linux/time.c b/newlib/libc/sys/linux/time.c
index efb90b266..a7313505e 100644
--- a/newlib/libc/sys/linux/time.c
+++ b/newlib/libc/sys/linux/time.c
@@ -6,10 +6,13 @@
#include <errno.h>
#include <sys/types.h>
#include <sys/time.h>
+#include <sys/timex.h>
#include <linux/times.h>
#include <machine/syscall.h>
+#define __NR___adjtimex __NR_adjtimex
+_syscall1(int,__adjtimex,struct timex *,tx)
_syscall1(time_t,time,time_t *,t)
_syscall1(clock_t,times,struct tms *,buf)
_syscall2(int,getitimer,int,type,struct itimerval *,old)
@@ -19,3 +22,5 @@ _syscall2(int,settimeofday,const struct timeval *,tv,const struct timezone *,tz)
_syscall2(int,nanosleep,const struct timespec *,req,struct timespec *,rem)
weak_alias(__libc_gettimeofday,__gettimeofday);
+weak_alias(__adjtimex,adjtimex);
+weak_alias(__adjtimex,ntp_adjtime);