diff options
author | Andy Polyakov <appro@openssl.org> | 2011-07-23 12:10:26 +0000 |
---|---|---|
committer | Andy Polyakov <appro@openssl.org> | 2011-07-23 12:10:26 +0000 |
commit | 2667162d33ab21b6477f224040106c1d460e9249 (patch) | |
tree | c8e9f3a14e231548da39a9c552109c9dececeb7c /crypto | |
parent | 66b86a4fd5168227e12604049015c8f4fbb2b485 (diff) |
cryptlib.c: OPENSSL_ia32cap environment variable to interpret ~ as cpuid mask.
Diffstat (limited to 'crypto')
-rw-r--r-- | crypto/cryptlib.c | 9 |
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(); |