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.
This commit is contained in:
parent
35728d4f14
commit
d427d09204
|
@ -1,3 +1,21 @@
|
|||
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.
|
||||
|
|
|
@ -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.
|
||||
*/
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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 \
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
|
|
@ -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);
|
||||
}
|
||||
|
|
@ -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
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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 */
|
|
@ -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
|
|
@ -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;
|
||||
}
|
|
@ -13,4 +13,7 @@
|
|||
# endif
|
||||
#endif /* __SINGLE_THREAD__ */
|
||||
|
||||
#define getline __getline
|
||||
#define getdelim __getdelim
|
||||
|
||||
#endif /* _NEWLIB_STDIO_H */
|
||||
|
|
|
@ -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);
|
||||
|
|
Loading…
Reference in New Issue