diff options
author | Richard Levitte <levitte@openssl.org> | 2000-06-16 15:25:41 +0000 |
---|---|---|
committer | Richard Levitte <levitte@openssl.org> | 2000-06-16 15:25:41 +0000 |
commit | fb3e1eeb9364bc4d895cbdc5c048831cc7790c20 (patch) | |
tree | 9958f1c115ffe191653dfe3d5763833b60a758d2 /crypto/bio/bss_log.c | |
parent | f03aa651c0abafb8a4b7efebdc4017ce910f1513 (diff) | |
download | openssl-fb3e1eeb9364bc4d895cbdc5c048831cc7790c20.zip openssl-fb3e1eeb9364bc4d895cbdc5c048831cc7790c20.tar.gz openssl-fb3e1eeb9364bc4d895cbdc5c048831cc7790c20.tar.bz2 |
Change to have a single library that works on both Win9x and WinNT.
As far as I understand, it still needs to be compiled on NT...
Contributed by Arne Ansper <arne@ats.cyber.ee>
Diffstat (limited to 'crypto/bio/bss_log.c')
-rw-r--r-- | crypto/bio/bss_log.c | 42 |
1 files changed, 37 insertions, 5 deletions
diff --git a/crypto/bio/bss_log.c b/crypto/bio/bss_log.c index be2ad38..d5f905b 100644 --- a/crypto/bio/bss_log.c +++ b/crypto/bio/bss_log.c @@ -118,6 +118,18 @@ static int MS_CALLBACK slg_free(BIO *data); static void xopenlog(BIO* bp, const char* name, int level); static void xsyslog(BIO* bp, int priority, const char* string); static void xcloselog(BIO* bp); +#ifdef WIN32 +LONG (WINAPI *go_for_advapi)() = RegOpenKeyEx; +HANDLE (WINAPI *register_event_source)() = NULL; +BOOL (WINAPI *deregister_event_source)() = NULL; +BOOL (WINAPI *report_event)() = NULL; +#define DL_PROC(m,f) (GetProcAddress( m, f )) +#ifdef UNICODE +#define DL_PROC_X(m,f) DL_PROC( m, f "W" ) +#else +#define DL_PROC_X(m,f) DL_PROC( m, f "A" ) +#endif +#endif static BIO_METHOD methods_slg= { @@ -213,7 +225,27 @@ static int MS_CALLBACK slg_puts(BIO *bp, const char *str) static void xopenlog(BIO* bp, const char* name, int level) { - bp->ptr= (char *)RegisterEventSource(NULL, name); + if ( !register_event_source ) + { + HANDLE advapi; + if ( !(advapi = GetModuleHandle("advapi32")) ) + return; + register_event_source = (HANDLE (WINAPI *)())DL_PROC_X(advapi, + "RegisterEventSource" ); + deregister_event_source = (BOOL (WINAPI *)())DL_PROC(advapi, + "DeregisterEventSource"); + report_event = (BOOL (WINAPI *)())DL_PROC_X(advapi, + "ReportEvent" ); + if ( !(register_event_source && deregister_event_source && + report_event) ) + { + register_event_source = NULL; + deregister_event_source = NULL; + report_event = NULL; + return; + } + } + bp->ptr= (char *)register_event_source(NULL, name); } static void xsyslog(BIO *bp, int priority, const char *string) @@ -243,15 +275,15 @@ static void xsyslog(BIO *bp, int priority, const char *string) lpszStrings[0] = pidbuf; lpszStrings[1] = string; - if(bp->ptr) - ReportEvent(bp->ptr, evtype, 0, 1024, NULL, 2, 0, + if(report_event && bp->ptr) + report_event(bp->ptr, evtype, 0, 1024, NULL, 2, 0, lpszStrings, NULL); } static void xcloselog(BIO* bp) { - if(bp->ptr) - DeregisterEventSource((HANDLE)(bp->ptr)); + if(deregister_event_source && bp->ptr) + deregister_event_source((HANDLE)(bp->ptr)); bp->ptr= NULL; } |