Typo...
[openssl.git] / crypto / cryptlib.c
index 2782e3e6035422a88f12aad57522ed3d5fd7b2fb..6464c537058c8ca86072d14deda3fff8107e2b6f 100644 (file)
@@ -568,8 +568,11 @@ void OPENSSL_cpuid_setup(void)
 }
 #endif
 
+#else
+unsigned long *OPENSSL_ia32cap_loc(void) { return NULL; }
 #endif
-#if !defined(OPENSSL_CPUID_SETUP)
+int OPENSSL_NONPIC_relocated = 0;
+#if !defined(OPENSSL_CPUID_SETUP) && !defined(OPENSSL_CPUID_OBJ)
 void OPENSSL_cpuid_setup(void) {}
 #endif
 
@@ -589,6 +592,21 @@ BOOL WINAPI DllMain(HINSTANCE hinstDLL, DWORD fdwReason,
                {
        case DLL_PROCESS_ATTACH:
                OPENSSL_cpuid_setup();
+#if defined(_WIN32_WINNT)
+               {
+               IMAGE_DOS_HEADER *dos_header = (IMAGE_DOS_HEADER *)hinstDLL;
+               IMAGE_NT_HEADERS *nt_headers;
+
+               if (dos_header->e_magic==IMAGE_DOS_SIGNATURE)
+                       {
+                       nt_headers = (IMAGE_NT_HEADERS *)((char *)dos_header
+                                               + dos_header->e_lfanew);
+                       if (nt_headers->Signature==IMAGE_NT_SIGNATURE &&
+                           hinstDLL!=(HINSTANCE)(nt_headers->OptionalHeader.ImageBase))
+                               OPENSSL_NONPIC_relocated=1;
+                       }
+               }
+#endif
                break;
        case DLL_THREAD_ATTACH:
                break;
@@ -602,11 +620,11 @@ BOOL WINAPI DllMain(HINSTANCE hinstDLL, DWORD fdwReason,
        }
 #endif
 
-#if defined(_WIN32)
+#if defined(_WIN32) && !defined(__CYGWIN__)
 #include <tchar.h>
 
 #if defined(_WIN32_WINNT) && _WIN32_WINNT>=0x0333
-static int IsService(void)
+int OPENSSL_isservice(void)
 { HWINSTA h;
   DWORD len;
   WCHAR *name;
@@ -643,11 +661,15 @@ static int IsService(void)
 #endif
     else                               return 0;
 }
+#else
+int OPENSSL_isservice(void) { return 0; }
 #endif
 
-void OPENSSL_showfatal (char *fmta,...)
+void OPENSSL_showfatal (const char *fmta,...)
 { va_list ap;
-  TCHAR buf[256],*fmt;
+  TCHAR buf[256];
+  const TCHAR *fmt;
+#ifdef STD_ERROR_HANDLE        /* what a dirty trick! */
   HANDLE h;
 
     if ((h=GetStdHandle(STD_ERROR_HANDLE)) != NULL &&
@@ -658,9 +680,10 @@ void OPENSSL_showfatal (char *fmta,...)
        va_end (ap);
        return;
     }
+#endif
 
     if (sizeof(TCHAR)==sizeof(char))
-       fmt=fmta;
+       fmt=(const TCHAR *)fmta;
     else do
     { int    keepgoing;
       size_t len_0=strlen(fmta)+1,i;
@@ -671,7 +694,7 @@ void OPENSSL_showfatal (char *fmta,...)
 #else
        fmtw = (WCHAR *)alloca (len_0*sizeof(WCHAR));
 #endif
-       if (fmtw == NULL) { fmt=(TCHAR *)L"no stack?"; break; }
+       if (fmtw == NULL) { fmt=(const TCHAR *)L"no stack?"; break; }
 
 #ifndef OPENSSL_NO_MULTIBYTE
        if (!MultiByteToWideChar(CP_ACP,0,fmta,len_0,fmtw,len_0))
@@ -693,7 +716,7 @@ void OPENSSL_showfatal (char *fmta,...)
                }
            } while (keepgoing);
        }
-       fmt = (TCHAR *)fmtw;
+       fmt = (const TCHAR *)fmtw;
     } while (0);
 
     va_start (ap,fmta);
@@ -703,7 +726,7 @@ void OPENSSL_showfatal (char *fmta,...)
 
 #if defined(_WIN32_WINNT) && _WIN32_WINNT>=0x0333
     /* this -------------v--- guards NT-specific calls */
-    if (GetVersion() < 0x80000000 && IsService())
+    if (GetVersion() < 0x80000000 && OPENSSL_isservice())
     {  HANDLE h = RegisterEventSource(0,_T("OPENSSL"));
        const TCHAR *pmsg=buf;
        ReportEvent(h,EVENTLOG_ERROR_TYPE,0,0,0,1,0,&pmsg,0);
@@ -711,30 +734,17 @@ void OPENSSL_showfatal (char *fmta,...)
     }
     else
 #endif
-    {  MSGBOXPARAMS         m;
-
-       m.cbSize             = sizeof(m);
-       m.hwndOwner          = NULL;
-       m.lpszCaption        = _T("OpenSSL: FATAL");
-       m.dwStyle            = MB_OK;
-       m.hInstance          = NULL;
-       m.lpszIcon           = IDI_ERROR;
-       m.dwContextHelpId    = 0;
-       m.lpfnMsgBoxCallback = NULL;
-       m.dwLanguageId       = MAKELANGID(LANG_ENGLISH,SUBLANG_ENGLISH_US);
-       m.lpszText           = buf;
-
-       MessageBoxIndirect (&m);
-    }
+       MessageBox (NULL,buf,_T("OpenSSL: FATAL"),MB_OK|MB_ICONSTOP);
 }
 #else
-void OPENSSL_showfatal (char *fmta,...)
+void OPENSSL_showfatal (const char *fmta,...)
 { va_list ap;
 
     va_start (ap,fmta);
     vfprintf (stderr,fmta,ap);
     va_end (ap);
 }
+int OPENSSL_isservice (void) { return 0; }
 #endif
 
 void OpenSSLDie(const char *file,int line,const char *assertion)
@@ -744,3 +754,5 @@ void OpenSSLDie(const char *file,int line,const char *assertion)
                file,line,assertion);
        abort();
        }
+
+void *OPENSSL_stderr(void)     { return stderr; }