X-Git-Url: http://sjero.net/git/?a=blobdiff_plain;f=src%2Fftp-ls.c;h=91c572e7018a9d3e138e6ebf2ae9bf6d2638c3e3;hb=d5be8ecca466601bda9b81c28a79077fbda6ccde;hp=ca7f43f5ab9030f8d95403a7e03b81a90d3a94f5;hpb=568b5842714d0da3e9ad50e84cf09ba55c74572c;p=wget diff --git a/src/ftp-ls.c b/src/ftp-ls.c index ca7f43f5..91c572e7 100644 --- a/src/ftp-ls.c +++ b/src/ftp-ls.c @@ -1,21 +1,21 @@ /* Parsing FTP `ls' output. - Copyright (C) 1995, 1996, 1997, 2000, 2001 Free Software Foundation, - Inc. + Copyright (C) 1995, 1996, 1997, 2000, 2001 + Free Software Foundation, Inc. -This file is part of Wget. +This file is part of GNU Wget. -This program is free software; you can redistribute it and/or modify +GNU Wget is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. -This program is distributed in the hope that it will be useful, +GNU Wget is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License -along with this program; if not, write to the Free Software +along with Wget; if not, write to the Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */ #include @@ -146,7 +146,7 @@ ftp_parse_unix_ls (const char *file, int ignore_perms) break; default: cur.type = FT_UNKNOWN; - DEBUGP (("UNKOWN; ")); + DEBUGP (("UNKNOWN; ")); break; } @@ -155,15 +155,16 @@ ftp_parse_unix_ls (const char *file, int ignore_perms) switch (cur.type) { case FT_PLAINFILE: - cur.perms = 420; + cur.perms = 0644; break; case FT_DIRECTORY: - cur.perms = 493; + cur.perms = 0755; break; default: - cur.perms = 1023; + /*cur.perms = 1023;*/ /* #### What is this? --hniksic */ + cur.perms = 0644; } - DEBUGP (("implicite perms %0o; ", cur.perms)); + DEBUGP (("implicit perms %0o; ", cur.perms)); } else { @@ -440,9 +441,11 @@ ftp_parse_winnt_ls (const char *file) cur.name = xstrdup(tok); DEBUGP(("Name: '%s'\n", cur.name)); - /* First column: mm-dd-yy */ + /* First column: mm-dd-yy. Should atoi() on the month fail, january + will be assumed. */ tok = strtok(line, "-"); - month = atoi(tok); + month = atoi(tok) - 1; + if (month < 0) month = 0; tok = strtok(NULL, "-"); day = atoi(tok); tok = strtok(NULL, " "); @@ -489,14 +492,14 @@ ftp_parse_winnt_ls (const char *file) { cur.type = FT_DIRECTORY; cur.size = 0; - cur.perms = 493; /* my gcc does not like 0755 ?? */ + cur.perms = 0755; DEBUGP(("Directory\n")); } else { cur.type = FT_PLAINFILE; cur.size = atoi(tok); - cur.perms = 420; /* 0664 octal */ + cur.perms = 0644; DEBUGP(("File, size %ld bytes\n", cur.size)); } @@ -563,7 +566,7 @@ ftp_parse_vms_ls (const char *file) int hour, min, sec; struct tm timestruct; - char *line, *tok, *p; /* tokenizer */ + char *line, *tok; /* tokenizer */ struct fileinfo *dir, *l, cur; /* list creation */ fp = fopen (file, "rb"); @@ -584,6 +587,7 @@ ftp_parse_vms_ls (const char *file) /* Line loop to end of file: */ while ((line = read_whole_line (fp))) { + char *p; i = clean_line (line); if (!i) break; @@ -665,18 +669,22 @@ ftp_parse_vms_ls (const char *file) } for (i=0; i<12; i++) if (!strcmp(tok,months[i])) break; /* Uknown months are mapped to January */ - month = (i%12)+1; - tok = strtok(NULL, " "); - year = atoi(tok)-1900; + month = i % 12 ; + tok = strtok (NULL, " "); + year = atoi (tok) - 1900; DEBUGP(("date parsed\n")); - /* Fourth/Third column: Time hh:mm:ss */ - tok = strtok(NULL, ":"); - hour = atoi(tok); - tok = strtok(NULL, ":"); - min = atoi(tok); - tok = strtok(NULL, " "); - sec = atoi(tok); + /* Fourth/Third column: Time hh:mm[:ss] */ + tok = strtok (NULL, " "); + hour = min = sec = 0; + p = tok; + hour = atoi (p); + for (; *p && *p != ':'; ++p); + if (*p) + min = atoi (++p); + for (; *p && *p != ':'; ++p); + if (*p) + sec = atoi (++p); DEBUGP(("YYYY/MM/DD HH:MM:SS - %d/%02d/%02d %02d:%02d:%02d\n", year+1900, month, day, hour, min, sec)); @@ -777,7 +785,7 @@ ftp_parse_ls (const char *file, const enum stype system_type) return ftp_parse_unix_ls (file, TRUE); default: logprintf (LOG_NOTQUIET, _("\ -Usupported listing type, trying Unix listing parser.\n")); +Unsupported listing type, trying Unix listing parser.\n")); return ftp_parse_unix_ls (file, FALSE); } } @@ -788,7 +796,7 @@ Usupported listing type, trying Unix listing parser.\n")); directories and files on the appropriate host. The references are FTP. */ uerr_t -ftp_index (const char *file, struct urlinfo *u, struct fileinfo *f) +ftp_index (const char *file, struct url *u, struct fileinfo *f) { FILE *fp; char *upwd; @@ -809,8 +817,8 @@ ftp_index (const char *file, struct urlinfo *u, struct fileinfo *f) { char *tmpu, *tmpp; /* temporary, clean user and passwd */ - tmpu = CLEANDUP (u->user); - tmpp = u->passwd ? CLEANDUP (u->passwd) : NULL; + tmpu = encode_string (u->user); + tmpp = u->passwd ? encode_string (u->passwd) : NULL; upwd = (char *)xmalloc (strlen (tmpu) + (tmpp ? (1 + strlen (tmpp)) : 0) + 2); sprintf (upwd, "%s%s%s@", tmpu, tmpp ? ":" : "", tmpp ? tmpp : "");