summaryrefslogtreecommitdiffstats
path: root/apps/openssl.c
diff options
context:
space:
mode:
authorRichard Levitte <levitte@openssl.org>2016-03-30 08:35:18 +0200
committerRichard Levitte <levitte@openssl.org>2016-03-30 20:25:08 +0200
commit087ca80ad83071dde0bb6bc1c28c743caa00eaf8 (patch)
tree63e6d61af33aeae5da33ca126e3582231295ddaf /apps/openssl.c
parent90dbd25097d7d4af0bea0cd9cab60d749ed0a6a2 (diff)
Fix pointer size issues with argv on VMS
The argument 'argv' in 'main' is a short pointer to a short pointer on VMS, regardless of initial pointer size. We must therefore make sure that 'copy_argv' gets a 32-bit pointer for argv, and that the copied argv is used for the rest of main(). This introduces the local type argv_t, which will have correct pointer size in all cases (and be harmless on all other platforms) as well as the macro Argv, which is defined as 'copied_argv' or 'argv', as the case may be. Reviewed-by: Andy Polyakov <appro@openssl.org>
Diffstat (limited to 'apps/openssl.c')
-rw-r--r--apps/openssl.c21
1 files changed, 10 insertions, 11 deletions
diff --git a/apps/openssl.c b/apps/openssl.c
index 2d9ddaa56b..166c7a1e45 100644
--- a/apps/openssl.c
+++ b/apps/openssl.c
@@ -207,15 +207,12 @@ static char *make_config_name()
return p;
}
-#if defined( OPENSSL_SYS_VMS)
-extern char **copy_argv(int *argc, char **argv);
-#endif
-
int main(int argc, char *argv[])
{
FUNCTION f, *fp;
LHASH_OF(FUNCTION) *prog = NULL;
char **copied_argv = NULL;
+ char **argv_alias = NULL;
char *p, *pname;
char buf[1024];
const char *prompt;
@@ -231,8 +228,10 @@ int main(int argc, char *argv[])
bio_out = dup_bio_out(FORMAT_TEXT);
bio_err = dup_bio_err(FORMAT_TEXT);
-#if defined( OPENSSL_SYS_VMS)
- copied_argv = argv = copy_argv(&argc, argv);
+#if defined( OPENSSL_SYS_VMS) && defined(__DECC)
+ copied_argv = argv_alias = copy_argv(&argc, argv);
+#else
+ argv_alias = argv;
#endif
p = getenv("OPENSSL_DEBUG_MEMORY");
@@ -256,22 +255,22 @@ int main(int argc, char *argv[])
goto end;
prog = prog_init();
- pname = opt_progname(argv[0]);
+ pname = opt_progname(argv_alias[0]);
/* first check the program name */
f.name = pname;
fp = lh_FUNCTION_retrieve(prog, &f);
if (fp != NULL) {
- argv[0] = pname;
- ret = fp->func(argc, argv);
+ argv_alias[0] = pname;
+ ret = fp->func(argc, argv_alias);
goto end;
}
/* If there is stuff on the command line, run with that. */
if (argc != 1) {
argc--;
- argv++;
- ret = do_cmd(prog, argc, argv);
+ argv_alias++;
+ ret = do_cmd(prog, argc, argv_alias);
if (ret < 0)
ret = 0;
goto end;