summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--apps/include/apps.h13
-rw-r--r--apps/include/platform.h32
-rw-r--r--apps/vms_decc_argv.c3
-rw-r--r--test/build.info5
-rw-r--r--test/testutil/apps_mem.c19
-rw-r--r--test/testutil/driver.c12
6 files changed, 70 insertions, 14 deletions
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 <openssl/e_os2.h>
+
+# 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 <stdlib.h>
#include <openssl/crypto.h>
-#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 <openssl/bio.h>
+#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;