diff options
author | trawick <trawick@13f79535-47bb-0310-9956-ffa450edef68> | 2001-04-02 19:33:12 +0000 |
---|---|---|
committer | trawick <trawick@13f79535-47bb-0310-9956-ffa450edef68> | 2001-04-02 19:33:12 +0000 |
commit | 585ee23501ee2b2afc292f730dd45952d844e8d7 (patch) | |
tree | b78c78993e8c988ab38b2c91e8a183df11141805 /dso | |
parent | 461206adcc156236f4437c9723b26480560441c4 (diff) | |
download | libapr-585ee23501ee2b2afc292f730dd45952d844e8d7.tar.gz |
This patch sets the dso/aix subdirectory to be used for older versions
of AIX and fixes a number of bugs the dso code in that directory.
Submitted by: Victor Orlikowski
Reviewed by: Jeff Trawick
(any build problems are my bad... I changed Victor's patch
to avoid the 'include "../unix/apr_private.h"' kludge but
am not able to easily test)
git-svn-id: http://svn.apache.org/repos/asf/apr/apr/trunk@61429 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'dso')
-rw-r--r-- | dso/aix/Makefile.in | 4 | ||||
-rw-r--r-- | dso/aix/dso.c | 23 |
2 files changed, 21 insertions, 6 deletions
diff --git a/dso/aix/Makefile.in b/dso/aix/Makefile.in index 1fed55114..fe018d7d4 100644 --- a/dso/aix/Makefile.in +++ b/dso/aix/Makefile.in @@ -5,6 +5,8 @@ TARGETS = dso.lo @INCLUDE_RULES@ INCDIR=../../include -INCLUDES=-I$(INCDIR) -I$(INCDIR)/arch +OSDIR=$(INCDIR)/arch/@OSDIR@ +DEFOSDIR=$(INCDIR)/arch/@DEFAULT_OSDIR@ +INCLUDES=-I$(INCDIR) -I$(OSDIR) -I$(DEFOSDIR) # DO NOT REMOVE diff --git a/dso/aix/dso.c b/dso/aix/dso.c index 4ceb9415c..1ddd42d0c 100644 --- a/dso/aix/dso.c +++ b/dso/aix/dso.c @@ -148,8 +148,10 @@ APR_DECLARE(apr_status_t) apr_dso_load(apr_dso_handle_t **res_handle, { void *os_handle = dlopen((char *)path, RTLD_NOW | RTLD_GLOBAL); - if(os_handle == NULL) + if(os_handle == NULL) { + (*res_handle)->errormsg = dlerror(); return APR_EDSOOPEN; + } *res_handle = apr_pcalloc(ctx, sizeof(*res_handle)); (*res_handle)->handle = (void*)os_handle; @@ -171,13 +173,24 @@ APR_DECLARE(apr_status_t) apr_dso_sym(apr_dso_handle_sym_t *ressym, { void *retval = dlsym(handle->handle, symname); - if (retval == NULL) + if (retval == NULL) { + handle->errormsg = dlerror(); return APR_EINIT; - - ressym = retval; + } + + *ressym = retval; return APR_SUCCESS; } +APR_DECLARE(const char *) apr_dso_error(apr_dso_handle_t *dso, char *buffer, apr_size_t buflen) +{ + if (dso->errormsg) { + apr_cpystrn(buffer, dso->errormsg, buflen); + return dso->errormsg; + } + return "No Error"; +} + /* @@ -282,7 +295,7 @@ void *dlopen(const char *path, int mode) * load should be declared load(const char *...). Thus we * cast the path to a normal char *. Ugly. */ - if ((mp->entry = (void *) load((char *) path, L_NOAUTODEFER, NULL)) == NULL) { + if ((mp->entry = (void *) loadAndInit((char *) path, L_NOAUTODEFER, NULL)) == NULL) { free(mp->name); free(mp); errvalid++; |