Commit 2e7dcc1e authored by Daniel Stenberg's avatar Daniel Stenberg
Browse files

support for YYYYMMDD added, which allows us to keep using the lib/ftp.c code

I was previously #ifdef'ing to a different look when this parser is used
parent b85a036e
Loading
Loading
Loading
Loading
+27 −38
Original line number Diff line number Diff line
@@ -42,9 +42,9 @@

  weird order:

  1994 Nov 6 08:49:37  (curl_getdate() and GNU date fails)
  1994 Nov 6 08:49:37  (GNU date fails)
  GMT 08:49:37 06-Nov-94 Sunday
  94 6 Nov 08:49:37    (curl_getdate() and GNU date fails)
  94 6 Nov 08:49:37    (GNU date fails)

  time left out:

@@ -67,6 +67,11 @@
  Sun, 12 Sep 2004 15:05:58 -0700
  Sat, 11 Sep 2004 21:32:11 +0200

  compact numerical date strings ISO846-style:

  20040912 15:05:58 -0700
  20040911 +0200

*/
#include "setup.h"
#include <stdio.h>
@@ -79,9 +84,10 @@

#include <curl/curl.h>


#include "parsedate.h"

static time_t Curl_parsedate(const char *date);

static const char *wkday[] = {"Mon", "Tue", "Wed", "Thu", "Fri", "Sat", "Sun"};
static const char *weekday[] = { "Monday", "Tuesday", "Wednesday", "Thursday",
                                 "Friday", "Saturday", "Sunday" };
@@ -209,38 +215,13 @@ static void skip(const char **date)
    (*date)++;
}

#if 0
#define TM_YEAR_ORIGIN 1900

/* Yield A - B, measured in seconds. (from getdate.y)  */
static long
difftm (struct tm *a, struct tm *b)
{
  int ay = a->tm_year + (TM_YEAR_ORIGIN - 1);
  int by = b->tm_year + (TM_YEAR_ORIGIN - 1);
  long days = (
  /* difference in day of year */
                a->tm_yday - b->tm_yday
  /* + intervening leap days */
                + ((ay >> 2) - (by >> 2))
                - (ay / 100 - by / 100)
                + ((ay / 100 >> 2) - (by / 100 >> 2))
  /* + difference in years * 365 */
                + (long) (ay - by) * 365
  );
  return (60 * (60 * (24 * days + (a->tm_hour - b->tm_hour))
                + (a->tm_min - b->tm_min))
          + (a->tm_sec - b->tm_sec));
}
#endif

enum assume {
  DATE_MDAY,
  DATE_YEAR,
  DATE_TIME
};

time_t Curl_parsedate(const char *date)
static time_t Curl_parsedate(const char *date)
{
  time_t t = 0;
  int wdaynum=-1;  /* day of the week number, 0-6 (mon-sun) */
@@ -305,7 +286,8 @@ time_t Curl_parsedate(const char *date)
      else {
        val = strtol(date, &end, 10);

        if( ((end - date) == 4) &&
        if((tzoff == -1) &&
           ((end - date) == 4) &&
           (val < 1300) &&
           (indate< date) &&
           ((date[-1] == '+' || date[-1] == '-'))) {
@@ -319,7 +301,18 @@ time_t Curl_parsedate(const char *date)
          tzoff = date[-1]=='+'?-tzoff:tzoff;
        }

        if((dignext == DATE_MDAY) && (mdaynum == -1)) {
        if(((end - date) == 8) &&
           (yearnum == -1) &&
           (monnum == -1) &&
           (mdaynum == -1)) {
          /* 8 digits, no year, month or day yet. This is YYYYMMDD */
          found = TRUE;
          yearnum = val/10000;
          monnum = (val%10000)/100-1; /* month is 0 - 11 */
          mdaynum = val%100;
        }

        if(!found && (dignext == DATE_MDAY) && (mdaynum == -1)) {
          if((val > 0) && (val<32)) {
            mdaynum = val;
            found = TRUE;
@@ -384,10 +377,6 @@ time_t Curl_parsedate(const char *date)
#else
    gmt = gmtime(&t); /* use gmtime_r() if available */
#endif
#if 0
    /* previous involved version (that bugs?) */
    delta = difftm(&tm, gmt);
#endif

    t2 = mktime(gmt);