X-Git-Url: http://sjero.net/git/?p=wget;a=blobdiff_plain;f=src%2Fftp-basic.c;h=8d3342c0c73acee808bbd48215871d5978d470dd;hp=0f560765c38f8e582d04f2f9e02143ecb41e02ac;hb=5daac18e96c40ea7eea639f03c1b643f89cf3440;hpb=86395b297b58c8c9b43d7ca8c42b831d4926dac6 diff --git a/src/ftp-basic.c b/src/ftp-basic.c index 0f560765..8d3342c0 100644 --- a/src/ftp-basic.c +++ b/src/ftp-basic.c @@ -1,6 +1,6 @@ /* Basic FTP routines. Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, - 2004, 2005, 2006, 2007 Free Software Foundation, Inc. + 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc. This file is part of GNU Wget. @@ -28,7 +28,7 @@ Corresponding Source for a non-source form of such a combination shall include the source code for the parts of OpenSSL used as well as that of the covered work. */ -#include +#include "wget.h" #include #include @@ -39,8 +39,6 @@ as that of the covered work. */ #ifdef HAVE_UNISTD_H # include #endif - -#include "wget.h" #include "utils.h" #include "connect.h" #include "host.h" @@ -70,7 +68,7 @@ ftp_response (int fd, char **ret_line) return FTPRERR; /* Strip trailing CRLF before printing the line, so that - escnonprint doesn't include bogus \012 and \015. */ + quotting doesn't include bogus \012 and \015. */ p = strchr (line, '\0'); if (p > line && p[-1] == '\n') *--p = '\0'; @@ -78,12 +76,13 @@ ftp_response (int fd, char **ret_line) *--p = '\0'; if (opt.server_response) - logprintf (LOG_NOTQUIET, "%s\n", escnonprint (line)); + logprintf (LOG_NOTQUIET, "%s\n", + quotearg_style (escape_quoting_style, line)); else - DEBUGP (("%s\n", escnonprint (line))); + DEBUGP (("%s\n", quotearg_style (escape_quoting_style, line))); /* The last line of output is the one that begins with "ddd ". */ - if (ISDIGIT (line[0]) && ISDIGIT (line[1]) && ISDIGIT (line[2]) + if (c_isdigit (line[0]) && c_isdigit (line[1]) && c_isdigit (line[2]) && line[3] == ' ') { strncpy (ftp_last_respline, line, sizeof (ftp_last_respline)); @@ -118,7 +117,8 @@ ftp_request (const char *command, const char *value) if (*p == '\r' || *p == '\n') *p = ' '; DEBUGP (("\nDetected newlines in %s \"%s\"; changing to %s \"%s\"\n", - command, escnonprint (value), command, escnonprint (defanged))); + command, quotearg_style (escape_quoting_style, value), + command, quotearg_style (escape_quoting_style, defanged))); /* Make VALUE point to the defanged copy of the string. */ value = defanged; } @@ -189,7 +189,7 @@ ftp_login (int csock, const char *acc, const char *pass) "331 s/key ", "331 opiekey " }; - int i; + size_t i; const char *seed = NULL; for (i = 0; i < countof (skey_head); i++) @@ -206,7 +206,7 @@ ftp_login (int csock, const char *acc, const char *pass) int skey_sequence = 0; /* Extract the sequence from SEED. */ - for (; ISDIGIT (*seed); seed++) + for (; c_isdigit (*seed); seed++) skey_sequence = 10 * skey_sequence + *seed - '0'; if (*seed == ' ') ++seed; @@ -522,14 +522,14 @@ ftp_pasv (int csock, ip_address *addr, int *port) } /* Parse the request. */ s = respline; - for (s += 4; *s && !ISDIGIT (*s); s++) + for (s += 4; *s && !c_isdigit (*s); s++) ; if (!*s) return FTPINVPASV; for (i = 0; i < 6; i++) { tmp[i] = 0; - for (; ISDIGIT (*s); s++) + for (; c_isdigit (*s); s++) tmp[i] = (*s - '0') + 10 * tmp[i]; if (*s == ',') s++; @@ -591,14 +591,14 @@ ftp_lpsv (int csock, ip_address *addr, int *port) /* Parse the response. */ s = respline; - for (s += 4; *s && !ISDIGIT (*s); s++) + for (s += 4; *s && !c_isdigit (*s); s++) ; if (!*s) return FTPINVPASV; /* First, get the address family */ af = 0; - for (; ISDIGIT (*s); s++) + for (; c_isdigit (*s); s++) af = (*s - '0') + 10 * af; if (af != 4 && af != 6) @@ -615,7 +615,7 @@ ftp_lpsv (int csock, ip_address *addr, int *port) /* Then, get the address length */ addrlen = 0; - for (; ISDIGIT (*s); s++) + for (; c_isdigit (*s); s++) addrlen = (*s - '0') + 10 * addrlen; if (!*s || *s++ != ',') @@ -641,7 +641,7 @@ ftp_lpsv (int csock, ip_address *addr, int *port) for (i = 0; i < addrlen; i++) { tmp[i] = 0; - for (; ISDIGIT (*s); s++) + for (; c_isdigit (*s); s++) tmp[i] = (*s - '0') + 10 * tmp[i]; if (*s == ',') s++; @@ -654,7 +654,7 @@ ftp_lpsv (int csock, ip_address *addr, int *port) /* Now, get the port length */ portlen = 0; - for (; ISDIGIT (*s); s++) + for (; c_isdigit (*s); s++) portlen = (*s - '0') + 10 * portlen; if (!*s || *s++ != ',') @@ -671,7 +671,7 @@ ftp_lpsv (int csock, ip_address *addr, int *port) /* Finally, we get the port number */ tmpprt[0] = 0; - for (; ISDIGIT (*s); s++) + for (; c_isdigit (*s); s++) tmpprt[0] = (*s - '0') + 10 * tmpprt[0]; if (!*s || *s++ != ',') @@ -681,7 +681,7 @@ ftp_lpsv (int csock, ip_address *addr, int *port) } tmpprt[1] = 0; - for (; ISDIGIT (*s); s++) + for (; c_isdigit (*s); s++) tmpprt[1] = (*s - '0') + 10 * tmpprt[1]; assert (s != NULL); @@ -787,7 +787,7 @@ ftp_epsv (int csock, ip_address *ip, int *port) /* Finally, get the port number */ tport = 0; - for (i = 1; ISDIGIT (*s); s++) + for (i = 1; c_isdigit (*s); s++) { if (i > 5) { @@ -958,17 +958,24 @@ ftp_retr (int csock, const char *file) /* Sends the LIST command to the server. If FILE is NULL, send just `LIST' (no space). */ uerr_t -ftp_list (int csock, const char *file) +ftp_list (int csock, const char *file, enum stype rs) { char *request, *respline; int nwritten; uerr_t err; bool ok = false; - int i = 0; + size_t i = 0; /* Try `LIST -a' first and revert to `LIST' in case of failure. */ const char *list_commands[] = { "LIST -a", "LIST" }; + /* 2008-01-29 SMS. For a VMS FTP server, where "LIST -a" may not + fail, but will never do what is desired here, skip directly to the + simple "LIST" command (assumed to be the last one in the list). + */ + if (rs == ST_VMS) + i = countof (list_commands)- 1; + do { /* Send request. */ request = ftp_request (list_commands[i], file); @@ -1172,7 +1179,7 @@ ftp_process_type (const char *params) if (params && 0 == strncasecmp (params, "type=", 5) && params[5] != '\0') - return TOUPPER (params[5]); + return c_toupper (params[5]); else return 'I'; }