mirror of
https://github.com/moparisthebest/curl
synced 2024-12-22 08:08:50 -05:00
Replaced the former date parser with a rewrite. No more yacc/bison needed.
This commit is contained in:
parent
aa8dd932c1
commit
f71b3f48a1
4
CHANGES
4
CHANGES
@ -10,8 +10,8 @@ Daniel (11 September 2004)
|
|||||||
- Added parsedate.[ch] that contains a rewrite of the date parser currently
|
- Added parsedate.[ch] that contains a rewrite of the date parser currently
|
||||||
provided by getdate.y. The new one is MUCH smaller and will allow us to run
|
provided by getdate.y. The new one is MUCH smaller and will allow us to run
|
||||||
away from the yacc/bison jungle. It is also slightly lacking in features
|
away from the yacc/bison jungle. It is also slightly lacking in features
|
||||||
compared to the old one, but it should still support parsing of all date
|
compared to the old one, but it supports parsing of all date formats HTTP
|
||||||
formats HTTP might involve (and a fair bunch of others).
|
involves (and a fair bunch of others).
|
||||||
|
|
||||||
Daniel (10 September 2004)
|
Daniel (10 September 2004)
|
||||||
- As found out by Jonas Forsman, curl didn't allow -F to set Content-Type on
|
- As found out by Jonas Forsman, curl didn't allow -F to set Content-Type on
|
||||||
|
16
configure.ac
16
configure.ac
@ -1282,22 +1282,6 @@ then
|
|||||||
USE_MANUAL="no";
|
USE_MANUAL="no";
|
||||||
fi
|
fi
|
||||||
|
|
||||||
AC_PROG_YACC
|
|
||||||
|
|
||||||
if test -z "$YACC"
|
|
||||||
then
|
|
||||||
AC_MSG_CHECKING([if OK to build without bison/yacc])
|
|
||||||
dnl no yacc is a big deal if we have no pre-fixed getdate.y
|
|
||||||
if test -r "$srcdir/lib/getdate.c"
|
|
||||||
then
|
|
||||||
dnl all is well, we don't have to generate it!
|
|
||||||
AC_MSG_RESULT(yes)
|
|
||||||
else
|
|
||||||
AC_MSG_RESULT(no)
|
|
||||||
AC_MSG_ERROR([no yacc or bison found, can't build libcurl!])
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
|
|
||||||
dnl *************************************************************************
|
dnl *************************************************************************
|
||||||
dnl If the manual variable still is set, then we go with providing a built-in
|
dnl If the manual variable still is set, then we go with providing a built-in
|
||||||
dnl manual
|
dnl manual
|
||||||
|
@ -4,35 +4,36 @@
|
|||||||
.\"
|
.\"
|
||||||
.TH curl_getdate 3 "5 March 2001" "libcurl 7.0" "libcurl Manual"
|
.TH curl_getdate 3 "5 March 2001" "libcurl 7.0" "libcurl Manual"
|
||||||
.SH NAME
|
.SH NAME
|
||||||
curl_getdate - Convert an date in a ASCII string to number of seconds since
|
curl_getdate - Convert an date string to number of seconds since January 1,
|
||||||
January 1, 1970
|
1970
|
||||||
.SH SYNOPSIS
|
.SH SYNOPSIS
|
||||||
.B #include <curl/curl.h>
|
.B #include <curl/curl.h>
|
||||||
.sp
|
.sp
|
||||||
.BI "time_t curl_getdate(char *" datestring ", time_t *"now" );
|
.BI "time_t curl_getdate(char *" datestring ", time_t *"now" );"
|
||||||
.ad
|
.ad
|
||||||
.SH DESCRIPTION
|
.SH DESCRIPTION
|
||||||
This function returns the number of seconds since January 1st 1970, for the
|
This function returns the number of seconds since January 1st 1970 in the UTC
|
||||||
date and time that the
|
time zone, for the date and time that the \fIdatestring\fP parameter
|
||||||
.I datestring
|
specifies. The \fInow\fP parameter is not used, pass a NULL there.
|
||||||
parameter specifies. The
|
|
||||||
.I now
|
\fBNOTE:\fP This function was rewritten for the 7.12.2 release and this
|
||||||
parameter is there and should hold the current time to allow the datestring to
|
documentation covers the functionality of the new one. The new one is not
|
||||||
specify relative dates/times. Read further in the date string parser section
|
feature-complete with the old one, but most of the formats supported by the
|
||||||
below.
|
new one was supported by the old too.
|
||||||
.SH PARSING DATES AND TIMES
|
.SH PARSING DATES AND TIMES
|
||||||
A "date" is a string, possibly empty, containing many items separated by
|
A "date" is a string containing several items separated by whitespace. The
|
||||||
whitespace. The whitespace may be omitted when no ambiguity arises. The
|
order of the items is immaterial. A date string may contain many flavors of
|
||||||
empty string means the beginning of today (i.e., midnight). Order of the
|
items:
|
||||||
items is immaterial. A date string may contain many flavors of items:
|
|
||||||
.TP 0.8i
|
.TP 0.8i
|
||||||
.B calendar date items
|
.B calendar date items
|
||||||
This can be specified in a number of different ways. Including 1970-09-17, 70-9-17, 70-09-17, 9/17/72, 24 September 1972, 24 Sept 72, 24 Sep 72, Sep 24, 1972, 24-sep-72, 24sep72.
|
Can be specified several ways. Month names can only be three-letter
|
||||||
The year can also be omitted, for example: 9/17 or "sep 17".
|
abbrivations, numbers can be zero-prefixed and the year may use 2 or 4 digits.
|
||||||
|
Examples: 06 Nov 1994, 06-Nov-94 and Nov-94 6.
|
||||||
.TP
|
.TP
|
||||||
.B time of the day items
|
.B time of the day items
|
||||||
This string specifies the time on a given day. Syntax supported includes:
|
This string specifies the time on a given day. You must specify it with 6
|
||||||
18:19:0, 18:19, 6:19pm, 18:19-0500 (for specifying the time zone as well).
|
digits with two colons: HH:MM:SS. To not include the time in a date string,
|
||||||
|
will make the function assume 00:00:00. Example: 18:19:21.
|
||||||
.TP
|
.TP
|
||||||
.B time zone items
|
.B time zone items
|
||||||
Specifies international time zone. There are a few acronyms supported, but in
|
Specifies international time zone. There are a few acronyms supported, but in
|
||||||
@ -40,41 +41,52 @@ general you should instead use the specific relative time compared to
|
|||||||
UTC. Supported formats include: -1200, MST, +0100.
|
UTC. Supported formats include: -1200, MST, +0100.
|
||||||
.TP
|
.TP
|
||||||
.B day of the week items
|
.B day of the week items
|
||||||
Specifies a day of the week. If this is mentioned alone it means that day of
|
Specifies a day of the week. Days of the week may be spelled out in full:
|
||||||
the week in the future.
|
`Sunday', `Monday', etc or they may be abbreviated to their first three
|
||||||
|
letters. This is usually not info that adds anything.
|
||||||
Days of the week may be spelled out in full: `Sunday', `Monday', etc or they
|
|
||||||
may be abbreviated to their first three letters, optionally followed by a
|
|
||||||
period. The special abbreviations `Tues' for `Tuesday', `Wednes' for
|
|
||||||
`Wednesday' and `Thur' or `Thurs' for `Thursday' are also allowed.
|
|
||||||
|
|
||||||
A number may precede a day of the week item to move forward supplementary
|
|
||||||
weeks. It is best used in expression like `third monday'. In this context,
|
|
||||||
`last DAY' or `next DAY' is also acceptable; they move one week before or
|
|
||||||
after the day that DAY by itself would represent.
|
|
||||||
.TP
|
|
||||||
.B relative items
|
|
||||||
A relative item adjusts a date (or the current date if none) forward or
|
|
||||||
backward. Example syntax includes: "1 year", "1 year ago", "2 days", "4
|
|
||||||
weeks".
|
|
||||||
|
|
||||||
The string `tomorrow' is worth one day in the future (equivalent to `day'),
|
|
||||||
the string `yesterday' is worth one day in the past (equivalent to `day ago').
|
|
||||||
.TP
|
.TP
|
||||||
.B pure numbers
|
.B pure numbers
|
||||||
If the decimal number is of the form YYYYMMDD and no other calendar date item
|
If a decimal number of the form YYYYMMDD appears, then YYYY is read as the
|
||||||
appears before it in the date string, then YYYY is read as the year, MM as the
|
year, MM as the month number and DD as the day of the month, for the specified
|
||||||
month number and DD as the day of the month, for the specified calendar date.
|
calendar date.
|
||||||
.PP
|
.PP
|
||||||
|
.SH EXAMPLES
|
||||||
|
.nf
|
||||||
|
Sun, 06 Nov 1994 08:49:37 GMT
|
||||||
|
Sunday, 06-Nov-94 08:49:37 GMT
|
||||||
|
Sun Nov 6 08:49:37 1994
|
||||||
|
06 Nov 1994 08:49:37 GMT
|
||||||
|
06-Nov-94 08:49:37 GMT
|
||||||
|
Nov 6 08:49:37 1994
|
||||||
|
06 Nov 1994 08:49:37
|
||||||
|
06-Nov-94 08:49:37
|
||||||
|
1994 Nov 6 08:49:37
|
||||||
|
GMT 08:49:37 06-Nov-94 Sunday
|
||||||
|
94 6 Nov 08:49:37
|
||||||
|
1994 Nov 6
|
||||||
|
06-Nov-94
|
||||||
|
Sun Nov 6 94
|
||||||
|
1994.Nov.6
|
||||||
|
Sun/Nov/6/94/GMT
|
||||||
|
Sun, 06 Nov 1994 08:49:37 CET
|
||||||
|
06 Nov 1994 08:49:37 EST
|
||||||
|
Sun, 12 Sep 2004 15:05:58 -0700
|
||||||
|
Sat, 11 Sep 2004 21:32:11 +0200
|
||||||
|
20040912 15:05:58 -0700
|
||||||
|
20040911 +0200
|
||||||
|
.fi
|
||||||
|
.SH STANDARDS
|
||||||
|
This parser was written to handle date formats specified in RFC 822 (including
|
||||||
|
the update in RFC 1123) using time zone name or time zone delta and RFC 850
|
||||||
|
(obsoleted by RFC 1036) and ANSI C's asctime() format. These formats are the
|
||||||
|
only ones RFC2616 says HTTP applications may use.
|
||||||
.SH RETURN VALUE
|
.SH RETURN VALUE
|
||||||
This function returns zero when it fails to parse the date string. Otherwise
|
This function returns -1 when it fails to parse the date string. Otherwise it
|
||||||
it returns the number of seconds as described.
|
returns the number of seconds as described.
|
||||||
.SH AUTHORS
|
.SH REWRITE
|
||||||
Originally written by Steven M. Bellovin <smb@research.att.com> while at the
|
The former version of this function was built with yacc and was not only very
|
||||||
University of North Carolina at Chapel Hill. Later tweaked by a couple of
|
large, it was also never quite understood and it wasn't possible to build with
|
||||||
people on Usenet. Completely overhauled by Rich $alz <rsalz@bbn.com> and Jim
|
non-GNU tools since only Bison could make it thread-safe!
|
||||||
Berets <jberets@bbn.com> in August, 1990.
|
|
||||||
|
|
||||||
It has been modified extensively since imported to curl.
|
The rewrite was done for 7.12.2. The new one is much smaller and use simpler
|
||||||
.SH "SEE ALSO"
|
code.
|
||||||
.BR GNU date(1)
|
|
||||||
|
@ -24,7 +24,7 @@ AUTOMAKE_OPTIONS = foreign nostdinc
|
|||||||
|
|
||||||
DSP = curllib.dsp
|
DSP = curllib.dsp
|
||||||
|
|
||||||
EXTRA_DIST = getdate.y Makefile.b32 Makefile.m32 \
|
EXTRA_DIST = Makefile.b32 Makefile.m32 \
|
||||||
Makefile.vc6 Makefile.riscos libcurl.def $(DSP) curllib.dsw \
|
Makefile.vc6 Makefile.riscos libcurl.def $(DSP) curllib.dsw \
|
||||||
config-vms.h config-win32.h config-riscos.h config-mac.h config.h.in \
|
config-vms.h config-win32.h config-riscos.h config-mac.h config.h.in \
|
||||||
ca-bundle.crt README.encoding README.memoryleak README.ares \
|
ca-bundle.crt README.encoding README.memoryleak README.ares \
|
||||||
@ -33,7 +33,7 @@ EXTRA_DIST = getdate.y Makefile.b32 Makefile.m32 \
|
|||||||
makefile.amiga Makefile.netware nwlib.c libcurl.imp \
|
makefile.amiga Makefile.netware nwlib.c libcurl.imp \
|
||||||
msvcproj.head msvcproj.foot
|
msvcproj.head msvcproj.foot
|
||||||
|
|
||||||
CLEANFILES = $(DSP) getdate.c
|
CLEANFILES = $(DSP)
|
||||||
|
|
||||||
lib_LTLIBRARIES = libcurl.la
|
lib_LTLIBRARIES = libcurl.la
|
||||||
|
|
||||||
@ -93,12 +93,7 @@ libcurl_la_SOURCES = $(CSOURCES) $(HHEADERS)
|
|||||||
WIN32SOURCES = $(CSOURCES) libcurl.def
|
WIN32SOURCES = $(CSOURCES) libcurl.def
|
||||||
WIN32HEADERS = $(HHEADERS) config-win32.h
|
WIN32HEADERS = $(HHEADERS) config-win32.h
|
||||||
|
|
||||||
BUILT_SOURCES = $(srcdir)/getdate.c $(top_builddir)/lib/ca-bundle.h
|
BUILT_SOURCES = $(top_builddir)/lib/ca-bundle.h
|
||||||
|
|
||||||
# Say $(srcdir), so GNU make does not report an ambiguity with the .y.c rule.
|
|
||||||
$(srcdir)/getdate.c: getdate.y
|
|
||||||
cd $(srcdir) && $(YACC) $(YFLAGS) getdate.y && \
|
|
||||||
sed -e 's:YYSTYPE yylval;:YYSTYPE yylval = {0}; /* post-bison fix */:' < y.tab.c > getdate.c && rm -f y.tab.c
|
|
||||||
|
|
||||||
$(top_builddir)/lib/ca-bundle.h: Makefile.in Makefile
|
$(top_builddir)/lib/ca-bundle.h: Makefile.in Makefile
|
||||||
@if test -f $@; then \
|
@if test -f $@; then \
|
||||||
|
@ -2,21 +2,18 @@
|
|||||||
|
|
||||||
CSOURCES = file.c timeval.c base64.c hostip.c progress.c formdata.c \
|
CSOURCES = file.c timeval.c base64.c hostip.c progress.c formdata.c \
|
||||||
cookie.c http.c sendf.c ftp.c url.c dict.c if2ip.c speedcheck.c \
|
cookie.c http.c sendf.c ftp.c url.c dict.c if2ip.c speedcheck.c \
|
||||||
getdate.c ldap.c ssluse.c version.c getenv.c escape.c mprintf.c \
|
ldap.c ssluse.c version.c getenv.c escape.c mprintf.c telnet.c \
|
||||||
telnet.c netrc.c getinfo.c transfer.c strequal.c easy.c security.c \
|
netrc.c getinfo.c transfer.c strequal.c easy.c security.c krb4.c \
|
||||||
krb4.c memdebug.c http_chunks.c strtok.c connect.c llist.c hash.c \
|
memdebug.c http_chunks.c strtok.c connect.c llist.c hash.c multi.c \
|
||||||
multi.c content_encoding.c share.c http_digest.c md5.c \
|
content_encoding.c share.c http_digest.c md5.c http_negotiate.c \
|
||||||
http_negotiate.c http_ntlm.c inet_pton.c strtoofft.c strerror.c \
|
http_ntlm.c inet_pton.c strtoofft.c strerror.c hostares.c hostasyn.c \
|
||||||
hostares.c hostasyn.c hostip4.c hostip6.c hostsyn.c hostthre.c \
|
hostip4.c hostip6.c hostsyn.c hostthre.c inet_ntop.c parsedate.c
|
||||||
inet_ntop.c
|
|
||||||
|
|
||||||
HHEADERS = arpa_telnet.h netrc.h file.h timeval.h base64.h hostip.h \
|
HHEADERS = arpa_telnet.h netrc.h file.h timeval.h base64.h hostip.h \
|
||||||
progress.h formdata.h cookie.h http.h sendf.h ftp.h url.h dict.h \
|
progress.h formdata.h cookie.h http.h sendf.h ftp.h url.h dict.h \
|
||||||
if2ip.h speedcheck.h urldata.h getdate.h ldap.h ssluse.h escape.h \
|
if2ip.h speedcheck.h urldata.h ldap.h ssluse.h escape.h telnet.h \
|
||||||
telnet.h getinfo.h strequal.h security.h krb4.h memdebug.h \
|
getinfo.h strequal.h security.h krb4.h memdebug.h inet_ntoa_r.h \
|
||||||
inet_ntoa_r.h http_chunks.h strtok.h connect.h llist.h hash.h \
|
http_chunks.h strtok.h connect.h llist.h hash.h content_encoding.h \
|
||||||
content_encoding.h share.h md5.h http_digest.h http_negotiate.h \
|
share.h md5.h http_digest.h http_negotiate.h http_ntlm.h ca-bundle.h \
|
||||||
http_ntlm.h ca-bundle.h inet_pton.h strtoofft.h strerror.h \
|
inet_pton.h strtoofft.h strerror.h inet_ntop.h curlx.h memory.h \
|
||||||
inet_ntop.h curlx.h memory.h setup.h transfer.h
|
setup.h transfer.h
|
||||||
|
|
||||||
|
|
||||||
|
2469
lib/getdate.c.cvs
2469
lib/getdate.c.cvs
File diff suppressed because it is too large
Load Diff
@ -1,37 +0,0 @@
|
|||||||
/*
|
|
||||||
** Originally written by Steven M. Bellovin <smb@research.att.com> while
|
|
||||||
** at the University of North Carolina at Chapel Hill. Later tweaked by
|
|
||||||
** a couple of people on Usenet. Completely overhauled by Rich $alz
|
|
||||||
** <rsalz@bbn.com> and Jim Berets <jberets@bbn.com> in August, 1990.
|
|
||||||
**
|
|
||||||
** This code is in the public domain and has no copyright.
|
|
||||||
*/
|
|
||||||
|
|
||||||
# include "setup.h"
|
|
||||||
|
|
||||||
#ifndef PARAMS
|
|
||||||
# if defined PROTOTYPES || (defined __STDC__ && __STDC__)
|
|
||||||
# define PARAMS(Args) Args
|
|
||||||
# else
|
|
||||||
# define PARAMS(Args) ()
|
|
||||||
# endif
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifdef vms
|
|
||||||
# include <types.h>
|
|
||||||
# include <time.h>
|
|
||||||
#else
|
|
||||||
# include <sys/types.h>
|
|
||||||
# if TIME_WITH_SYS_TIME
|
|
||||||
# include <sys/time.h>
|
|
||||||
# include <time.h>
|
|
||||||
# else
|
|
||||||
# if HAVE_SYS_TIME_H
|
|
||||||
# include <sys/time.h>
|
|
||||||
# else
|
|
||||||
# include <time.h>
|
|
||||||
# endif
|
|
||||||
# endif
|
|
||||||
#endif /* defined (vms) */
|
|
||||||
|
|
||||||
time_t curl_getdate PARAMS ((const char *p, const time_t *now));
|
|
1081
lib/getdate.y
1081
lib/getdate.y
File diff suppressed because it is too large
Load Diff
@ -67,7 +67,7 @@
|
|||||||
Sun, 12 Sep 2004 15:05:58 -0700
|
Sun, 12 Sep 2004 15:05:58 -0700
|
||||||
Sat, 11 Sep 2004 21:32:11 +0200
|
Sat, 11 Sep 2004 21:32:11 +0200
|
||||||
|
|
||||||
compact numerical date strings ISO846-style:
|
compact numerical date strings:
|
||||||
|
|
||||||
20040912 15:05:58 -0700
|
20040912 15:05:58 -0700
|
||||||
20040911 +0200
|
20040911 +0200
|
||||||
|
Loading…
Reference in New Issue
Block a user