From 739cc5ec16a68170b6bbe1e28f2d32eb15c23252 Mon Sep 17 00:00:00 2001 From: hniksic Date: Sun, 21 May 2006 02:10:39 -0700 Subject: [PATCH] [svn] Fix breakage in ls output parsing. By Larry Jones. --- src/ChangeLog | 5 +++++ src/ftp-ls.c | 15 ++++++--------- 2 files changed, 11 insertions(+), 9 deletions(-) diff --git a/src/ChangeLog b/src/ChangeLog index ec7f0ff9..b8e207a7 100644 --- a/src/ChangeLog +++ b/src/ChangeLog @@ -1,3 +1,8 @@ +2006-05-18 Lawrence Jones + + * ftp-ls.c (ftp_parse_unix_ls): Correct size parsing, add size + and filename debugging output. + 2006-04-28 Mauro Tortonesi * http.c: If Content-Disposition header is present, allow unique diff --git a/src/ftp-ls.c b/src/ftp-ls.c index 9e35f27a..6406c8fb 100644 --- a/src/ftp-ls.c +++ b/src/ftp-ls.c @@ -195,7 +195,7 @@ ftp_parse_unix_ls (const char *file, int ignore_perms) This tactic is quite dubious when it comes to internationalization issues (non-English month names), but it works for now. */ - ptok = line; + tok = line; while (ptok = tok, (tok = strtok (NULL, " ")) != NULL) { @@ -211,25 +211,22 @@ ftp_parse_unix_ls (const char *file, int ignore_perms) { wgint size; - /* Back up to the beginning of the previous token - and parse it with str_to_wgint. */ - char *t = ptok; - while (t > line && ISDIGIT (*t)) - --t; - if (t == line) + /* Parse the previous token with str_to_wgint. */ + if (ptok == line) { /* Something has gone wrong during parsing. */ error = 1; break; } errno = 0; - size = str_to_wgint (t, NULL, 10); + size = str_to_wgint (ptok, NULL, 10); if (size == WGINT_MAX && errno == ERANGE) /* Out of range -- ignore the size. #### Should we refuse to start the download. */ cur.size = 0; else cur.size = size; + DEBUGP (("size: %s; ", number_to_static_string(cur.size))); month = i; next = 5; @@ -363,7 +360,7 @@ ftp_parse_unix_ls (const char *file, int ignore_perms) if (!cur.name || (cur.type == FT_SYMLINK && !cur.linkto)) error = 1; - DEBUGP (("\n")); + DEBUGP (("%s\n", cur.name ? cur.name : "")); if (error || ignore) {