X-Git-Url: http://sjero.net/git/?a=blobdiff_plain;f=src%2Finit.c;h=321f50d4bf7d63ada9e695b2f6f898c6e989acda;hb=07f60f19a4ee99ddc343bb51568b0c474e9b853d;hp=9e11944551dbd18cc2ead4e2175672627eccea9f;hpb=1396b300550d9b5ca3b4b3e4e3776a1456024f73;p=wget diff --git a/src/init.c b/src/init.c index 9e119445..321f50d4 100644 --- a/src/init.c +++ b/src/init.c @@ -1,5 +1,5 @@ /* Reading/parsing the initialization file. - Copyright (C) 1995, 1996, 1997, 1998 Free Software Foundation, Inc. + Copyright (C) 1995, 1996, 1997, 1998, 2000 Free Software Foundation, Inc. This file is part of Wget. @@ -76,7 +76,6 @@ CMD_DECLARE (cmd_spec_dotstyle); CMD_DECLARE (cmd_spec_header); CMD_DECLARE (cmd_spec_htmlify); CMD_DECLARE (cmd_spec_mirror); -CMD_DECLARE (cmd_spec_outputdocument); CMD_DECLARE (cmd_spec_recursive); CMD_DECLARE (cmd_spec_useragent); @@ -96,8 +95,8 @@ static struct { { "background", &opt.background, cmd_boolean }, { "backupconverted", &opt.backup_converted, cmd_boolean }, { "backups", &opt.backups, cmd_number }, - { "bindaddress", &opt.bind_address, cmd_address }, { "base", &opt.base_href, cmd_string }, + { "bindaddress", &opt.bind_address, cmd_address }, { "cache", &opt.proxy_cache, cmd_boolean }, { "continue", &opt.always_rest, cmd_boolean }, { "convertlinks", &opt.convert_links, cmd_boolean }, @@ -123,9 +122,11 @@ static struct { { "header", NULL, cmd_spec_header }, { "htmlextension", &opt.html_extension, cmd_boolean }, { "htmlify", NULL, cmd_spec_htmlify }, + { "httpkeepalive", &opt.http_keep_alive, cmd_boolean }, { "httppasswd", &opt.http_passwd, cmd_string }, { "httpproxy", &opt.http_proxy, cmd_string }, { "httpuser", &opt.http_user, cmd_string }, + { "httpsproxy", &opt.https_proxy, cmd_string }, { "ignorelength", &opt.ignore_length, cmd_boolean }, { "ignoretags", &opt.ignore_tags, cmd_vector }, { "includedirectories", &opt.includes, cmd_directory_vector }, @@ -139,7 +140,7 @@ static struct { { "noparent", &opt.no_parent, cmd_boolean }, { "noproxy", &opt.no_proxy, cmd_vector }, { "numtries", &opt.ntry, cmd_number_inf },/* deprecated*/ - { "outputdocument", NULL, cmd_spec_outputdocument }, + { "outputdocument", &opt.output_document, cmd_string }, { "pagerequisites", &opt.page_requisites, cmd_boolean }, { "passiveftp", &opt.ftp_pasv, cmd_lockable_boolean }, { "passwd", &opt.ftp_pass, cmd_string }, @@ -160,6 +161,10 @@ static struct { { "simplehostcheck", &opt.simple_check, cmd_boolean }, { "spanhosts", &opt.spanhost, cmd_boolean }, { "spider", &opt.spider, cmd_boolean }, +#ifdef HAVE_SSL + { "sslcertfile", &opt.sslcertfile, cmd_string }, + { "sslcertkey", &opt.sslcertkey, cmd_string }, +#endif /* HAVE_SSL */ { "timeout", &opt.timeout, cmd_time }, { "timestamping", &opt.timestamping, cmd_boolean }, { "tries", &opt.ntry, cmd_number_inf }, @@ -175,7 +180,7 @@ static struct { static int comind (const char *com) { - int min = 0, max = ARRAY_SIZE (commands); + int min = 0, max = ARRAY_SIZE (commands) - 1; do { @@ -215,6 +220,7 @@ defaults (void) opt.netrc = 1; opt.ftp_glob = 1; opt.htmlify = 1; + opt.http_keep_alive = 1; opt.use_proxy = 1; tmp = getenv ("no_proxy"); if (tmp) @@ -310,7 +316,7 @@ wgetrc_file_name (void) return NULL; if (!file_exists_p (file)) { - free (file); + xfree (file); return NULL; } return file; @@ -337,21 +343,18 @@ run_wgetrc (const char *file) { char *com, *val; int status; - int length = strlen (line); - if (length && line[length - 1] == '\r') - line[length - 1] = '\0'; /* Parse the line. */ status = parse_line (line, &com, &val); - free (line); + xfree (line); /* If everything is OK, set the value. */ if (status == 1) { if (!setval (com, val)) fprintf (stderr, _("%s: Error in %s at line %d.\n"), exec_name, file, ln); - free (com); - free (val); + xfree (com); + xfree (val); } else if (status == 0) fprintf (stderr, _("%s: Error in %s at line %d.\n"), exec_name, @@ -392,7 +395,7 @@ initialize (void) else #endif run_wgetrc (file); - free (file); + xfree (file); return; } @@ -412,12 +415,12 @@ parse_line (const char *line, char **com, char **val) const char *orig_comptr, *end; char *new_comptr; - /* Skip spaces. */ - while (*p == ' ' || *p == '\t') + /* Skip whitespace. */ + while (*p && ISSPACE (*p)) ++p; /* Don't process empty lines. */ - if (!*p || *p == '\n' || *p == '#') + if (!*p || *p == '#') return -1; for (orig_comptr = p; ISALPHA (*p) || *p == '_' || *p == '-'; p++) @@ -425,6 +428,8 @@ parse_line (const char *line, char **com, char **val) /* The next char should be space or '='. */ if (!ISSPACE (*p) && (*p != '=')) return 0; + /* Here we cannot use strdupdelim() as we normally would because we + want to skip the `-' and `_' characters in the input string. */ *com = (char *)xmalloc (p - orig_comptr + 1); for (new_comptr = *com; orig_comptr < p; orig_comptr++) { @@ -436,7 +441,7 @@ parse_line (const char *line, char **com, char **val) /* If the command is invalid, exit now. */ if (comind (*com) == -1) { - free (*com); + xfree (*com); return 0; } @@ -445,15 +450,17 @@ parse_line (const char *line, char **com, char **val) /* If '=' not found, bail out. */ if (*p != '=') { - free (*com); + xfree (*com); return 0; } /* Skip spaces after '='. */ for (++p; ISSPACE (*p); p++); - /* Get the ending position. */ - for (end = p; *end && *end != '\n'; end++); - /* Allocate *val, and copy from line. */ - *val = strdupdelim (p, end); + /* Get the ending position for VAL by starting with the end of the + line and skipping whitespace. */ + end = line + strlen (line) - 1; + while (end > p && ISSPACE (*end)) + --end; + *val = strdupdelim (p, end + 1); return 1; } @@ -490,28 +497,21 @@ static int myatoi PARAMS ((const char *s)); static int cmd_address (const char *com, const char *val, void *closure) { - struct sockaddr_in *sin; - - sin = (struct sockaddr_in *) malloc(sizeof *sin); - if (sin == NULL) - { - fprintf (stderr, _("%s: Out of memory.\n"), exec_name); - return 0; - } - - if (!store_hostaddress ((unsigned char *)&sin->sin_addr, val)) - { - fprintf (stderr, _("%s: %s: Cannot convert `%s' to an IP address.\n"), - exec_name, com, val); - return 0; - } - - sin->sin_family = AF_INET; - sin->sin_port = 0; - - * (struct sockaddr_in **) closure = sin; - - return 1; + struct sockaddr_in sin; + + if (!store_hostaddress ((unsigned char *)&sin.sin_addr, val)) + { + fprintf (stderr, _("%s: %s: Cannot convert `%s' to an IP address.\n"), + exec_name, com, val); + return 0; + } + + sin.sin_family = AF_INET; + sin.sin_port = 0; + + memcpy (closure, &sin, sizeof (sin)); + + return 1; } /* Store the boolean value from VAL to CLOSURE. COM is ignored, @@ -915,15 +915,6 @@ cmd_spec_mirror (const char *com, const char *val, void *closure) return 1; } -static int -cmd_spec_outputdocument (const char *com, const char *val, void *closure) -{ - FREE_MAYBE (opt.output_document); - opt.output_document = xstrdup (val); - opt.ntry = 1; - return 1; -} - static int cmd_spec_recursive (const char *com, const char *val, void *closure) { @@ -988,6 +979,10 @@ check_user_specified_header (const char *s) return 1; } +void cleanup_html_url PARAMS ((void)); +void downloaded_files_free PARAMS ((void)); + + /* Free the memory allocated by global variables. */ void cleanup (void) @@ -999,8 +994,10 @@ cleanup (void) free_netrc (netrc_list); if (opt.dfp) fclose (opt.dfp); + cleanup_html_url (); + downloaded_files_free (); FREE_MAYBE (opt.lfilename); - free (opt.dir_prefix); + xfree (opt.dir_prefix); FREE_MAYBE (opt.input_filename); FREE_MAYBE (opt.output_document); free_vec (opt.accepts); @@ -1010,9 +1007,10 @@ cleanup (void) free_vec (opt.domains); free_vec (opt.follow_tags); free_vec (opt.ignore_tags); - free (opt.ftp_acc); - free (opt.ftp_pass); + xfree (opt.ftp_acc); + FREE_MAYBE (opt.ftp_pass); FREE_MAYBE (opt.ftp_proxy); + FREE_MAYBE (opt.https_proxy); FREE_MAYBE (opt.http_proxy); free_vec (opt.no_proxy); FREE_MAYBE (opt.useragent); @@ -1020,4 +1018,8 @@ cleanup (void) FREE_MAYBE (opt.http_user); FREE_MAYBE (opt.http_passwd); FREE_MAYBE (opt.user_header); +#ifdef HAVE_SSL + FREE_MAYBE (opt.sslcertkey); + FREE_MAYBE (opt.sslcertfile); +#endif /* HAVE_SSL */ }