OSDN Git Service

2002-06-21 Jeff Johnston <jjohnstn@redhat.com>
authorjjohnstn <jjohnstn>
Fri, 21 Jun 2002 18:29:14 +0000 (18:29 +0000)
committerjjohnstn <jjohnstn>
Fri, 21 Jun 2002 18:29:14 +0000 (18:29 +0000)
        * 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.

14 files changed:
newlib/ChangeLog
newlib/libc/include/stdio.h
newlib/libc/include/time.h
newlib/libc/stdio/Makefile.am
newlib/libc/stdio/Makefile.in
newlib/libc/stdio/getdelim.c [new file with mode: 0644]
newlib/libc/stdio/getline.c [new file with mode: 0644]
newlib/libc/sys/linux/Makefile.am
newlib/libc/sys/linux/Makefile.in
newlib/libc/sys/linux/getdate.c [new file with mode: 0644]
newlib/libc/sys/linux/getdate_err.c [new file with mode: 0644]
newlib/libc/sys/linux/ntp_gettime.c [new file with mode: 0644]
newlib/libc/sys/linux/sys/stdio.h
newlib/libc/sys/linux/time.c

index ec1722f..4e1c582 100644 (file)
@@ -1,5 +1,23 @@
 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.
+
+2002-06-21  Jeff Johnston  <jjohnstn@redhat.com>
+
        * libc/include/math.h: Add <sys/types.h> to get _uint32_t definition.
        * libc/include/machine/types.h: Skip __off_t, __pid_t, and
        __loff_t definitions if special _HAVE_SYSTYPES macro defined.
index 73204cb..51403a3 100644 (file)
@@ -46,13 +46,13 @@ extern "C" {
  */
 
 #include <sys/reent.h>
-
-#include <sys/stdio.h>
+#include <sys/types.h>
 
 typedef _fpos_t fpos_t;
-
 typedef struct __sFILE FILE;
 
+#include <sys/stdio.h>
+
 #define        __SLBF  0x0001          /* line buffered */
 #define        __SNBF  0x0002          /* unbuffered */
 #define        __SRD   0x0004          /* OK to read */
@@ -271,6 +271,9 @@ int _EXFUN(_vfscanf_r, (struct _reent *, FILE *, const char *, __VALIST));
 int    _EXFUN(_vscanf_r, (struct _reent *, const char *, __VALIST));
 int    _EXFUN(_vsscanf_r, (struct _reent *, const char *, const char *, __VALIST));
 
+ssize_t _EXFUN(__getdelim, (char **, size_t *, int, FILE *));
+ssize_t _EXFUN(__getline, (char **, size_t *, FILE *));
+
 /*
  * Routines internal to the implementation.
  */
index c45be54..9b16417 100644 (file)
@@ -67,6 +67,29 @@ char      *_EXFUN(strptime,     (const char *, const char *, struct tm *));
 _VOID      _EXFUN(tzset,       (_VOID));
 _VOID      _EXFUN(_tzset_r,    (struct _reent *));
 
+/* getdate functions */
+
+#ifdef HAVE_GETDATE
+#ifndef _REENT_ONLY
+#define getdate_err (*__getdate_err())
+int *_EXFUN(__getdate_err,(_VOID));
+
+struct tm *    _EXFUN(getdate, (const char *));
+/* getdate_err is set to one of the following values to indicate the 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  */
+#endif /* !_REENT_ONLY */
+
+/* getdate_r returns the error code as above */
+int            _EXFUN(getdate_r, (const char *, struct tm *));
+#endif /* HAVE_GETDATE */
+
 /* defines for the opengroup specifications Derived from Issue 1 of the SVID.  */
 extern __IMPORT time_t _timezone;
 extern __IMPORT int _daylight;
index e7d4fea..b7eaab8 100644 (file)
@@ -35,6 +35,8 @@ LIB_SOURCES = \
        getchar.c                       \
        getc_u.c                        \
        getchar_u.c                     \
+       getdelim.c                      \
+       getline.c                       \
        gets.c                          \
        getw.c                          \
        iprintf.c                       \
@@ -129,6 +131,8 @@ CHEWOUT_FILES = \
        getchar.def             \
        getc_u.def              \
        getchar_u.def           \
+       getdelim.def            \
+       getline.def             \
        gets.def                \
        getw.def                \
        iprintf.def             \
index b8d348f..7210cb7 100644 (file)
@@ -139,6 +139,8 @@ LIB_SOURCES = \
        getchar.c                       \
        getc_u.c                        \
        getchar_u.c                     \
+       getdelim.c                      \
+       getline.c                       \
        gets.c                          \
        getw.c                          \
        iprintf.c                       \
@@ -220,6 +222,8 @@ CHEWOUT_FILES = \
        getchar.def             \
        getc_u.def              \
        getchar_u.def           \
+       getdelim.def            \
+       getline.def             \
        gets.def                \
        getw.def                \
        iprintf.def             \
@@ -274,7 +278,8 @@ LIBS = @LIBS@
 @USE_LIBTOOL_FALSE@fseek.$(OBJEXT) fsetpos.$(OBJEXT) ftell.$(OBJEXT) \
 @USE_LIBTOOL_FALSE@fvwrite.$(OBJEXT) fwalk.$(OBJEXT) fwrite.$(OBJEXT) \
 @USE_LIBTOOL_FALSE@getc.$(OBJEXT) getchar.$(OBJEXT) getc_u.$(OBJEXT) \
-@USE_LIBTOOL_FALSE@getchar_u.$(OBJEXT) gets.$(OBJEXT) getw.$(OBJEXT) \
+@USE_LIBTOOL_FALSE@getchar_u.$(OBJEXT) getdelim.$(OBJEXT) \
+@USE_LIBTOOL_FALSE@getline.$(OBJEXT) gets.$(OBJEXT) getw.$(OBJEXT) \
 @USE_LIBTOOL_FALSE@iprintf.$(OBJEXT) makebuf.$(OBJEXT) mktemp.$(OBJEXT) \
 @USE_LIBTOOL_FALSE@perror.$(OBJEXT) printf.$(OBJEXT) putc.$(OBJEXT) \
 @USE_LIBTOOL_FALSE@putchar.$(OBJEXT) putc_u.$(OBJEXT) \
@@ -299,15 +304,15 @@ LTLIBRARIES =  $(noinst_LTLIBRARIES)
 @USE_LIBTOOL_TRUE@fopen.lo fprintf.lo fputc.lo fputs.lo fread.lo \
 @USE_LIBTOOL_TRUE@freopen.lo fscanf.lo fseek.lo fsetpos.lo ftell.lo \
 @USE_LIBTOOL_TRUE@fvwrite.lo fwalk.lo fwrite.lo getc.lo getchar.lo \
-@USE_LIBTOOL_TRUE@getc_u.lo getchar_u.lo gets.lo getw.lo iprintf.lo \
-@USE_LIBTOOL_TRUE@makebuf.lo mktemp.lo perror.lo printf.lo putc.lo \
-@USE_LIBTOOL_TRUE@putchar.lo putc_u.lo putchar_u.lo puts.lo putw.lo \
-@USE_LIBTOOL_TRUE@refill.lo remove.lo rename.lo rewind.lo rget.lo \
-@USE_LIBTOOL_TRUE@scanf.lo setbuf.lo setbuffer.lo setlinebuf.lo \
-@USE_LIBTOOL_TRUE@setvbuf.lo siprintf.lo snprintf.lo sprintf.lo \
-@USE_LIBTOOL_TRUE@sscanf.lo stdio.lo tmpfile.lo tmpnam.lo ungetc.lo \
-@USE_LIBTOOL_TRUE@vfscanf.lo vprintf.lo vscanf.lo vsnprintf.lo \
-@USE_LIBTOOL_TRUE@vsprintf.lo vsscanf.lo wbuf.lo wsetup.lo
+@USE_LIBTOOL_TRUE@getc_u.lo getchar_u.lo getdelim.lo getline.lo gets.lo \
+@USE_LIBTOOL_TRUE@getw.lo iprintf.lo makebuf.lo mktemp.lo perror.lo \
+@USE_LIBTOOL_TRUE@printf.lo putc.lo putchar.lo putc_u.lo putchar_u.lo \
+@USE_LIBTOOL_TRUE@puts.lo putw.lo refill.lo remove.lo rename.lo \
+@USE_LIBTOOL_TRUE@rewind.lo rget.lo scanf.lo setbuf.lo setbuffer.lo \
+@USE_LIBTOOL_TRUE@setlinebuf.lo setvbuf.lo siprintf.lo snprintf.lo \
+@USE_LIBTOOL_TRUE@sprintf.lo sscanf.lo stdio.lo tmpfile.lo tmpnam.lo \
+@USE_LIBTOOL_TRUE@ungetc.lo vfscanf.lo vprintf.lo vscanf.lo \
+@USE_LIBTOOL_TRUE@vsnprintf.lo vsprintf.lo vsscanf.lo wbuf.lo wsetup.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/stdio/getdelim.c b/newlib/libc/stdio/getdelim.c
new file mode 100644 (file)
index 0000000..8ec9d40
--- /dev/null
@@ -0,0 +1,139 @@
+/*
+FUNCTION
+<<getdelim>>---read a line up to a specified line delimeter
+
+INDEX
+       getdelim
+
+ANSI_SYNOPSIS
+       #include <stdio.h>
+       int getdelim(char **<[bufptr]>, size_t *<[n]>,
+                     int <[delim]>, FILE *<[fp]>);
+
+TRAD_SYNOPSIS
+       #include <stdio.h>
+       int getdelim(<[bufptr]>, <[n]>, <[delim]>, <[fp]>)
+       char **<[bufptr]>;
+       size_t *<[n]>;
+       int <[delim]>;
+       FILE *<[fp]>;
+
+DESCRIPTION
+<<getdelim>> reads a file <[fp]> up to and possibly including a specified
+delimeter <[delim]>.  The line is read into a buffer pointed to
+by <[bufptr]> and designated with size *<[n]>.  If the buffer is
+not large enough, it will be dynamically grown by <<getdelim>>.
+As the buffer is grown, the pointer to the size <[n]> will be
+updated.
+
+RETURNS
+<<getdelim>> returns <<-1>> if no characters were successfully read,
+otherwise, it returns the number of bytes successfully read.
+at end of file, the result is nonzero.
+
+PORTABILITY
+<<getdelim>> is a glibc extension.
+
+No supporting OS subroutines are directly required.
+*/
+
+/* Copyright 2002, Red Hat Inc. - all rights reserved */
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <errno.h>
+#include "local.h"
+
+#define MIN_LINE_SIZE 4
+#define DEFAULT_LINE_SIZE 128
+
+ssize_t
+__getdelim (bufptr, n, delim, fp)
+     char **bufptr;
+     size_t *n;
+     int delim;
+     FILE *fp;
+{
+  char *buf;
+  char *ptr;
+  size_t newsize, numbytes;
+  int pos;
+  int ch;
+  int cont;
+
+  if (fp == NULL || bufptr == NULL || n == NULL)
+    {
+      errno = EINVAL;
+      return -1;
+    }
+
+  buf = *bufptr;
+  if (buf == NULL || *n < MIN_LINE_SIZE) 
+    {
+      buf = (char *)realloc (*bufptr, DEFAULT_LINE_SIZE);
+      if (buf == NULL)
+        {
+         return -1;
+        }
+      *bufptr = buf;
+      *n = DEFAULT_LINE_SIZE;
+    }
+
+  _flockfile(fp);
+
+  CHECK_INIT(fp);
+
+  numbytes = *n;
+  ptr = buf;
+
+  cont = 1;
+
+  while (cont)
+    {
+      /* fill buffer - leaving room for nul-terminator */
+      while (--numbytes > 0)
+        {
+          if ((ch = getc_unlocked (fp)) == EOF)
+            {
+             cont = 0;
+              break;
+            }
+         else 
+            {
+              *ptr++ = ch;
+              if (ch == delim)
+                {
+                  cont = 0;
+                  break;
+                }
+            }
+        }
+
+      /* Buffer is too small so reallocate a larger buffer.  */
+      pos = ptr - buf;
+      newsize = (*n << 1);
+      buf = realloc (buf, newsize);
+      if (buf == NULL)
+        {
+          cont = 0;
+          break;
+        }
+
+      /* After reallocating, continue in new buffer */          
+      *bufptr = buf;
+      *n = newsize;
+      ptr = buf + pos;
+      numbytes = newsize - pos;
+    }
+
+  _funlockfile (fp);
+
+  /* if no input data, return failure */
+  if (ptr == buf)
+    return -1;
+
+  /* otherwise, nul-terminate and return number of bytes read */
+  *ptr = '\0';
+  return (ssize_t)(ptr - buf);
+}
+
diff --git a/newlib/libc/stdio/getline.c b/newlib/libc/stdio/getline.c
new file mode 100644 (file)
index 0000000..741a7dc
--- /dev/null
@@ -0,0 +1,54 @@
+/*
+FUNCTION
+<<getline>>---read a line from a file
+
+INDEX
+        getline
+
+ANSI_SYNOPSIS
+        #include <stdio.h>
+        ssize_t getline(char **<[bufptr]>, size_t *<[n]>, FILE *<[fp]>);
+
+TRAD_SYNOPSIS
+        #include <stdio.h>
+        ssize_t getline(<[bufptr]>, <[n]>, <[fp]>)
+        char **<[bufptr]>;
+        size_t *<[n]>;
+        FILE *<[fp]>;
+
+DESCRIPTION
+<<getline>> reads a file <[fp]> up to and possibly including the
+newline character.  The line is read into a buffer pointed to
+by <[bufptr]> and designated with size *<[n]>.  If the buffer is
+not large enough, it will be dynamically grown by <<getdelim>>.
+As the buffer is grown, the pointer to the size <[n]> will be
+updated.
+
+<<getline>> is equivalent to getdelim(bufptr, n, '\n', fp);
+
+RETURNS
+<<getline>> returns <<-1>> if no characters were successfully read,
+otherwise, it returns the number of bytes successfully read.
+at end of file, the result is nonzero.
+
+PORTABILITY
+<<getline>> is a glibc extension.
+
+No supporting OS subroutines are directly required.
+*/
+
+/* Copyright 2002, Red Hat Inc. - all rights reserved */
+
+#include <stdio.h>
+
+extern ssize_t __getdelim (char **, size_t *, int, FILE *);
+
+ssize_t
+__getline (lptr, n, fp)
+     char **lptr;
+     size_t *n;
+     FILE *fp;
+{
+  return __getdelim (lptr, n, '\n', fp);
+}
+
index 861340d..78cdd39 100644 (file)
@@ -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
index 9f8459e..68a483b 100644 (file)
@@ -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 (file)
index 0000000..9137a2e
--- /dev/null
@@ -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 (file)
index 0000000..e90b74b
--- /dev/null
@@ -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 (file)
index 0000000..2bcabbc
--- /dev/null
@@ -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;
+}
index 5c51d3b..29097c8 100644 (file)
@@ -13,4 +13,7 @@
 #  endif
 #endif /* __SINGLE_THREAD__ */
 
+#define getline __getline
+#define getdelim __getdelim
+
 #endif /* _NEWLIB_STDIO_H */
index efb90b2..a731350 100644 (file)
@@ -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);