diff options
author | wtc%netscape.com <devnull@localhost> | 2003-02-25 15:41:01 +0000 |
---|---|---|
committer | wtc%netscape.com <devnull@localhost> | 2003-02-25 15:41:01 +0000 |
commit | a8d6ec6761ff28903a6bc5aae1d827c519a1a115 (patch) | |
tree | 4d96362e22f30fba46588552cdfa498f3e652efa | |
parent | c121006d96216530fbd283092e1325e1c61d4b39 (diff) | |
download | nspr-hg-a8d6ec6761ff28903a6bc5aae1d827c519a1a115.tar.gz |
Bug 191823: implement the PR_GetLibraryFilePathname function for OS/2. The
patch is contributed by Julien Pierre <jpierre@netscape.com>.
NSPRPUB_PRE_4_2_CLIENT_BRANCH
-rw-r--r-- | pr/src/linking/prlink.c | 21 |
1 files changed, 21 insertions, 0 deletions
diff --git a/pr/src/linking/prlink.c b/pr/src/linking/prlink.c index 6b9f94a4..ec59bc78 100644 --- a/pr/src/linking/prlink.c +++ b/pr/src/linking/prlink.c @@ -1809,6 +1809,27 @@ PR_GetLibraryFilePathname(const char *name, PRFuncPtr addr) strcpy(result, module_name); } return result; +#elif defined(XP_OS2) + HMODULE module = NULL; + char module_name[_MAX_PATH]; + char *result; + APIRET ulrc = DosQueryModFromEIP(&module, NULL, 0, NULL, NULL, (ULONG) addr); + if ((NO_ERROR != ulrc) || (NULL == module) ) { + PR_SetError(PR_LIBRARY_NOT_LOADED_ERROR, _MD_ERRNO()); + DLLErrorInternal(_MD_ERRNO()); + return NULL; + } + ulrc = DosQueryModuleName(module, sizeof module_name, module_name); + if (NO_ERROR != ulrc) { + /* should not happen */ + _PR_MD_MAP_DEFAULT_ERROR(_MD_ERRNO()); + return NULL; + } + result = PR_Malloc(strlen(module_name)+1); + if (result != NULL) { + strcpy(result, module_name); + } + return result; #else PR_SetError(PR_NOT_IMPLEMENTED_ERROR, 0); return NULL; |