Move _WIN32_WINNT definition from command line to e_os.h. The change is

inspired by VC6 failure report. In addition abstain from taking screen
snapshots when running in NT service context.
This commit is contained in:
Andy Polyakov 2005-05-21 13:19:27 +00:00
parent bbbd67108f
commit e476f94212
5 changed files with 24 additions and 4 deletions

View file

@ -624,7 +624,7 @@ BOOL WINAPI DllMain(HINSTANCE hinstDLL, DWORD fdwReason,
#include <tchar.h>
#if defined(_WIN32_WINNT) && _WIN32_WINNT>=0x0333
static int IsService(void)
int OPENSSL_isservice(void)
{ HWINSTA h;
DWORD len;
WCHAR *name;
@ -722,7 +722,7 @@ void OPENSSL_showfatal (const 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);
@ -754,6 +754,7 @@ void OPENSSL_showfatal (const char *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)

View file

@ -103,6 +103,7 @@ extern unsigned long OPENSSL_ia32cap_P;
void OPENSSL_showfatal(const char *,...);
void *OPENSSL_stderr(void);
extern int OPENSSL_NONPIC_relocated;
int OPENSSL_isservice(void);
#ifdef __cplusplus
}

View file

@ -632,6 +632,7 @@ int RAND_event(UINT iMsg, WPARAM wParam, LPARAM lParam)
void RAND_screen(void) /* function available for backward compatibility */
{
RAND_poll();
if (GetVersion() >= 0x80000000 || !OPENSSL_isservice())
readscreen();
}

17
e_os.h
View file

@ -235,6 +235,23 @@ extern "C" {
# define NO_DIRENT
# ifdef WINDOWS
# ifndef _WIN32_WINNT
/*
* Defining _WIN32_WINNT here in e_os.h implies certain "discipline."
* Most notably we ought to check for availability of each specific
* routine with GetProcAddress() and/or quard NT-specific calls with
* GetVersion() < 0x80000000. One can argue that in latter "or" case
* we ought to /DELAYLOAD some .DLLs in order to protect ourselves
* against run-time link errors. This doesn't seem to be necessary,
* because it turned out that already Windows 95, first non-NT Win32
* implementation, is equipped with at least NT 3.51 stubs, dummy
* routines with same name, but which do nothing. Meaning that it's
* apparently appropriate to guard generic NT calls with GetVersion
* alone, while NT 4.0 and above calls ought to be additionally
* checked upon with GetProcAddress.
*/
# define _WIN32_WINNT 0x0400
# endif
# include <windows.h>
# include <stddef.h>
# include <errno.h>

View file

@ -11,7 +11,7 @@ $rm='del';
# C compiler stuff
$cc='cl';
$cflags=' /MD /W3 /WX /G5 /Ox /O2 /Ob2 /Gs0 /GF /Gy /nologo -DOPENSSL_SYSNAME_WIN32 -DWIN32_LEAN_AND_MEAN -D_WIN32_WINNT=0x0333 -DL_ENDIAN -DDSO_WIN32';
$cflags=' /MD /W3 /WX /G5 /Ox /O2 /Ob2 /Gs0 /GF /Gy /nologo -DOPENSSL_SYSNAME_WIN32 -DWIN32_LEAN_AND_MEAN -DL_ENDIAN -DDSO_WIN32';
$lflags="/nologo /subsystem:console /machine:I386 /opt:ref";
$mlflags='';