X-Git-Url: http://sjero.net/git/?p=wget;a=blobdiff_plain;f=src%2Fftp.c;h=9a77fc108bbd76bcd6ed5229830f6ff033b5fedb;hp=da5be896168708991ba4ac8753c4c13c6377410e;hb=0967c21094580317353f0742c4836c5bbea34059;hpb=a8155e7bccfef9df2344c7aa575773efcb155ba9 diff --git a/src/ftp.c b/src/ftp.c index da5be896..9a77fc10 100644 --- a/src/ftp.c +++ b/src/ftp.c @@ -83,12 +83,12 @@ typedef struct /* Look for regexp "( *[0-9]+ *byte" (literal parenthesis) anywhere in - the string S, and return the number converted to long, if found, 0 + the string S, and return the number converted to wgint, if found, 0 otherwise. */ -static long +static wgint ftp_expected_bytes (const char *s) { - long res; + wgint res; while (1) { @@ -96,18 +96,8 @@ ftp_expected_bytes (const char *s) ++s; if (!*s) return 0; - for (++s; *s && ISSPACE (*s); s++); - if (!*s) - return 0; - if (!ISDIGIT (*s)) - continue; - res = 0; - do - { - res = (*s - '0') + 10 * res; - ++s; - } - while (*s && ISDIGIT (*s)); + ++s; /* skip the '(' */ + res = str_to_wgint (s, (char **) &s, 10); if (!*s) return 0; while (*s && ISSPACE (*s)) @@ -230,23 +220,43 @@ ftp_do_port (int csock, int *local_sock) } #endif +static void +print_length (wgint size, wgint start, int authoritative) +{ + logprintf (LOG_VERBOSE, _("Length: %s"), with_thousand_seps (size)); + if (size >= 1024) + logprintf (LOG_VERBOSE, " (%s)", human_readable (size)); + if (start > 0) + { + if (start >= 1024) + logprintf (LOG_VERBOSE, _(", %s (%s) remaining"), + with_thousand_seps (size - start), + human_readable (size - start)); + else + logprintf (LOG_VERBOSE, _(", %s remaining"), + with_thousand_seps (size - start)); + } + if (!authoritative) + logputs (LOG_VERBOSE, _(" (unauthoritative)\n")); +} + /* Retrieves a file with denoted parameters through opening an FTP connection to the server. It always closes the data connection, and closes the control connection in case of error. */ static uerr_t -getftp (struct url *u, long *len, long restval, ccon *con) +getftp (struct url *u, wgint *len, wgint restval, ccon *con) { int csock, dtsock, local_sock, res; - uerr_t err; + uerr_t err = RETROK; /* appease the compiler */ FILE *fp; char *user, *passwd, *respline; char *tms, *tmrate; int cmd = con->cmd; int pasv_mode_open = 0; - long expected_bytes = 0L; + wgint expected_bytes = 0; int rest_failed = 0; int flags; - long rd_size; + wgint rd_size; assert (con != NULL); assert (con->target != NULL); @@ -261,9 +271,10 @@ getftp (struct url *u, long *len, long restval, ccon *con) user = u->user; passwd = u->passwd; search_netrc (u->host, (const char **)&user, (const char **)&passwd, 1); - user = user ? user : opt.ftp_acc; - passwd = passwd ? passwd : opt.ftp_pass; - assert (user && passwd); + user = user ? user : (opt.ftp_user ? opt.ftp_user : opt.user); + if (!user) user = "anonymous"; + passwd = passwd ? passwd : (opt.ftp_passwd ? opt.ftp_passwd : opt.passwd); + if (!passwd) passwd = "-wget@"; dtsock = -1; local_sock = -1; @@ -281,8 +292,7 @@ getftp (struct url *u, long *len, long restval, ccon *con) if (con->proxy) { /* If proxy is in use, log in as username@target-site. */ - logname = xmalloc (strlen (user) + 1 + strlen (u->host) + 1); - sprintf (logname, "%s@%s", user, u->host); + logname = concat_strings (user, "@", u->host, (char *) 0); } /* Login to the server: */ @@ -302,7 +312,7 @@ getftp (struct url *u, long *len, long restval, ccon *con) con->csock = -1; /* Second: Login with proper USER/PASS sequence. */ - logprintf (LOG_VERBOSE, _("Logging in as %s ... "), user); + logprintf (LOG_VERBOSE, _("Logging in as %s ... "), escnonprint (user)); if (opt.server_response) logputs (LOG_ALWAYS, "\n"); err = ftp_login (csock, logname, passwd); @@ -320,14 +330,12 @@ Error in server response, closing control connection.\n")); fd_close (csock); con->csock = -1; return err; - break; case FTPSRVERR: logputs (LOG_VERBOSE, "\n"); logputs (LOG_NOTQUIET, _("Error in server greeting.\n")); fd_close (csock); con->csock = -1; return err; - break; case WRITEFAILED: logputs (LOG_VERBOSE, "\n"); logputs (LOG_NOTQUIET, @@ -335,29 +343,24 @@ Error in server response, closing control connection.\n")); fd_close (csock); con->csock = -1; return err; - break; case FTPLOGREFUSED: logputs (LOG_VERBOSE, "\n"); logputs (LOG_NOTQUIET, _("The server refuses login.\n")); fd_close (csock); con->csock = -1; return FTPLOGREFUSED; - break; case FTPLOGINC: logputs (LOG_VERBOSE, "\n"); logputs (LOG_NOTQUIET, _("Login incorrect.\n")); fd_close (csock); con->csock = -1; return FTPLOGINC; - break; case FTPOK: if (!opt.server_response) logputs (LOG_VERBOSE, _("Logged in!\n")); break; default: abort (); - exit (1); - break; } /* Third: Get the system type */ if (!opt.server_response) @@ -373,7 +376,6 @@ Error in server response, closing control connection.\n")); fd_close (csock); con->csock = -1; return err; - break; case FTPSRVERR: logputs (LOG_VERBOSE, "\n"); logputs (LOG_NOTQUIET, @@ -384,7 +386,6 @@ Error in server response, closing control connection.\n")); break; default: abort (); - break; } if (!opt.server_response && err != FTPSRVERR) logputs (LOG_VERBOSE, _("done. ")); @@ -404,7 +405,6 @@ Error in server response, closing control connection.\n")); fd_close (csock); con->csock = -1; return err; - break; case FTPSRVERR : /* PWD unsupported -- assume "/". */ xfree_null (con->id); @@ -415,7 +415,6 @@ Error in server response, closing control connection.\n")); break; default: abort (); - break; } /* VMS will report something like "PUB$DEVICE:[INITIAL.FOLDER]". Convert it to "/INITIAL/FOLDER" */ @@ -458,7 +457,6 @@ Error in server response, closing control connection.\n")); fd_close (csock); con->csock = -1; return err; - break; case WRITEFAILED: logputs (LOG_VERBOSE, "\n"); logputs (LOG_NOTQUIET, @@ -466,7 +464,6 @@ Error in server response, closing control connection.\n")); fd_close (csock); con->csock = -1; return err; - break; case FTPUNKNOWNTYPE: logputs (LOG_VERBOSE, "\n"); logprintf (LOG_NOTQUIET, @@ -480,7 +477,6 @@ Error in server response, closing control connection.\n")); break; default: abort (); - break; } if (!opt.server_response) logputs (LOG_VERBOSE, _("done. ")); @@ -561,7 +557,7 @@ Error in server response, closing control connection.\n")); } if (!opt.server_response) - logprintf (LOG_VERBOSE, "==> CWD %s ... ", target); + logprintf (LOG_VERBOSE, "==> CWD %s ... ", escnonprint (target)); err = ftp_cwd (csock, target); /* FTPRERR, WRITEFAILED, FTPNSFOD */ switch (err) @@ -573,7 +569,6 @@ Error in server response, closing control connection.\n")); fd_close (csock); con->csock = -1; return err; - break; case WRITEFAILED: logputs (LOG_VERBOSE, "\n"); logputs (LOG_NOTQUIET, @@ -581,21 +576,17 @@ Error in server response, closing control connection.\n")); fd_close (csock); con->csock = -1; return err; - break; case FTPNSFOD: logputs (LOG_VERBOSE, "\n"); logprintf (LOG_NOTQUIET, _("No such directory `%s'.\n\n"), - u->dir); + escnonprint (u->dir)); fd_close (csock); con->csock = -1; return err; - break; case FTPOK: - /* fine and dandy */ break; default: abort (); - break; } if (!opt.server_response) logputs (LOG_VERBOSE, _("done.\n")); @@ -609,7 +600,7 @@ Error in server response, closing control connection.\n")); if (opt.verbose) { if (!opt.server_response) - logprintf (LOG_VERBOSE, "==> SIZE %s ... ", u->file); + logprintf (LOG_VERBOSE, "==> SIZE %s ... ", escnonprint (u->file)); } err = ftp_size (csock, u->file, len); @@ -624,13 +615,11 @@ Error in server response, closing control connection.\n")); fd_close (csock); con->csock = -1; return err; - break; case FTPOK: /* Everything is OK. */ break; default: abort (); - break; } if (!opt.server_response) logputs (LOG_VERBOSE, _("done.\n")); @@ -654,7 +643,6 @@ Error in server response, closing control connection.\n")); fd_close (csock); con->csock = -1; return err; - break; case WRITEFAILED: logputs (LOG_VERBOSE, "\n"); logputs (LOG_NOTQUIET, @@ -662,7 +650,6 @@ Error in server response, closing control connection.\n")); fd_close (csock); con->csock = -1; return err; - break; case FTPNOPASV: logputs (LOG_VERBOSE, "\n"); logputs (LOG_NOTQUIET, _("Cannot initiate PASV transfer.\n")); @@ -672,11 +659,9 @@ Error in server response, closing control connection.\n")); logputs (LOG_NOTQUIET, _("Cannot parse PASV response.\n")); break; case FTPOK: - /* fine and dandy */ break; default: abort (); - break; } /* switch (err) */ if (err==FTPOK) { @@ -718,7 +703,6 @@ Error in server response, closing control connection.\n")); fd_close (dtsock); fd_close (local_sock); return err; - break; case WRITEFAILED: logputs (LOG_VERBOSE, "\n"); logputs (LOG_NOTQUIET, @@ -728,7 +712,6 @@ Error in server response, closing control connection.\n")); fd_close (dtsock); fd_close (local_sock); return err; - break; case CONSOCKERR: logputs (LOG_VERBOSE, "\n"); logprintf (LOG_NOTQUIET, "socket: %s\n", strerror (errno)); @@ -737,14 +720,12 @@ Error in server response, closing control connection.\n")); fd_close (dtsock); fd_close (local_sock); return err; - break; case FTPSYSERR: logputs (LOG_VERBOSE, "\n"); logprintf (LOG_NOTQUIET, _("Bind error (%s).\n"), strerror (errno)); fd_close (dtsock); return err; - break; case FTPPORTERR: logputs (LOG_VERBOSE, "\n"); logputs (LOG_NOTQUIET, _("Invalid PORT.\n")); @@ -753,13 +734,10 @@ Error in server response, closing control connection.\n")); fd_close (dtsock); fd_close (local_sock); return err; - break; case FTPOK: - /* fine and dandy */ break; default: abort (); - break; } /* port switch */ if (!opt.server_response) logputs (LOG_VERBOSE, _("done. ")); @@ -770,7 +748,8 @@ Error in server response, closing control connection.\n")); if (restval && (cmd & DO_RETR)) { if (!opt.server_response) - logprintf (LOG_VERBOSE, "==> REST %ld ... ", restval); + logprintf (LOG_VERBOSE, "==> REST %s ... ", + number_to_static_string (restval)); err = ftp_rest (csock, restval); /* FTPRERR, WRITEFAILED, FTPRESTFAIL */ @@ -785,7 +764,6 @@ Error in server response, closing control connection.\n")); fd_close (dtsock); fd_close (local_sock); return err; - break; case WRITEFAILED: logputs (LOG_VERBOSE, "\n"); logputs (LOG_NOTQUIET, @@ -795,17 +773,14 @@ Error in server response, closing control connection.\n")); fd_close (dtsock); fd_close (local_sock); return err; - break; case FTPRESTFAIL: logputs (LOG_VERBOSE, _("\nREST failed, starting from scratch.\n")); rest_failed = 1; break; case FTPOK: - /* fine and dandy */ break; default: abort (); - break; } if (err != FTPRESTFAIL && !opt.server_response) logputs (LOG_VERBOSE, _("done. ")); @@ -832,7 +807,7 @@ Error in server response, closing control connection.\n")); { if (restval) logputs (LOG_VERBOSE, "\n"); - logprintf (LOG_VERBOSE, "==> RETR %s ... ", u->file); + logprintf (LOG_VERBOSE, "==> RETR %s ... ", escnonprint (u->file)); } } @@ -849,7 +824,6 @@ Error in server response, closing control connection.\n")); fd_close (dtsock); fd_close (local_sock); return err; - break; case WRITEFAILED: logputs (LOG_VERBOSE, "\n"); logputs (LOG_NOTQUIET, @@ -859,20 +833,17 @@ Error in server response, closing control connection.\n")); fd_close (dtsock); fd_close (local_sock); return err; - break; case FTPNSFOD: logputs (LOG_VERBOSE, "\n"); - logprintf (LOG_NOTQUIET, _("No such file `%s'.\n\n"), u->file); + logprintf (LOG_NOTQUIET, _("No such file `%s'.\n\n"), + escnonprint (u->file)); fd_close (dtsock); fd_close (local_sock); return err; - break; case FTPOK: - /* fine and dandy */ break; default: abort (); - break; } if (!opt.server_response) @@ -900,7 +871,6 @@ Error in server response, closing control connection.\n")); fd_close (dtsock); fd_close (local_sock); return err; - break; case WRITEFAILED: logputs (LOG_VERBOSE, "\n"); logputs (LOG_NOTQUIET, @@ -910,7 +880,6 @@ Error in server response, closing control connection.\n")); fd_close (dtsock); fd_close (local_sock); return err; - break; case FTPNSFOD: logputs (LOG_VERBOSE, "\n"); logprintf (LOG_NOTQUIET, _("No such file or directory `%s'.\n\n"), @@ -918,13 +887,10 @@ Error in server response, closing control connection.\n")); fd_close (dtsock); fd_close (local_sock); return err; - break; case FTPOK: - /* fine and dandy */ break; default: abort (); - break; } if (!opt.server_response) logputs (LOG_VERBOSE, _("done.\n")); @@ -963,10 +929,30 @@ Error in server response, closing control connection.\n")); mkalldirs (con->target); if (opt.backups) rotate_backups (con->target); - /* #### Is this correct? */ - chmod (con->target, 0600); - fp = fopen (con->target, restval ? "ab" : "wb"); + if (restval) + fp = fopen (con->target, "ab"); + else if (opt.noclobber || opt.always_rest || opt.timestamping || opt.dirstruct + || opt.output_document) + fp = fopen (con->target, "wb"); + else + { + fp = fopen_excl (con->target, 1); + if (!fp && errno == EEXIST) + { + /* We cannot just invent a new name and use it (which is + what functions like unique_create typically do) + because we told the user we'd use this name. + Instead, return and retry the download. */ + logprintf (LOG_NOTQUIET, _("%s has sprung into existence.\n"), + con->target); + fd_close (csock); + con->csock = -1; + fd_close (dtsock); + fd_close (local_sock); + return FOPEN_EXCL_ERR; + } + } if (!fp) { logprintf (LOG_NOTQUIET, "%s: %s\n", con->target, strerror (errno)); @@ -982,20 +968,11 @@ Error in server response, closing control connection.\n")); if (*len) { - logprintf (LOG_VERBOSE, _("Length: %s"), legible (*len)); - if (restval) - logprintf (LOG_VERBOSE, _(" [%s to go]"), legible (*len - restval)); - logputs (LOG_VERBOSE, "\n"); + print_length (*len, restval, 1); expected_bytes = *len; /* for get_contents/show_progress */ } else if (expected_bytes) - { - logprintf (LOG_VERBOSE, _("Length: %s"), legible (expected_bytes)); - if (restval) - logprintf (LOG_VERBOSE, _(" [%s to go]"), - legible (expected_bytes - restval)); - logputs (LOG_VERBOSE, _(" (unauthoritative)\n")); - } + print_length (expected_bytes, restval, 0); /* Get the contents of the document. */ flags = 0; @@ -1102,9 +1079,9 @@ Error in server response, closing control connection.\n")); char *line; /* The lines are being read with read_whole_line because of no-buffering on opt.lfile. */ - while ((line = read_whole_line (fp))) + while ((line = read_whole_line (fp)) != NULL) { - logprintf (LOG_ALWAYS, "%s\n", line); + logprintf (LOG_ALWAYS, "%s\n", escnonprint (line)); xfree (line); } fclose (fp); @@ -1123,11 +1100,11 @@ static uerr_t ftp_loop_internal (struct url *u, struct fileinfo *f, ccon *con) { int count, orig_lp; - long restval, len = 0; + wgint restval, len = 0; char *tms, *locf; char *tmrate = NULL; uerr_t err; - struct stat st; + struct_stat st; if (!con->target) con->target = url_file_name (u); @@ -1196,14 +1173,14 @@ ftp_loop_internal (struct url *u, struct fileinfo *f, ccon *con) if (opt.verbose) { char *hurl = url_string (u, 1); - char tmp[15]; + char tmp[256]; strcpy (tmp, " "); if (count > 1) sprintf (tmp, _("(try:%2d)"), count); logprintf (LOG_VERBOSE, "--%s-- %s\n %s => `%s'\n", tms, hurl, tmp, locf); #ifdef WINDOWS - ws_changetitle (hurl, 1); + ws_changetitle (hurl); #endif xfree (hurl); } @@ -1225,14 +1202,20 @@ ftp_loop_internal (struct url *u, struct fileinfo *f, ccon *con) case FTPNSFOD: case FTPLOGINC: case FTPNOPASV: case CONTNOTSUPPORTED: /* Fatal errors, give up. */ return err; - break; case CONSOCKERR: case CONERROR: case FTPSRVERR: case FTPRERR: case WRITEFAILED: case FTPUNKNOWNTYPE: case FTPSYSERR: case FTPPORTERR: case FTPLOGREFUSED: case FTPINVPASV: + case FOPEN_EXCL_ERR: printwhat (count, opt.ntry); /* non-fatal errors */ + if (err == FOPEN_EXCL_ERR) + { + /* Re-determine the file name. */ + xfree_null (con->target); + con->target = url_file_name (u); + locf = con->target; + } continue; - break; case FTPRETRINT: /* If the control connection was closed, the retrieval will be considered OK if f->size == len. */ @@ -1263,16 +1246,16 @@ ftp_loop_internal (struct url *u, struct fileinfo *f, ccon *con) con->csock = -1; } if (!opt.spider) - logprintf (LOG_VERBOSE, _("%s (%s) - `%s' saved [%ld]\n\n"), - tms, tmrate, locf, len); + logprintf (LOG_VERBOSE, _("%s (%s) - `%s' saved [%s]\n\n"), + tms, tmrate, locf, number_to_static_string (len)); if (!opt.verbose && !opt.quiet) { /* Need to hide the password from the URL. The `if' is here so that we don't do the needless allocation every time. */ char *hurl = url_string (u, 1); - logprintf (LOG_NONVERBOSE, "%s URL: %s [%ld] -> \"%s\" [%d]\n", - tms, hurl, len, locf, count); + logprintf (LOG_NONVERBOSE, "%s URL: %s [%s] -> \"%s\" [%d]\n", + tms, hurl, number_to_static_string (len), locf, count); xfree (hurl); } @@ -1303,8 +1286,8 @@ ftp_loop_internal (struct url *u, struct fileinfo *f, ccon *con) if (opt.delete_after) { - DEBUGP (("Removing file due to --delete-after in" - " ftp_loop_internal():\n")); + DEBUGP (("\ +Removing file due to --delete-after in ftp_loop_internal():\n")); logprintf (LOG_VERBOSE, _("Removing %s.\n"), locf); if (unlink (locf)) logprintf (LOG_NOTQUIET, "unlink: %s\n", strerror (errno)); @@ -1389,7 +1372,7 @@ ftp_retrieve_list (struct url *u, struct fileinfo *f, ccon *con) static int depth = 0; uerr_t err; struct fileinfo *orig; - long local_size; + wgint local_size; time_t tml; int dlthis; @@ -1440,7 +1423,7 @@ ftp_retrieve_list (struct url *u, struct fileinfo *f, ccon *con) dlthis = 1; if (opt.timestamping && f->type == FT_PLAINFILE) { - struct stat st; + struct_stat st; /* If conversion of HTML files retrieved via FTP is ever implemented, we'll need to stat() .orig here when -K has been specified. I'm not implementing it now since files on an FTP server are much @@ -1482,7 +1465,8 @@ Remote file is newer than local file `%s' -- retrieving.\n\n"), { /* Sizes do not match */ logprintf (LOG_VERBOSE, _("\ -The sizes do not match (local %ld) -- retrieving.\n\n"), local_size); +The sizes do not match (local %s) -- retrieving.\n\n"), + number_to_static_string (local_size)); } } } /* opt.timestamping && f->type == FT_PLAINFILE */ @@ -1501,7 +1485,7 @@ The sizes do not match (local %ld) -- retrieving.\n\n"), local_size); _("Invalid name of the symlink, skipping.\n")); else { - struct stat st; + struct_stat st; /* Check whether we already have the correct symbolic link. */ int rc = lstat (con->target, &st); @@ -1517,19 +1501,18 @@ The sizes do not match (local %ld) -- retrieving.\n\n"), local_size); { logprintf (LOG_VERBOSE, _("\ Already have correct symlink %s -> %s\n\n"), - con->target, f->linkto); + con->target, escnonprint (f->linkto)); dlthis = 0; break; } } } logprintf (LOG_VERBOSE, _("Creating symlink %s -> %s\n"), - con->target, f->linkto); + con->target, escnonprint (f->linkto)); /* Unlink before creating symlink! */ unlink (con->target); if (symlink (f->linkto, con->target) == -1) - logprintf (LOG_NOTQUIET, "symlink: %s\n", - strerror (errno)); + logprintf (LOG_NOTQUIET, "symlink: %s\n", strerror (errno)); logputs (LOG_VERBOSE, "\n"); } /* have f->linkto */ #else /* not HAVE_SYMLINK */ @@ -1547,7 +1530,7 @@ Already have correct symlink %s -> %s\n\n"), case FT_DIRECTORY: if (!opt.recursive) logprintf (LOG_NOTQUIET, _("Skipping directory `%s'.\n"), - f->name); + escnonprint (f->name)); break; case FT_PLAINFILE: /* Call the retrieve loop. */ @@ -1556,7 +1539,7 @@ Already have correct symlink %s -> %s\n\n"), break; case FT_UNKNOWN: logprintf (LOG_NOTQUIET, _("%s: unknown/unsupported file type.\n"), - f->name); + escnonprint (f->name)); break; } /* switch */ @@ -1661,7 +1644,8 @@ ftp_retrieve_dirs (struct url *u, struct fileinfo *f, ccon *con) if (!accdir (newdir, ALLABS)) { logprintf (LOG_VERBOSE, _("\ -Not descending to `%s' as it is excluded/not-included.\n"), newdir); +Not descending to `%s' as it is excluded/not-included.\n"), + escnonprint (newdir)); continue; } @@ -1670,7 +1654,7 @@ Not descending to `%s' as it is excluded/not-included.\n"), newdir); odir = xstrdup (u->dir); /* because url_set_dir will free u->dir. */ url_set_dir (u, newdir); - ftp_retrieve_glob (u, con, GETALL); + ftp_retrieve_glob (u, con, GLOB_GETALL); url_set_dir (u, odir); xfree (odir); @@ -1701,9 +1685,10 @@ has_insecure_name_p (const char *s) Then it weeds out the file names that do not match the pattern. ftp_retrieve_list is called with this updated list as an argument. - If the argument ACTION is GETONE, just download the file (but first - get the listing, so that the time-stamp is heeded); if it's GLOBALL, - use globbing; if it's GETALL, download the whole directory. */ + If the argument ACTION is GLOB_GETONE, just download the file (but + first get the listing, so that the time-stamp is heeded); if it's + GLOB_GLOBALL, use globbing; if it's GLOB_GETALL, download the whole + directory. */ static uerr_t ftp_retrieve_glob (struct url *u, ccon *con, int action) { @@ -1724,7 +1709,8 @@ ftp_retrieve_glob (struct url *u, ccon *con, int action) { if (f->type != FT_DIRECTORY && !acceptable (f->name)) { - logprintf (LOG_VERBOSE, _("Rejecting `%s'.\n"), f->name); + logprintf (LOG_VERBOSE, _("Rejecting `%s'.\n"), + escnonprint (f->name)); f = delelement (f, &start); } else @@ -1737,7 +1723,8 @@ ftp_retrieve_glob (struct url *u, ccon *con, int action) { if (has_insecure_name_p (f->name)) { - logprintf (LOG_VERBOSE, _("Rejecting `%s'.\n"), f->name); + logprintf (LOG_VERBOSE, _("Rejecting `%s'.\n"), + escnonprint (f->name)); f = delelement (f, &start); } else @@ -1745,7 +1732,7 @@ ftp_retrieve_glob (struct url *u, ccon *con, int action) } /* Now weed out the files that do not match our globbing pattern. If we are dealing with a globbing pattern, that is. */ - if (*u->file && (action == GLOBALL || action == GETONE)) + if (*u->file && (action == GLOB_GLOBALL || action == GLOB_GETONE)) { int matchres = 0; @@ -1770,7 +1757,6 @@ ftp_retrieve_glob (struct url *u, ccon *con, int action) return RETRBADPATTERN; } } - res = RETROK; if (start) { /* Just get everything. */ @@ -1778,14 +1764,15 @@ ftp_retrieve_glob (struct url *u, ccon *con, int action) } else if (!start) { - if (action == GLOBALL) + if (action == GLOB_GLOBALL) { /* No luck. */ /* #### This message SUCKS. We should see what was the reason that nothing was retrieved. */ - logprintf (LOG_VERBOSE, _("No matches on pattern `%s'.\n"), u->file); + logprintf (LOG_VERBOSE, _("No matches on pattern `%s'.\n"), + escnonprint (u->file)); } - else /* GETONE or GETALL */ + else /* GLOB_GETONE or GLOB_GETALL */ { /* Let's try retrieving it anyway. */ con->st |= ON_YOUR_OWN; @@ -1812,14 +1799,13 @@ ftp_loop (struct url *u, int *dt, struct url *proxy) *dt = 0; - memset (&con, 0, sizeof (con)); + xzero (con); con.csock = -1; con.st = ON_YOUR_OWN; con.rs = ST_UNIX; con.id = NULL; con.proxy = proxy; - res = RETROK; /* in case it's not used */ /* If the file name is empty, the user probably wants a directory index. We'll provide one, properly HTML-ized. Unless @@ -1842,15 +1828,15 @@ ftp_loop (struct url *u, int *dt, struct url *proxy) { if (!opt.output_document) { - struct stat st; - long sz; + struct_stat st; + wgint sz; if (stat (filename, &st) == 0) sz = st.st_size; else sz = -1; logprintf (LOG_NOTQUIET, - _("Wrote HTML-ized index to `%s' [%ld].\n"), - filename, sz); + _("Wrote HTML-ized index to `%s' [%s].\n"), + filename, number_to_static_string (sz)); } else logprintf (LOG_NOTQUIET, @@ -1871,7 +1857,8 @@ ftp_loop (struct url *u, int *dt, struct url *proxy) if we need globbing, time-stamping or recursion. Its third argument is just what we really need. */ res = ftp_retrieve_glob (u, &con, - (opt.ftp_glob && wild) ? GLOBALL : GETONE); + (opt.ftp_glob && wild) + ? GLOB_GLOBALL : GLOB_GETONE); } else res = ftp_loop_internal (u, NULL, &con);