#endif
char *prog;
OPTION_CHOICE o;
- const char *tmp;
prog = opt_init(argc, argv, version_options);
while ((o = opt_next()) != OPT_EOF) {
}
if (cflags)
printf("%s\n", OpenSSL_version(OPENSSL_CFLAGS));
- if (dir) {
- tmp = OpenSSL_version(OPENSSL_DIR);
- printf("OPENSSLDIR: %s\n", tmp == NULL ? "Undefined" : tmp);
- }
- if (engdir) {
- tmp = OpenSSL_version(OPENSSL_ENGINES_DIR);
- printf("ENGINESDIR: %s\n", tmp == NULL ? "Undefined" : tmp);
- }
- if (moddir) {
- tmp = OpenSSL_version(OPENSSL_MODULES_DIR);
- printf("MODULESDIR: %s\n", tmp == NULL ? "Undefined" : tmp);
- }
+ if (dir)
+ printf("%s\n", OpenSSL_version(OPENSSL_DIR));
+ if (engdir)
+ printf("%s\n", OpenSSL_version(OPENSSL_ENGINES_DIR));
+ if (moddir)
+ printf("%s\n", OpenSSL_version(OPENSSL_MODULES_DIR));
if (seed) {
const char *src = OPENSSL_info(OPENSSL_INFO_SEED_SOURCE);
printf("Seeding source: %s\n", src ? src : "N/A");
printf("%s\n", OpenSSL_version(OPENSSL_CPU_INFO));
#if defined(_WIN32)
if (windows)
- printf("OSSL_WINCTX: %s\n", OpenSSL_version(OPENSSL_WINCTX));
+ printf("%s\n", OpenSSL_version(OPENSSL_WINCTX));
#endif
ret = 0;
end:
* https://www.openssl.org/source/license.html
*/
+#include <stdio.h>
+#include <openssl/bio.h>
+#include "internal/e_os.h"
#include "internal/cryptlib.h"
#include "internal/common.h"
+#include "internal/thread_once.h"
#include "buildinf.h"
extern char ossl_cpu_info_str[];
+#if defined(_WIN32) && defined(OSSL_WINCTX)
+/* size: MAX_PATH + sizeof("OPENSSLDIR: \"\"") */
+static char openssldir[MAX_PATH + 15];
+
+/* size: MAX_PATH + sizeof("ENGINESDIR: \"\"") */
+static char enginesdir[MAX_PATH + 15];
+
+/* size: MAX_PATH + sizeof("MODULESDIR: \"\"") */
+static char modulesdir[MAX_PATH + 15];
+
+static CRYPTO_ONCE version_strings_once = CRYPTO_ONCE_STATIC_INIT;
+
+DEFINE_RUN_ONCE_STATIC(version_strings_setup)
+{
+ BIO_snprintf(openssldir, sizeof(openssldir), "OPENSSLDIR: \"%s\"",
+ ossl_get_openssldir());
+ BIO_snprintf(enginesdir, sizeof(enginesdir), "ENGINESDIR: \"%s\"",
+ ossl_get_enginesdir());
+ BIO_snprintf(modulesdir, sizeof(modulesdir), "MODULESDIR: \"%s\"",
+ ossl_get_modulesdir());
+ return 1;
+}
+
+# define TOSTR(x) #x
+# define OSSL_WINCTX_STRING "OSSL_WINCTX: \"" ## TOSTR(OSSL_WINCTX) ## "\""
+
+#endif
+
const char *OpenSSL_version(int t)
{
+#if defined(_WIN32) && defined(OSSL_WINCTX)
+ /* Cannot really fail but we would return empty strings anyway */
+ (void)RUN_ONCE(&version_strings_once, version_strings_setup);
+#endif
+
switch (t) {
case OPENSSL_VERSION:
return OPENSSL_VERSION_TEXT;
return compiler_flags;
case OPENSSL_PLATFORM:
return PLATFORM;
+#if defined(_WIN32) && defined(OSSL_WINCTX)
+ case OPENSSL_DIR:
+ return openssldir;
+ case OPENSSL_ENGINES_DIR:
+ return enginesdir;
+ case OPENSSL_MODULES_DIR:
+ return modulesdir;
+#else
case OPENSSL_DIR:
- return ossl_get_openssldir();
+# ifdef OPENSSLDIR
+ return "OPENSSLDIR: \"" OPENSSLDIR "\"";
+# else
+ return "OPENSSLDIR: N/A";
+# endif
case OPENSSL_ENGINES_DIR:
- return ossl_get_enginesdir();
+# ifdef ENGINESDIR
+ return "ENGINESDIR: \"" ENGINESDIR "\"";
+# else
+ return "ENGINESDIR: N/A";
+# endif
case OPENSSL_MODULES_DIR:
- return ossl_get_modulesdir();
+# ifdef MODULESDIR
+ return "MODULESDIR: \"" MODULESDIR "\"";
+# else
+ return "MODULESDIR: N/A";
+# endif
+#endif
case OPENSSL_CPU_INFO:
if (OPENSSL_info(OPENSSL_INFO_CPU_SETTINGS) != NULL)
return ossl_cpu_info_str;
else
return "CPUINFO: N/A";
case OPENSSL_WINCTX:
- return ossl_get_wininstallcontext();
+#if defined(_WIN32) && defined(OSSL_WINCTX)
+ return OSSL_WINCTX_STRING;
+#else
+ return "OSSL_WINCTX: Undefined";
+#endif
}
return "not available";
}