summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorcls%seawood.org <devnull@localhost>1999-08-20 16:21:35 +0000
committercls%seawood.org <devnull@localhost>1999-08-20 16:21:35 +0000
commitb23a755d6f222b3163b98cfc324a05e9fe466a99 (patch)
treeb8f41661dc0dc19d34c29c34d5f1525c267e8c3e
parentd0bb44932a7d6310b04bb759a6fcc1308ce4520d (diff)
downloadnspr-hg-unlabeled-3.24.24.tar.gz
Merged with HEAD from 8/18 or so.unlabeled-3.24.24
-rw-r--r--pr/src/linking/prlink.c49
1 files changed, 30 insertions, 19 deletions
diff --git a/pr/src/linking/prlink.c b/pr/src/linking/prlink.c
index 78d84486..0592c05c 100644
--- a/pr/src/linking/prlink.c
+++ b/pr/src/linking/prlink.c
@@ -638,25 +638,6 @@ PR_LoadLibrary(const char *name)
}
#endif
-#ifdef XP_BEOS
- {
- image_id h = load_add_on( name );
-
- if( h == B_ERROR || h <= 0 ) {
-
- h = 0;
- result = NULL;
- PR_DELETE( lm );
- lm = NULL;
- goto unlock;
- }
- lm->name = strdup(name);
- lm->dlh = (void*)h;
- lm->next = pr_loadmap;
- pr_loadmap = lm;
- }
-#endif
-
#ifdef XP_UNIX
#ifdef HAVE_DLL
{
@@ -687,6 +668,36 @@ PR_LoadLibrary(const char *name)
#endif /* XP_UNIX */
lm->refCount = 1;
+
+#ifdef XP_BEOS
+ {
+ image_info info;
+ int32 cookie = 0;
+ image_id h = B_ERROR;
+
+ while(get_next_image_info(0, &cookie, &info) == B_OK)
+ if(strcmp(name, info.name + strlen(info.name) - strlen(name)) == 0) {
+ h = info.id;
+ lm->refCount++; /* it has been already loaded implcitly, so pretend it already had a control structure and ref */
+ }
+
+ if(h == B_ERROR)
+ h = load_add_on( name );
+
+ if( h == B_ERROR || h <= 0 ) {
+ h = 0;
+ result = NULL;
+ PR_DELETE( lm );
+ lm = NULL;
+ goto unlock;
+ }
+ lm->name = strdup(name);
+ lm->dlh = (void*)h;
+ lm->next = pr_loadmap;
+ pr_loadmap = lm;
+ }
+#endif
+
result = lm; /* success */
PR_LOG(_pr_linker_lm, PR_LOG_MIN, ("Loaded library %s (load lib)", lm->name));