[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Bug-wget] bug #28541: Faulty time information in FTP directory listing
From: |
John Trengrove |
Subject: |
[Bug-wget] bug #28541: Faulty time information in FTP directory listing |
Date: |
Mon, 26 Jul 2010 22:00:43 +1200 |
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 (×truct); /* store the time-stamp */
+ l->ptype = ptype;
xfree (line);
}
@@ -501,6 +504,7 @@
timestruct.tm_yday = 0;
timestruct.tm_isdst = -1;
cur.tstamp = mktime (×truct); /* 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... */
- [Bug-wget] bug #28541: Faulty time information in FTP directory listing,
John Trengrove <=