doc/apps: formatting fixes.
[openssl.git] / crypto / cryptlib.c
index d52caa49efc5241d8198dd5519857cc13a1ea262..4b0a36c3d3a5e8717cfac5b6ef0ae95515422ef6 100644 (file)
@@ -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);
+       vec = strtoull(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,7 +213,6 @@ BOOL WINAPI DllMain(HINSTANCE hinstDLL, DWORD fdwReason,
        case DLL_THREAD_ATTACH:
                break;
        case DLL_THREAD_DETACH:
-               ERR_remove_state(0);
                break;
        case DLL_PROCESS_DETACH:
                break;
@@ -291,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;
     }
@@ -373,4 +381,6 @@ void OpenSSLDie(const char *file,int line,const char *assertion)
 #endif
        }
 
+#ifndef OPENSSL_FIPSCANISTER
 void *OPENSSL_stderr(void)     { return stderr; }
+#endif