1
0
mirror of https://github.com/moparisthebest/wget synced 2024-07-03 16:38:41 -04:00

Fix some problems under VMS.

This commit is contained in:
Steven Schweda 2011-10-23 13:11:22 +02:00 committed by Giuseppe Scrivano
parent e0a3162893
commit 8c7bd588fe
8 changed files with 100 additions and 35 deletions

View File

@ -1,3 +1,28 @@
2011-10-07 Steven Schweda <address@hidden>
* connect.c: Add HAVE_SYS_SELECT_H and HAVE_SYS_SOCKET_H conditions
on includes of <sys/select.h> and <sys/socket.h>, 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 <henrik.holst@millistream.com> (tiny change)
* http.c (gethttp): If 'contentonerror' is used then do not
skip the http body on 4xx and 5xx errors.

View File

@ -36,8 +36,13 @@ as that of the covered work. */
#include <unistd.h>
#include <assert.h>
#include <sys/socket.h>
#include <sys/select.h>
#ifdef HAVE_SYS_SOCKET_H
# include <sys/socket.h>
#endif /* def HAVE_SYS_SOCKET_H */
#ifdef HAVE_SYS_SELECT_H
# include <sys/select.h>
#endif /* def HAVE_SYS_SELECT_H */
#ifndef WINDOWS
# ifdef __VMS

View File

@ -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);

View File

@ -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)

View File

@ -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;

View File

@ -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 */

View File

@ -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;

View File

@ -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. */
}