summaryrefslogtreecommitdiffstats
path: root/crypto/cryptlib.c
diff options
context:
space:
mode:
authorAndy Polyakov <appro@openssl.org>2011-07-23 12:10:26 +0000
committerAndy Polyakov <appro@openssl.org>2011-07-23 12:10:26 +0000
commit2667162d33ab21b6477f224040106c1d460e9249 (patch)
treec8e9f3a14e231548da39a9c552109c9dececeb7c /crypto/cryptlib.c
parent66b86a4fd5168227e12604049015c8f4fbb2b485 (diff)
cryptlib.c: OPENSSL_ia32cap environment variable to interpret ~ as cpuid mask.
Diffstat (limited to 'crypto/cryptlib.c')
-rw-r--r--crypto/cryptlib.c9
1 files changed, 6 insertions, 3 deletions
diff --git a/crypto/cryptlib.c b/crypto/cryptlib.c
index d4b236284e..8a8fac3d13 100644
--- a/crypto/cryptlib.c
+++ b/crypto/cryptlib.c
@@ -144,12 +144,15 @@ void OPENSSL_cpuid_setup(void)
if (trigger) return;
trigger=1;
- if ((env=getenv("OPENSSL_ia32cap")))
+ if ((env=getenv("OPENSSL_ia32cap"))) {
+ int off = (env[0]=='~')?1:0;
#if defined(_WIN32)
- { if (!sscanf(env,"%I64i",&vec)) vec = strtoul(env,NULL,0); }
+ if (!sscanf(env+off,"%I64i",&vec)) vec = strtoul(env+off,NULL,0);
#else
- vec = strtoull(env,NULL,0);
+ vec = strtoull(env+off,NULL,0);
#endif
+ if (off) vec = OPENSSL_ia32_cpuid()&~vec;
+ }
else
vec = OPENSSL_ia32_cpuid();