Thanks again for your contribution. I have just pushed it. Cheers, Giuseppe
John Trengrove <jtrengr...@gmail.com> 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 <jtrengr...@gmail.com> > > * 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... */