diff options
author | William A. Rowe Jr <wrowe@apache.org> | 2000-10-08 08:00:26 +0200 |
---|---|---|
committer | William A. Rowe Jr <wrowe@apache.org> | 2000-10-08 08:00:26 +0200 |
commit | 9dcd313a9f713f580a6429c77de5bac8c031b447 (patch) | |
tree | 171b7d1e3cfa4075e074b3991554e2ce474f220d /os | |
parent | Make mod_log_config compile cleanly when using BUFFERED_LOGS (diff) | |
download | apache2-9dcd313a9f713f580a6429c77de5bac8c031b447.tar.xz apache2-9dcd313a9f713f580a6429c77de5bac8c031b447.zip |
Movin on over from 1.3.13-dev : this patch fixes the problem of nasty
popup windows alerting an Admin that the isapi isn't working, and
simplifies mod_isapi by relying on dso.
git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/trunk@86447 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'os')
-rw-r--r-- | os/win32/mod_isapi.c | 53 |
1 files changed, 18 insertions, 35 deletions
diff --git a/os/win32/mod_isapi.c b/os/win32/mod_isapi.c index 3d02d9ee2e..3fb21ecaa2 100644 --- a/os/win32/mod_isapi.c +++ b/os/win32/mod_isapi.c @@ -136,7 +136,7 @@ typedef struct { typedef struct { const char *filename; - HINSTANCE handle; + apr_dso_handle_t *handle; HSE_VERSION_INFO *pVer; PFN_GETEXTENSIONVERSION GetExtensionVersion; PFN_HTTPEXTENSIONPROC HttpExtensionProc; @@ -225,8 +225,7 @@ static apr_status_t isapi_load(apr_pool_t *p, isapi_server_conf *sconf, isapi_loaded** isa) { isapi_loaded **found = (isapi_loaded **)sconf->loaded->elts; - char *fspec; - char *ch; + apr_status_t rv; int n; for (n = 0; n < sconf->loaded->nelts; ++n) { @@ -261,59 +260,43 @@ static apr_status_t isapi_load(apr_pool_t *p, isapi_server_conf *sconf, (*isa)->fakeasync = TRUE; (*isa)->reportversion = MAKELONG(0, 5); /* Revision 5.0 */ } - - /* Per PR2555, the LoadLibraryEx function is very picky about slashes. - * Debugging on NT 4 SP 6a reveals First Chance Exception within NTDLL. - * LoadLibrary in the MS PSDK also reveals that it -explicitly- states - * that backslashes must be used. - * - * Transpose '\' for '/' in the filename. - */ - ch = fspec = apr_pstrdup(p, fpath); - while (*ch) { - if (*ch == '/') - *ch = '\\'; - ++ch; - } - - (*isa)->handle = LoadLibraryEx(fspec, NULL, LOAD_WITH_ALTERED_SEARCH_PATH); - - if (!(*isa)->handle) + + rv = apr_dso_load(&(*isa)->handle, fpath, p); + if (rv) { - apr_status_t rv = apr_get_os_error(); - ap_log_rerror(APLOG_MARK, APLOG_ALERT, apr_get_os_error(), r, + ap_log_rerror(APLOG_MARK, APLOG_ALERT, rv, r, "ISAPI %s failed to load", fpath); (*isa)->handle = NULL; return rv; } - if (!((*isa)->GetExtensionVersion = (void *)(GetProcAddress((*isa)->handle, - "GetExtensionVersion")))) + rv = apr_dso_sym((void**)&(*isa)->GetExtensionVersion, (*isa)->handle, + "GetExtensionVersion"); + if (rv) { - apr_status_t rv = apr_get_os_error(); ap_log_rerror(APLOG_MARK, APLOG_ALERT, rv, r, "ISAPI %s is missing GetExtensionVersion()", fpath); - FreeLibrary((*isa)->handle); + apr_dso_unload((*isa)->handle); (*isa)->handle = NULL; return rv; } - if (!((*isa)->HttpExtensionProc = (void *)(GetProcAddress((*isa)->handle, - "HttpExtensionProc")))) + rv = apr_dso_sym((void**)&(*isa)->HttpExtensionProc, (*isa)->handle, + "HttpExtensionProc"); + if (rv) { - apr_status_t rv = apr_get_os_error(); ap_log_rerror(APLOG_MARK, APLOG_ALERT, rv, r, "ISAPI %s is missing HttpExtensionProc()", fpath); - FreeLibrary((*isa)->handle); + apr_dso_unload((*isa)->handle); (*isa)->handle = NULL; return rv; } /* TerminateExtension() is an optional interface */ - (*isa)->TerminateExtension = (void *)(GetProcAddress((*isa)->handle, - "TerminateExtension")); + rv = apr_dso_sym((void**)&(*isa)->TerminateExtension, (*isa)->handle, + "TerminateExtension"); SetLastError(0); /* Run GetExtensionVersion() */ @@ -322,7 +305,7 @@ static apr_status_t isapi_load(apr_pool_t *p, isapi_server_conf *sconf, ap_log_rerror(APLOG_MARK, APLOG_ALERT, rv, r, "ISAPI %s call GetExtensionVersion() failed", fpath); - FreeLibrary((*isa)->handle); + apr_dso_unload((*isa)->handle); (*isa)->handle = NULL; return rv; } @@ -347,7 +330,7 @@ static int isapi_unload(isapi_loaded* isa, int force) else if (!(*isa->TerminateExtension)(HSE_TERM_ADVISORY_UNLOAD)) return FALSE; } - FreeLibrary(isa->handle); + apr_dso_unload(isa->handle); isa->handle = NULL; return TRUE; } |