You are viewing a plain text version of this content. The canonical link for it is here.
Posted to cvs@httpd.apache.org by bj...@locus.apache.org on 2000/04/04 14:19:32 UTC
cvs commit: apache-2.0/src/lib/apr/dso/os2 dso.c dso.h
bjh 00/04/04 05:19:32
Modified: src/lib/apr/dso/os2 dso.c dso.h
Log:
Improve error checking in OS/2 DSO code & add a cleanup function.
Revision Changes Path
1.4 +39 -13 apache-2.0/src/lib/apr/dso/os2/dso.c
Index: dso.c
===================================================================
RCS file: /home/cvs/apache-2.0/src/lib/apr/dso/os2/dso.c,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -r1.3 -r1.4
--- dso.c 2000/03/31 08:35:45 1.3
+++ dso.c 2000/04/04 12:19:32 1.4
@@ -58,35 +58,61 @@
#include <stdio.h>
#include <string.h>
-ap_status_t ap_dso_init(void){
+ap_status_t ap_dso_init()
+{
return APR_SUCCESS;
}
+
-ap_status_t ap_dso_load(const char *path, ap_context_t *ctx,
- ap_dso_handle_t **res_handle)
+static ap_status_t dso_cleanup(void *thedso)
{
- char somebuf[1024];
+ ap_dso_handle_t *dso = thedso;
+ return ap_dso_unload(dso);
+}
+
+
+ap_status_t ap_dso_load(ap_dso_handle_t **res_handle, const char *path, ap_context_t *ctx)
+{
+ char failed_module[1024];
HMODULE handle;
int rc;
- if ((rc = DosLoadModule(somebuf, sizeof(somebuf), path, &handle)) != 0)
- return APR_EINIT;
-
*res_handle = ap_pcalloc(ctx, sizeof(*res_handle));
+
+ if ((rc = DosLoadModule(failed_module, sizeof(failed_module), path, &handle)) != 0) {
+ (*res_handle)->failed_module = ap_pstrdup(ctx, failed_module);
+ return os2errno(rc);
+ }
+
(*res_handle)->handle = handle;
(*res_handle)->cont = ctx;
+ (*res_handle)->failed_module = NULL;
+ ap_register_cleanup(ctx, *res_handle, dso_cleanup, ap_null_cleanup);
return APR_SUCCESS;
}
+
ap_status_t ap_dso_unload(ap_dso_handle_t *handle)
{
- DosFreeModule(handle->handle);
- return APR_SUCCESS;
+ int rc;
+
+ if (handle->handle == 0)
+ return APR_SUCCESS;
+
+ rc = DosFreeModule(handle->handle);
+
+ if (rc == 0)
+ handle->handle = 0;
+
+ return os2errno(rc);
}
+
-ap_status_t ap_dso_sym(ap_dso_handle_t *handle, const char *symname,
- ap_dso_handle_sym_t *ressym)
+
+ap_status_t ap_dso_sym(ap_dso_handle_sym_t *ressym,
+ ap_dso_handle_t *handle,
+ const char *symname)
{
PFN func;
int rc;
@@ -94,8 +120,8 @@
if (symname == NULL || ressym == NULL)
return APR_EINIT;
- if((rc = DosQueryProcAddr(handle->handle, 0, symname, &func)) != 0)
- return APR_EINIT;
+ if ((rc = DosQueryProcAddr(handle->handle, 0, symname, &func)) != 0)
+ return APR_EINIT;
*ressym = func;
return APR_SUCCESS;
1.6 +2 -1 apache-2.0/src/lib/apr/dso/os2/dso.h
Index: dso.h
===================================================================
RCS file: /home/cvs/apache-2.0/src/lib/apr/dso/os2/dso.h,v
retrieving revision 1.5
retrieving revision 1.6
diff -u -r1.5 -r1.6
--- dso.h 2000/04/03 18:36:54 1.5
+++ dso.h 2000/04/04 12:19:32 1.6
@@ -64,8 +64,9 @@
#include "apr_dso.h"
struct ap_dso_handle_t {
- HMODULE handle; /* Handle to the DSO loaded */
ap_context_t *cont; /* Context for returning error strings */
+ HMODULE handle; /* Handle to the DSO loaded */
+ char *failed_module;
};
#endif