summaryrefslogtreecommitdiff
path: root/networking/wget.c
diff options
context:
space:
mode:
authorGlenn L McGrath <bug1@ihug.co.nz>2003-12-19 12:08:56 +0000
committerGlenn L McGrath <bug1@ihug.co.nz>2003-12-19 12:08:56 +0000
commit514aeabc366d8763cb1e2437be80f3f13d135ec3 (patch)
tree64fe5c986ba1604d6c6c4a90421a654d4ced9581 /networking/wget.c
parent28c111e1c5b159f09a82692a4a83bef0e1899034 (diff)
downloadbusybox-w32-514aeabc366d8763cb1e2437be80f3f13d135ec3.tar.gz
busybox-w32-514aeabc366d8763cb1e2437be80f3f13d135ec3.tar.bz2
busybox-w32-514aeabc366d8763cb1e2437be80f3f13d135ec3.zip
Use getopt_ulflags
Diffstat (limited to 'networking/wget.c')
-rw-r--r--networking/wget.c108
1 files changed, 50 insertions, 58 deletions
diff --git a/networking/wget.c b/networking/wget.c
index 08026915e..3e74ed357 100644
--- a/networking/wget.c
+++ b/networking/wget.c
@@ -142,9 +142,29 @@ char *base64enc(char *p, char *buf, int len) {
142} 142}
143#endif 143#endif
144 144
145#define WGET_OPT_CONTINUE 1
146#define WGET_OPT_QUIET 2
147#define WGET_OPT_PASSIVE 4
148#define WGET_OPT_OUTNAME 8
149#define WGET_OPT_HEADER 16
150#define WGET_OPT_PREFIX 32
151#define WGET_OPT_PROXY 64
152
153static const struct option wget_long_options[] = {
154 { "continue", 0, NULL, 'c' },
155 { "quiet", 0, NULL, 'q' },
156 { "passive-ftp", 0, NULL, 139 },
157 { "output-document", 1, NULL, 'O' },
158 { "header", 1, NULL, 131 },
159 { "directory-prefix",1, NULL, 'P' },
160 { "proxy", 1, NULL, 'Y' },
161 { 0, 0, 0, 0 }
162};
163
145int wget_main(int argc, char **argv) 164int wget_main(int argc, char **argv)
146{ 165{
147 int n, try=5, status; 166 int n, try=5, status;
167 unsigned long opt;
148 int port; 168 int port;
149 char *proxy = 0; 169 char *proxy = 0;
150 char *dir_prefix=NULL; 170 char *dir_prefix=NULL;
@@ -153,9 +173,9 @@ int wget_main(int argc, char **argv)
153 char extra_headers[1024]; 173 char extra_headers[1024];
154 char *extra_headers_ptr = extra_headers; 174 char *extra_headers_ptr = extra_headers;
155 int extra_headers_left = sizeof(extra_headers); 175 int extra_headers_left = sizeof(extra_headers);
156 int which_long_opt = 0, option_index = -1;
157 struct host_info server, target; 176 struct host_info server, target;
158 struct sockaddr_in s_in; 177 struct sockaddr_in s_in;
178 llist_t *headers_llist = NULL;
159 179
160 FILE *sfp = NULL; /* socket to web/ftp server */ 180 FILE *sfp = NULL; /* socket to web/ftp server */
161 FILE *dfp = NULL; /* socket to ftp server (data) */ 181 FILE *dfp = NULL; /* socket to ftp server (data) */
@@ -166,68 +186,40 @@ int wget_main(int argc, char **argv)
166 FILE *output; /* socket to web server */ 186 FILE *output; /* socket to web server */
167 int quiet_flag = FALSE; /* Be verry, verry quiet... */ 187 int quiet_flag = FALSE; /* Be verry, verry quiet... */
168 int noproxy = 0; /* Use proxies if env vars are set */ 188 int noproxy = 0; /* Use proxies if env vars are set */
189 char *proxy_flag = "on"; /* Use proxies if env vars are set */
169 190
170#define LONG_HEADER 1
171#define LONG_PASSIVE 2
172
173 struct option long_options[] = {
174 { "continue", 0, NULL, 'c' },
175 { "quiet", 0, NULL, 'q' },
176 { "output-document", 1, NULL, 'O' },
177 { "header", 1, &which_long_opt, LONG_HEADER },
178 { "proxy", 1, NULL, 'Y' },
179 { "passive-ftp", 0, &which_long_opt, LONG_PASSIVE },
180 { 0, 0, 0, 0 }
181 };
182 /* 191 /*
183 * Crack command line. 192 * Crack command line.
184 */ 193 */
185 while ((n = getopt_long(argc, argv, "cqO:P:Y:", long_options, &option_index)) != EOF) { 194 bb_opt_complementaly = "\203*";
186 switch (n) { 195 bb_applet_long_options = wget_long_options;
187 case 'c': 196 opt = bb_getopt_ulflags(argc, argv, "cq\213O:\203:P:Y:", &fname_out, &headers_llist, &dir_prefix, &proxy_flag);
188 ++do_continue; 197 if (opt & WGET_OPT_CONTINUE) {
189 break; 198 ++do_continue;
190 case 'P': 199 }
191 dir_prefix = optarg; 200 if (opt & WGET_OPT_QUIET) {
192 break; 201 quiet_flag = TRUE;
193 case 'q': 202 }
194 quiet_flag = TRUE; 203 if (strcmp(proxy_flag, "on") == 0) {
195 break; 204 /* Use the proxy if necessary. */
196 case 'O': 205 proxy = getenv(target.is_ftp ? "ftp_proxy" : "http_proxy");
197 /* can't set fname_out to NULL if outputting to stdout, because 206 if (proxy)
198 * this gets interpreted as the auto-gen output filename 207 parse_url(bb_xstrdup(proxy), &server);
199 * case below - tausq@debian.org 208 }
200 */ 209 if (opt & WGET_OPT_HEADER) {
201 fname_out = optarg; 210 while (headers_llist) {
202 break; 211 int arglen = strlen(headers_llist->data);
203 case 'Y': 212 if (extra_headers_left - arglen - 2 <= 0)
204 if (strcmp(optarg, "off") == 0) 213 bb_error_msg_and_die("extra_headers buffer too small(need %i)", extra_headers_left - arglen);
205 noproxy=1; 214 strcpy(extra_headers_ptr, headers_llist->data);
206 break; 215 extra_headers_ptr += arglen;
207 case 0: 216 extra_headers_left -= ( arglen + 2 );
208 switch (which_long_opt) { 217 *extra_headers_ptr++ = '\r';
209 case LONG_HEADER: { 218 *extra_headers_ptr++ = '\n';
210 int arglen = strlen(optarg); 219 *(extra_headers_ptr + 1) = 0;
211 if(extra_headers_left - arglen - 2 <= 0) 220 headers_llist = headers_llist->link;
212 bb_error_msg_and_die("extra_headers buffer too small(need %i)", extra_headers_left - arglen);
213 strcpy(extra_headers_ptr, optarg);
214 extra_headers_ptr += arglen;
215 extra_headers_left -= ( arglen + 2 );
216 *extra_headers_ptr++ = '\r';
217 *extra_headers_ptr++ = '\n';
218 *(extra_headers_ptr + 1) = 0;
219 break;
220 }
221 case LONG_PASSIVE:
222 // ignore -- we always use passive mode
223 break;
224 }
225 break;
226 default:
227 bb_show_usage();
228 } 221 }
229 } 222 }
230
231 if (argc - optind != 1) 223 if (argc - optind != 1)
232 bb_show_usage(); 224 bb_show_usage();
233 225
@@ -850,7 +842,7 @@ progressmeter(int flag)
850 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 842 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
851 * SUCH DAMAGE. 843 * SUCH DAMAGE.
852 * 844 *
853 * $Id: wget.c,v 1.61 2003/10/31 09:31:43 andersen Exp $ 845 * $Id: wget.c,v 1.62 2003/12/19 12:08:56 bug1 Exp $
854 */ 846 */
855 847
856 848