diff --git a/apps/include/apps.h b/apps/include/apps.h index da8eae2d87..59e3e92821 100644 --- a/apps/include/apps.h +++ b/apps/include/apps.h @@ -32,6 +32,7 @@ # include "apps_ui.h" # include "opt.h" # include "fmt.h" +# include "platform.h" # if defined(OPENSSL_SYS_WIN32) || defined(OPENSSL_SYS_WINCE) # define openssl_fdset(a,b) FD_SET((unsigned int)a, b) @@ -97,18 +98,6 @@ typedef struct args_st { char **argv; } ARGS; -/* - * VMS C only for now, implemented in vms_decc_init.c - * If other C compilers forget to terminate argv with NULL, this function - * can be re-used. - */ -char **copy_argv(int *argc, char *argv[]); -/* - * Win32-specific argv initialization that splits OS-supplied UNICODE - * command line string to array of UTF8-encoded strings. - */ -void win32_utf8argv(int *argc, char **argv[]); - /* We need both wrap and the "real" function because libcrypto uses both. */ int wrap_password_callback(char *buf, int bufsiz, int verify, void *cb_data); diff --git a/apps/include/platform.h b/apps/include/platform.h new file mode 100644 index 0000000000..49276b6fc9 --- /dev/null +++ b/apps/include/platform.h @@ -0,0 +1,32 @@ +/* + * Copyright 2019 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef HEADER_PLATFORM_H +# define HEADER_PLATFORM_H + +# include + +# if defined(OPENSSL_SYS_VMS) && defined(__DECC) +/* + * VMS C only for now, implemented in vms_decc_init.c + * If other C compilers forget to terminate argv with NULL, this function + * can be re-used. + */ +char **copy_argv(int *argc, char *argv[]); +# endif + +# ifdef _WIN32 +/* + * Win32-specific argv initialization that splits OS-supplied UNICODE + * command line string to array of UTF8-encoded strings. + */ +void win32_utf8argv(int *argc, char **argv[]); +# endif + +#endif diff --git a/apps/vms_decc_argv.c b/apps/vms_decc_argv.c index 54ccc1bf17..932b51a837 100644 --- a/apps/vms_decc_argv.c +++ b/apps/vms_decc_argv.c @@ -9,7 +9,8 @@ #include #include -#include "apps.h" /* for app_malloc() and copy_argv() */ +#include "platform.h" /* for copy_argv() */ +#include "apps.h" /* for app_malloc() */ char **newargv = NULL; diff --git a/test/build.info b/test/build.info index 1a474634c5..372f9be9d6 100644 --- a/test/build.info +++ b/test/build.info @@ -6,6 +6,8 @@ SUBDIRS=ossl_shim my ($base, $files) = @_; return join(" ", map { "$base/$_" } split(/\s+/, $files)); } + our $apps_aux_src = + join(' ', map { "../apps/$_" } split(/\s+/, $target{apps_aux_src})); "" -} IF[{- !$disabled{tests} -}] @@ -14,7 +16,8 @@ IF[{- !$disabled{tests} -}] testutil/driver.c testutil/tests.c testutil/cb.c testutil/stanza.c \ testutil/format_output.c testutil/tap_bio.c \ testutil/test_cleanup.c testutil/main.c testutil/init.c \ - testutil/options.c testutil/test_options.c ../apps/opt.c + testutil/options.c testutil/test_options.c \ + testutil/apps_mem.c ../apps/opt.c {- $apps_aux_src; -} INCLUDE[libtestutil.a]=../include ../apps/include .. DEPEND[libtestutil.a]=../libcrypto diff --git a/test/testutil/apps_mem.c b/test/testutil/apps_mem.c new file mode 100644 index 0000000000..fa60bc6848 --- /dev/null +++ b/test/testutil/apps_mem.c @@ -0,0 +1,19 @@ +/* + * Copyright 2019 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#include "apps.h" + +/* shim that avoids sucking in too much from apps/apps.c */ + +void* app_malloc(int sz, const char *what) +{ + void *vp = OPENSSL_malloc(sz); + + return vp; +} diff --git a/test/testutil/driver.c b/test/testutil/driver.c index df62625fc0..10d74e2ea4 100644 --- a/test/testutil/driver.c +++ b/test/testutil/driver.c @@ -17,6 +17,8 @@ #include "internal/nelem.h" #include +#include "platform.h" /* From libapps */ + #ifdef _WIN32 # define strdup _strdup #endif @@ -132,6 +134,16 @@ int setup_test_framework(int argc, char *argv[]) CRYPTO_mem_ctrl(CRYPTO_MEM_CHECK_ON); } #endif + +#if defined(OPENSSL_SYS_VMS) && defined(__DECC) + argv = copy_argv(&argc, argv); +#elif defined(_WIN32) + /* + * Replace argv[] with UTF-8 encoded strings. + */ + win32_utf8argv(&argc, &argv); +#endif + if (!opt_init(argc, argv, test_get_options())) return 0; return 1;