perlasm/x86asm.pl: recognize elf-1 denoting old ELF platforms.
[openssl.git] / crypto / cryptlib.c
index 6defb7cc6993129f7e3c6e7e4b50279c102727f5..897b5b5bc22a551e6ad21d82a3b21b39a885e9ec 100644 (file)
@@ -152,13 +152,16 @@ void OPENSSL_cpuid_setup(void)
        if (!sscanf(env+off,"%lli",(long long *)&vec)) vec = strtoul(env+off,NULL,0);
 #endif
        if (off) vec = OPENSSL_ia32_cpuid(OPENSSL_ia32cap_P)&~vec;
+       else if (env[0]==':') vec = OPENSSL_ia32_cpuid(OPENSSL_ia32cap_P);
 
        OPENSSL_ia32cap_P[2] = 0;
        if ((env=strchr(env,':'))) {
-           off = (env[1]=='~')?2:1;
-           vec = strtoul(env+off,NULL,0);
-           if (off>1)  OPENSSL_ia32cap_P[2] &= ~vec;
-           else        OPENSSL_ia32cap_P[2] = vec;
+           unsigned int vecx;
+           env++;
+           off = (env[0]=='~')?1:0;
+           vecx = strtoul(env+off,NULL,0);
+           if (off)    OPENSSL_ia32cap_P[2] &= ~vecx;
+           else        OPENSSL_ia32cap_P[2] = vecx;
        }
     }
     else
@@ -181,7 +184,7 @@ unsigned int *OPENSSL_ia32cap_loc(void) { return NULL; }
 #endif
 int OPENSSL_NONPIC_relocated = 0;
 #if !defined(OPENSSL_CPUID_SETUP) && !defined(OPENSSL_CPUID_OBJ)
-void OPENSSL_cpuid_setup(unsigned int *) {}
+void OPENSSL_cpuid_setup(void) {}
 #endif
 
 #if (defined(_WIN32) || defined(__CYGWIN__)) && defined(_WINDLL)
@@ -307,7 +310,7 @@ void OPENSSL_showfatal (const char *fmta,...)
        DWORD out;
 
        va_start (ap,fmta);
-       len=_vsnprintf((char *)buf,sizeof(buf),fmt,ap);
+       len=_vsnprintf((char *)buf,sizeof(buf),fmta,ap);
        WriteFile(h,buf,len<0?sizeof(buf):(DWORD)len,&out,NULL);
        va_end (ap);
        return;
@@ -354,7 +357,7 @@ void OPENSSL_showfatal (const char *fmta,...)
 
 #if defined(_WIN32_WINNT) && _WIN32_WINNT>=0x0333
     /* this -------------v--- guards NT-specific calls */
-    if (GetVersion() < 0x80000000 && OPENSSL_isservice() > 0)
+    if (check_winnt() && OPENSSL_isservice() > 0)
     {  HANDLE h = RegisterEventSource(0,_T("OPENSSL"));
        const TCHAR *pmsg=buf;
        ReportEvent(h,EVENTLOG_ERROR_TYPE,0,0,0,1,0,&pmsg,0);
@@ -384,7 +387,9 @@ void OpenSSLDie(const char *file,int line,const char *assertion)
        abort();
 #else
        /* Win32 abort() customarily shows a dialog, but we just did that... */
+#if !defined(_WIN32_WCE)
        raise(SIGABRT);
+#endif
        _exit(3);
 #endif
        }
@@ -392,3 +397,16 @@ void OpenSSLDie(const char *file,int line,const char *assertion)
 #ifndef OPENSSL_FIPSCANISTER
 void *OPENSSL_stderr(void)     { return stderr; }
 #endif
+
+int CRYPTO_memcmp(const void *in_a, const void *in_b, size_t len)
+       {
+       size_t i;
+       const unsigned char *a = in_a;
+       const unsigned char *b = in_b;
+       unsigned char x = 0;
+
+       for (i = 0; i < len; i++)
+               x |= a[i] ^ b[i];
+
+       return x;
+       }