aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDenys Nykula <nykula@ukr.net>2019-09-23 05:15:02 +0300
committerRob Landley <rob@landley.net>2019-09-23 13:37:41 -0500
commitcd8876936da8a0a48c72b1b4032eb08105b9b3e2 (patch)
tree94d26ee0565109e2c9a9d971c1b5e044b879c77b
parentfc345cfc8f9ba6d526b9030c0c3505b068bf5b89 (diff)
downloadtoybox-cd8876936da8a0a48c72b1b4032eb08105b9b3e2.tar.gz
Call ftpget from wget
Branch wget to xexec ftpget given an ftp url. Rename the output flag -O like in other wgets. Add mock wget --no-check-certificate to satisfy pkgsrc. Ifdef the version output in wget because the nonexistent constant fails single builds and mkroot.
-rw-r--r--toys/pending/wget.c27
1 files changed, 16 insertions, 11 deletions
diff --git a/toys/pending/wget.c b/toys/pending/wget.c
index ced51d9c..eb496da2 100644
--- a/toys/pending/wget.c
+++ b/toys/pending/wget.c
@@ -3,19 +3,19 @@
* Copyright 2016 Lipi C.H. Lee <lipisoft@gmail.com>
*
-USE_WGET(NEWTOY(wget, "f:", TOYFLAG_USR|TOYFLAG_BIN))
+USE_WGET(NEWTOY(wget, "(no-check-certificate)O:", TOYFLAG_USR|TOYFLAG_BIN))
config WGET
bool "wget"
default n
help
- usage: wget -f filename URL
- -f filename: specify the filename to be saved
- URL: HTTP uniform resource location and only HTTP, not HTTPS
+ usage: wget -O filename URL
+ -O filename: specify output filename
+ URL: uniform resource location, FTP/HTTP only, not HTTPS
examples:
- wget -f index.html http://www.example.com
- wget -f sample.jpg http://www.example.com:8080/sample.jpg
+ wget -O index.html http://www.example.com
+ wget -O sample.jpg ftp://ftp.example.com:21/sample.jpg
*/
#define FOR_wget
@@ -55,8 +55,10 @@ static unsigned get_port(const char *url, char *port, unsigned url_i) {
// get http infos in URL
static void get_info(const char *url, char* hostname, char *port, char *path) {
unsigned i = 7, len;
+ char ftp = !strncmp(url, "ftp://", 6);
- if (strncmp(url, "http://", i)) error_exit("only HTTP support");
+ if (ftp) i--;
+ else if (strncmp(url, "http://", i)) error_exit("only FTP/HTTP support");
len = get_hn(url+i, hostname);
i += len;
@@ -72,6 +74,8 @@ static void get_info(const char *url, char* hostname, char *port, char *path) {
if (strlen(url+i) < 1024) strcpy(path, url+i);
else error_exit("too long path in URL");
} else error_exit("wrong URL");
+
+ if (ftp) xexec((char *[]){"ftpget", hostname, TT.filename, path, 0});
}
// connect to any IPv4 or IPv6 server
@@ -131,10 +135,10 @@ void wget_main(void)
FILE *fp;
ssize_t len, body_len;
char *body, *result, *rc, *r_str;
- char ua[18] = "toybox wget/", ver[6], hostname[1024], port[6], path[1024];
+ char ua[18] = "toybox wget", ver[6], hostname[1024], port[6], path[1024];
// TODO extract filename to be saved from URL
- if (!(toys.optflags & FLAG_f)) help_exit("no filename");
+ if (!(toys.optflags & FLAG_O)) help_exit("no filename");
if (fopen(TT.filename, "r")) error_exit("'%s' already exists", TT.filename);
if(!toys.optargs[0]) help_exit("no URL");
@@ -145,8 +149,9 @@ void wget_main(void)
// compose HTTP request
sprintf(toybuf, "GET %s HTTP/1.1\r\n", path);
mk_fld("Host", hostname);
- strncpy(ver, TOYBOX_VERSION, 5);
- strcat(ua, ver);
+#ifdef TOYBOX_VERSION
+ strcat(ua, "/"), strncpy(ver, TOYBOX_VERSION, 5), strcat(ua, ver);
+#endif
mk_fld("User-Agent", ua);
mk_fld("Connection", "close");
strcat(toybuf, "\r\n");