bug-wget
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Bug-wget] bug #28541: Faulty time information in FTP directory list


From: Giuseppe Scrivano
Subject: Re: [Bug-wget] bug #28541: Faulty time information in FTP directory listing
Date: Sun, 01 Aug 2010 22:56:20 +0200
User-agent: Gnus/5.13 (Gnus v5.13) Emacs/23.1 (gnu/linux)

Thanks again for your contribution.  I have just pushed it.

Cheers,
Giuseppe



John Trengrove <address@hidden> writes:

> This is a patch to change the behaviour for FTP directory listing.
> Currently the hours are printed only if the hour is non-zero and does
> not account for if we received the hours & minutes or not. A
> simplistic patch would be to just create an else if statement in
> ftp_index to check if the minutes are non-zero also. This fails though
> for the case 00:00. I am uncertain how much this matters.
>
> I created a more complicated patch (below) that alters the struct
> fileinfo in ftp.h to hold whether hours:minutes were stored or not. It
> is assumes only UNIX FTP servers fail to provide the time for old
> entries.
>
> This would be my first contribution to wget. Criticism/feedback encouraged.
>
> ChangeLog
>
> 2010-07-25  John Trengrove  <address@hidden>
>
>   * ftp.h: Modified struct to hold parsetype.
>   Added enum for parsetype.
>   * ftp-ls.c:
>   (ftp_parse_unix_ls): Default to TT_DAY. Change to TT_HOUR_MIN if
> hours/minutes parsed.
>   (ftp_parse_winnt_ls): Default to TT_HOUR_MIN.
>   (ftp_parse_vms_ls): Default to TT_HOUR_MIN.
>   (ftp_index): Print only if fileinfo struct value ttype set to TT_HOUR_MIN.
>
> Patch
>
> === modified file 'src/ftp-ls.c'
> --- src/ftp-ls.c 2010-05-08 19:56:15 +0000
> +++ src/ftp-ls.c 2010-07-25 06:00:04 +0000
> @@ -100,7 +100,7 @@
>   };
>   int next, len, i, error, ignore;
>   int year, month, day;         /* for time analysis */
> -  int hour, min, sec;
> +  int hour, min, sec, ptype;
>   struct tm timestruct, *tnow;
>   time_t timenow;
>
> @@ -183,6 +183,7 @@
>                                    treated equally for now.  */
>       year = hour = min = sec = 0; /* Silence the compiler.  */
>       month = day = 0;
> +      ptype = TT_DAY;
>       next = -1;
>       /* While there are tokens on the line, parse them.  Next is the
>          number of tokens left until the filename.
> @@ -262,6 +263,7 @@
>                       /* This means these were hours!  */
>                       hour = year;
>                       year = 0;
> +                      ptype = TT_HOUR_MIN;
>                       ++tok;
>                       /* Get the minutes...  */
>                       for (; c_isdigit (*tok); tok++)
> @@ -414,6 +416,7 @@
>       timestruct.tm_yday  = 0;
>       timestruct.tm_isdst = -1;
>       l->tstamp = mktime (&timestruct); /* store the time-stamp */
> +      l->ptype = ptype;
>
>       xfree (line);
>     }
> @@ -501,6 +504,7 @@
>       timestruct.tm_yday  = 0;
>       timestruct.tm_isdst = -1;
>       cur.tstamp = mktime (&timestruct); /* store the time-stamp */
> +      cur.ptype = TT_HOUR_MIN;
>
>       DEBUGP(("Timestamp: %ld\n", cur.tstamp));
>
> @@ -987,6 +991,7 @@
>         }
>       cur.tstamp = timenow; /* Store the time-stamp. */
>       DEBUGP(("Timestamp: %ld\n", cur.tstamp));
> +      cur.ptype = TT_HOUR_MIN;
>
>       /* Add the data for this item to the linked list, */
>       if (!dir)
> @@ -1134,7 +1139,7 @@
>
>           fprintf (fp, "%d %s %02d ", ptm->tm_year + 1900, 
> months[ptm->tm_mon],
>                   ptm->tm_mday);
> -          if (ptm->tm_hour)
> +          if (f->ptype == TT_HOUR_MIN)
>             fprintf (fp, "%02d:%02d  ", ptm->tm_hour, ptm->tm_min);
>           else
>             fprintf (fp, "       ");
>
> === modified file 'src/ftp.h'
> --- src/ftp.h 2010-05-08 19:56:15 +0000
> +++ src/ftp.h 2010-07-25 05:58:22 +0000
> @@ -87,6 +87,12 @@
>   GLOB_GLOBALL, GLOB_GETALL, GLOB_GETONE
> };
>
> +/* Used by to test if time parsed includes hours and minutes. */
> +enum parsetype
> +{
> +  TT_HOUR_MIN, TT_DAY
> +};
> +
> /* Information about one filename in a linked list.  */
> struct fileinfo
> {
> @@ -94,6 +100,7 @@
>   char *name; /* file name */
>   wgint size; /* file size */
>   long tstamp; /* time-stamp */
> +  enum parsetype ptype; /* time parsing */
>   int perms; /* file permissions */
>   char *linkto; /* link to which file points */
>   struct fileinfo *prev; /* previous... */



reply via email to

[Prev in Thread] Current Thread [Next in Thread]