X-Git-Url: https://git.librecmc.org/?a=blobdiff_plain;f=crypto%2Fcryptlib.c;h=c85fe5aa3d76688e3c7057e3213cc99acdf2388a;hb=5833e4f5d63b2ca9637c1427a1efc170c479b925;hp=8bc5189c162587335a1cac3e76c4b14edc45522d;hpb=06b433acade4732a7f647faace14dfd6950ac49c;p=oweals%2Fopenssl.git diff --git a/crypto/cryptlib.c b/crypto/cryptlib.c index 8bc5189c16..c85fe5aa3d 100644 --- a/crypto/cryptlib.c +++ b/crypto/cryptlib.c @@ -125,7 +125,7 @@ static double SSLeay_MSVC5_hack=0.0; /* and for VC1.5 */ defined(__INTEL__) || \ defined(__x86_64) || defined(__x86_64__) || defined(_M_AMD64) || defined(_M_X64) -unsigned int OPENSSL_ia32cap_P[2]; +extern unsigned int OPENSSL_ia32cap_P[2]; unsigned int *OPENSSL_ia32cap_loc(void) { return OPENSSL_ia32cap_P; } #if defined(OPENSSL_CPUID_OBJ) && !defined(OPENSSL_NO_ASM) && !defined(I386_ONLY) @@ -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); + if (!sscanf(env+off,"%lli",(long long *)&vec)) vec = strtoul(env+off,NULL,0); #endif + if (off) vec = OPENSSL_ia32_cpuid()&~vec; + } else vec = OPENSSL_ia32_cpuid(); @@ -161,6 +164,8 @@ void OPENSSL_cpuid_setup(void) OPENSSL_ia32cap_P[0] = (unsigned int)vec|(1<<10); OPENSSL_ia32cap_P[1] = (unsigned int)(vec>>32); } +#else +unsigned int OPENSSL_ia32cap_P[2]; #endif #else @@ -208,9 +213,6 @@ BOOL WINAPI DllMain(HINSTANCE hinstDLL, DWORD fdwReason, case DLL_THREAD_ATTACH: break; case DLL_THREAD_DETACH: -#ifndef OPENSSL_FIPS - ERR_remove_state(0); -#endif break; case DLL_PROCESS_DETACH: break; @@ -293,8 +295,12 @@ void OPENSSL_showfatal (const char *fmta,...) if ((h=GetStdHandle(STD_ERROR_HANDLE)) != NULL && GetFileType(h)!=FILE_TYPE_UNKNOWN) { /* must be console application */ + int len; + DWORD out; + va_start (ap,fmta); - vfprintf (stderr,fmta,ap); + len=_vsnprintf((char *)buf,sizeof(buf),fmt,ap); + WriteFile(h,buf,len<0?sizeof(buf):(DWORD)len,&out,NULL); va_end (ap); return; } @@ -375,4 +381,6 @@ void OpenSSLDie(const char *file,int line,const char *assertion) #endif } +#ifndef OPENSSL_FIPSCANISTER void *OPENSSL_stderr(void) { return stderr; } +#endif