cryptlib.c: allow application to override OPENSSL_isservice.
authorAndy Polyakov <appro@openssl.org>
Mon, 29 Mar 2010 10:06:01 +0000 (10:06 +0000)
committerAndy Polyakov <appro@openssl.org>
Mon, 29 Mar 2010 10:06:01 +0000 (10:06 +0000)
PR: 2194

crypto/cryptlib.c

index 62bc495..af1dbfb 100644 (file)
@@ -762,6 +762,18 @@ int OPENSSL_isservice(void)
 { HWINSTA h;
   DWORD len;
   WCHAR *name;
+  static union { void *p; int (*f)(void); } _OPENSSL_isservice = { NULL };
+
+    if (_OPENSSL_isservice.p == NULL) {
+       HANDLE h = GetModuleHandle(NULL);
+       if (h != NULL)
+           _OPENSSL_isservice.p = GetProcAddress(h,"_OPENSSL_isservice");
+       if (_OPENSSL_isservice.p == NULL)
+           _OPENSSL_isservice.p = (void *)-1;
+    }
+
+    if (_OPENSSL_isservice.p != (void *)-1)
+       return (*_OPENSSL_isservice.f)();
 
     (void)GetDesktopWindow(); /* return value is ignored */