diff --git a/apps/apps.h b/apps/apps.h index fc480e16c824f441fde3d1384e066762fb9c4f6d..7cf0dc4b6a662816d77dd13b41dcab681499bae9 100644 --- a/apps/apps.h +++ b/apps/apps.h @@ -445,6 +445,17 @@ typedef struct args_st { char **argv; } ARGS; +#if defined(OPENSSL_SYS_VMS) && defined(__DECC) +# pragma pointer_size save +# pragma pointer_size 32 +typedef char **argv_t; +# pragma pointer_size restore +char **copy_argv(int *argc, argv_t argv); +#else +typedef char **argv_t; +#endif + + # define PW_MIN_LENGTH 4 typedef struct pw_cb_data { const void *password; diff --git a/apps/openssl.c b/apps/openssl.c index 2d9ddaa56b59dfa83d51b60e7b5e47ddca16d536..166c7a1e45b0bf9c1b610c75e8804206ba960cb9 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; diff --git a/apps/vms_decc_init.c b/apps/vms_decc_init.c index b66c00ffd1fcdc4be9b731962758642e90dafe9c..8f8ffc6753214e66fc5fd48d363e308e549c3961 100644 --- a/apps/vms_decc_init.c +++ b/apps/vms_decc_init.c @@ -105,7 +105,8 @@ decc_feat_t decc_feat_array[] = { {(char *)NULL, 0} }; -char **copy_argv(int *argc, char *argv[]) + +char **copy_argv(int *argc, argv_t argv) { /*- * The note below is for historical purpose. On VMS now we always