diff --git a/src/ChangeLog b/src/ChangeLog
index c9c317ba..c2af118e 100644
--- a/src/ChangeLog
+++ b/src/ChangeLog
@@ -1,3 +1,28 @@
+2011-10-07 Steven Schweda
+
+ * connect.c: Add HAVE_SYS_SELECT_H and HAVE_SYS_SOCKET_H conditions
+ on includes of and , respectively.
+ * ftp.c (getftp): Move BIN_TYPE_TRANSFER macro into VMS-specific
+ section. On VMS, use Stream_LF attributes for listing files. Pass
+ BIN_TYPE_FILE to fopen_excl() instead of constant-everywhere "true".
+ * ftp.c (ftp_retrieve_list): Restore lost test of opt.preserve_perm
+ (--preserve-permissions) on the chmod() operation.
+ * init.c, main.c: Remove "deprecated" from opt.preserve_perm
+ (--preserve-permissions).
+ * init.c (initialize): Use distinct messages for errors in C macro
+ SYSTEM_WGETRC and environment-variable SYSTEM_WGETRC. Avoid use of
+ C macro SYSTEM_WGETRC when it's not defined.
+ * log.c (log_close): Avoid closing logfp when it's stderr.
+ * main.c (print_help): Restore --preserve-permissions.
+ * main.c (main): Avoid using a negative value of longindex as a
+ subscript (for long_options[]) when searching for "--config".
+ * main.c (main): Exit the program using exit() instead of "return".
+ (VMS handles these differently, and exit() is better.)
+ * openssl.c (ssl_init): Add type cast (SSL_METHOD *) to newly "const"
+ "meth" argument to accommodate OpenSSL version 0.9.8, where that
+ argument is not "const" in the OpenSSL function (SSL_CTX_new).
+ * utils.c (fopen_excl): Comment typography.
+
2011-10-02 Henrik Holst (tiny change)
* http.c (gethttp): If 'contentonerror' is used then do not
skip the http body on 4xx and 5xx errors.
diff --git a/src/connect.c b/src/connect.c
index e12c049a..6008c3c2 100644
--- a/src/connect.c
+++ b/src/connect.c
@@ -36,8 +36,13 @@ as that of the covered work. */
#include
#include
-#include
-#include
+#ifdef HAVE_SYS_SOCKET_H
+# include
+#endif /* def HAVE_SYS_SOCKET_H */
+
+#ifdef HAVE_SYS_SELECT_H
+# include
+#endif /* def HAVE_SYS_SELECT_H */
#ifndef WINDOWS
# ifdef __VMS
diff --git a/src/ftp.c b/src/ftp.c
index a586d849..f75397d0 100644
--- a/src/ftp.c
+++ b/src/ftp.c
@@ -1152,13 +1152,25 @@ Error in server response, closing control connection.\n"));
Elsewhere, define a constant "binary" flag.
Isn't it nice to have distinct text and binary file types?
*/
-# define BIN_TYPE_TRANSFER (type_char != 'A')
+/* 2011-09-30 SMS.
+ Added listing files to the set of non-"binary" (text, Stream_LF)
+ files. (Wget works either way, but other programs, like, say, text
+ editors, work better on listing files which have text attributes.)
+ Now we use "binary" attributes for a binary ("IMAGE") transfer,
+ unless "--ftp-stmlf" was specified, and we always use non-"binary"
+ (text, Stream_LF) attributes for a listing file, or for an ASCII
+ transfer.
+ Tidied the VMS-specific BIN_TYPE_xxx macros, and changed the call to
+ fopen_excl() (restored?) to use BIN_TYPE_FILE instead of "true".
+*/
#ifdef __VMS
+# define BIN_TYPE_TRANSFER (type_char != 'A')
+# define BIN_TYPE_FILE \
+ ((!(cmd & DO_LIST)) && BIN_TYPE_TRANSFER && (opt.ftp_stmlf == 0))
# define FOPEN_OPT_ARGS "fop=sqo", "acc", acc_cb, &open_id
# define FOPEN_OPT_ARGS_BIN "ctx=bin,stm", "rfm=fix", "mrs=512" FOPEN_OPT_ARGS
-# define BIN_TYPE_FILE (BIN_TYPE_TRANSFER && (opt.ftp_stmlf == 0))
#else /* def __VMS */
-# define BIN_TYPE_FILE 1
+# define BIN_TYPE_FILE true
#endif /* def __VMS [else] */
if (restval && !(con->cmd & DO_LIST))
@@ -1217,7 +1229,7 @@ Error in server response, closing control connection.\n"));
}
else
{
- fp = fopen_excl (con->target, true);
+ fp = fopen_excl (con->target, BIN_TYPE_FILE);
if (!fp && errno == EEXIST)
{
/* We cannot just invent a new name and use it (which is
@@ -1880,8 +1892,10 @@ Already have correct symlink %s -> %s\n\n"),
set_local_file (&actual_target, con->target);
- /* If downloading a plain file, set valid (non-zero) permissions. */
- if (dlthis && (actual_target != NULL) && (f->type == FT_PLAINFILE))
+ /* If downloading a plain file, and the user requested it, then
+ set valid (non-zero) permissions. */
+ if (dlthis && (actual_target != NULL) &&
+ (f->type == FT_PLAINFILE) && opt.preserve_perm)
{
if (f->perms)
chmod (actual_target, f->perms);
diff --git a/src/init.c b/src/init.c
index b40be8ad..eae35523 100644
--- a/src/init.c
+++ b/src/init.c
@@ -214,7 +214,7 @@ static const struct {
{ "postdata", &opt.post_data, cmd_string },
{ "postfile", &opt.post_file_name, cmd_file },
{ "preferfamily", NULL, cmd_spec_prefer_family },
- { "preservepermissions", &opt.preserve_perm, cmd_boolean },/* deprecated */
+ { "preservepermissions", &opt.preserve_perm, cmd_boolean },
#ifdef HAVE_SSL
{ "privatekey", &opt.private_key, cmd_file },
{ "privatekeytype", &opt.private_key_type, cmd_cert_type },
@@ -598,21 +598,34 @@ initialize (void)
variable has been set. For internal testing purposes only! */
env_sysrc = getenv ("SYSTEM_WGETRC");
if (env_sysrc && file_exists_p (env_sysrc))
- ok &= run_wgetrc (env_sysrc);
+ {
+ ok &= run_wgetrc (env_sysrc);
+ /* If there are any problems parsing the system wgetrc file, tell
+ the user and exit */
+ if (! ok)
+ {
+ fprintf (stderr, _("\
+Parsing system wgetrc file (env SYSTEM_WGETRC) failed. Please check\n\
+'%s',\n\
+or specify a different file using --config.\n"), env_sysrc);
+ exit (2);
+ }
+ }
/* Otherwise, if SYSTEM_WGETRC is defined, use it. */
#ifdef SYSTEM_WGETRC
else if (file_exists_p (SYSTEM_WGETRC))
ok &= run_wgetrc (SYSTEM_WGETRC);
-#endif
/* If there are any problems parsing the system wgetrc file, tell
the user and exit */
if (! ok)
{
fprintf (stderr, _("\
-Parsing system wgetrc file failed, please check '%s'. \
-Or specify a different file using --config\n"), SYSTEM_WGETRC);
+Parsing system wgetrc file failed. Please check\n\
+'%s',\n\
+or specify a different file using --config.\n"), SYSTEM_WGETRC);
exit (2);
}
+#endif
/* Override it with your own, if one exists. */
file = wgetrc_file_name ();
if (!file)
diff --git a/src/log.c b/src/log.c
index 361b4537..e6875f6b 100644
--- a/src/log.c
+++ b/src/log.c
@@ -573,14 +573,14 @@ log_init (const char *file, bool appendp)
}
}
-/* Close LOGFP, inhibit further logging and free the memory associated
- with it. */
+/* Close LOGFP (only if we opened it, not if it's stderr), inhibit
+ further logging and free the memory associated with it. */
void
log_close (void)
{
int i;
- if (logfp)
+ if (logfp && (logfp != stderr))
fclose (logfp);
logfp = NULL;
inhibit_logging = true;
diff --git a/src/main.c b/src/main.c
index b80eef0a..05ad0e76 100644
--- a/src/main.c
+++ b/src/main.c
@@ -243,7 +243,7 @@ static struct cmdline_option option_data[] =
{ "post-data", 0, OPT_VALUE, "postdata", -1 },
{ "post-file", 0, OPT_VALUE, "postfile", -1 },
{ "prefer-family", 0, OPT_VALUE, "preferfamily", -1 },
- { "preserve-permissions", 0, OPT_BOOLEAN, "preservepermissions", -1 }, /* deprecated */
+ { "preserve-permissions", 0, OPT_BOOLEAN, "preservepermissions", -1 },
{ IF_SSL ("private-key"), 0, OPT_VALUE, "privatekey", -1 },
{ IF_SSL ("private-key-type"), 0, OPT_VALUE, "privatekeytype", -1 },
{ "progress", 0, OPT_VALUE, "progress", -1 },
@@ -646,6 +646,8 @@ FTP options:\n"),
--no-glob turn off FTP file name globbing.\n"),
N_("\
--no-passive-ftp disable the \"passive\" transfer mode.\n"),
+ N_("\
+ --preserve-permissions preserve remote file permissions.\n"),
N_("\
--retr-symlinks when recursing, get linked-to files (not dir).\n"),
"\n",
@@ -948,8 +950,8 @@ main (int argc, char **argv)
init_switches ();
- /* This seperate getopt_long is needed to find the user config
- and parse it before the other user options. */
+ /* This separate getopt_long is needed to find the user config file
+ option ("--config") and parse it before the other user options. */
longindex = -1;
int retconf;
bool use_userconfig = false;
@@ -960,20 +962,25 @@ main (int argc, char **argv)
int confval;
bool userrc_ret = true;
struct cmdline_option *config_opt;
- confval = long_options[longindex].val;
- config_opt = &option_data[confval & ~BOOLEAN_NEG_MARKER];
- if (strcmp (config_opt->long_name, "config") == 0)
+
+ /* There is no short option for "--config". */
+ if (longindex >= 0)
{
- userrc_ret &= run_wgetrc (optarg);
- use_userconfig = true;
+ confval = long_options[longindex].val;
+ config_opt = &option_data[confval & ~BOOLEAN_NEG_MARKER];
+ if (strcmp (config_opt->long_name, "config") == 0)
+ {
+ userrc_ret &= run_wgetrc (optarg);
+ use_userconfig = true;
+ }
+ if (!userrc_ret)
+ {
+ printf ("Exiting due to error in %s\n", optarg);
+ exit (2);
+ }
+ else
+ break;
}
- if (!userrc_ret)
- {
- printf ("Exiting due to error in %s\n", optarg);
- exit (2);
- }
- else
- break;
}
/* If the user did not specify a config, read the system wgetrc and ~/.wgetrc. */
@@ -1470,7 +1477,7 @@ outputting to a regular file.\n"));
xfree (url[i]);
cleanup ();
- return get_exit_status ();
+ exit (get_exit_status ());
}
#endif /* TESTING */
diff --git a/src/openssl.c b/src/openssl.c
index 2e236690..bc374915 100644
--- a/src/openssl.c
+++ b/src/openssl.c
@@ -201,7 +201,9 @@ ssl_init ()
abort ();
}
- ssl_ctx = SSL_CTX_new (meth);
+ /* The type cast below accommodates older OpenSSL versions (0.9.8)
+ where SSL_CTX_new() is declared without a "const" argument. */
+ ssl_ctx = SSL_CTX_new ((SSL_METHOD *)meth);
if (!ssl_ctx)
goto error;
diff --git a/src/utils.c b/src/utils.c
index 4950ab2e..509088b6 100644
--- a/src/utils.c
+++ b/src/utils.c
@@ -769,8 +769,7 @@ fopen_excl (const char *fname, int binary)
open_id = 13;
fd = open( fname, /* File name. */
flags, /* Flags. */
- 0777, /* Mode for default protection.
-*/
+ 0777, /* Mode for default protection. */
"rfm=stmlf", /* Stream_LF. */
OPEN_OPT_ARGS); /* Access callback. */
}