[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Dotgnu-pnet-commits] CVS: pnet/support dynlib.c,1.7,1.8
From: |
Rhys Weatherley <address@hidden> |
Subject: |
[Dotgnu-pnet-commits] CVS: pnet/support dynlib.c,1.7,1.8 |
Date: |
Sat, 14 Jun 2003 23:53:38 -0400 |
Update of /cvsroot/dotgnu-pnet/pnet/support
In directory subversions:/tmp/cvs-serv3608/support
Modified Files:
dynlib.c
Log Message:
Try using NSAddImage to load dynamic libraries on MacOS X if
NSCreateObjectFileImageFromFile fails; use a different symbol lookup
mechanism if it is an image; improved error reporting when something
goes wrong.
Index: dynlib.c
===================================================================
RCS file: /cvsroot/dotgnu-pnet/pnet/support/dynlib.c,v
retrieving revision 1.7
retrieving revision 1.8
diff -C2 -r1.7 -r1.8
*** dynlib.c 14 Jun 2003 04:46:32 -0000 1.7
--- dynlib.c 15 Jun 2003 03:53:36 -0000 1.8
***************
*** 156,164 ****
NSObjectFileImageReturnCode result;
NSModule module;
/* Attempt to open the dylib file */
result = NSCreateObjectFileImageFromFile(name, &file);
! if (result != NSObjectFileImageSuccess)
{
return 0;
}
--- 156,191 ----
NSObjectFileImageReturnCode result;
NSModule module;
+ void *image;
+ const char *msg;
/* Attempt to open the dylib file */
result = NSCreateObjectFileImageFromFile(name, &file);
! if(result == NSObjectFileImageInappropriateFile)
{
+ /* May be an image, and not a bundle */
+ image = (void *)NSAddImage(name,
NSADDIMAGE_OPTION_RETURN_ON_ERROR);
+ if(image)
+ {
+ return image;
+ }
+ }
+ if(result != NSObjectFileImageSuccess)
+ {
+ switch(result)
+ {
+ case NSObjectFileImageFailure:
+ msg = " (NSObjectFileImageFailure)"; break;
+ case NSObjectFileImageInappropriateFile:
+ msg = " (NSObjectFileImageInappropriateFile)";
break;
+ case NSObjectFileImageArch:
+ msg = " (NSObjectFileImageArch)"; break;
+ case NSObjectFileImageFormat:
+ msg = " (NSObjectFileImageFormat)"; break;
+ case NSObjectFileImageAccess:
+ msg = " (NSObjectFileImageAccess)"; break;
+ default:
+ msg = ""; break;
+ }
+ fprintf(stderr, "%s: could not load dynamic library%s\n", name,
msg);
return 0;
}
***************
*** 174,177 ****
--- 201,210 ----
void ILDynLibraryClose(void *handle)
{
+ if((((struct mach_header *)handle)->magic == MH_MAGIC) ||
+ (((struct mach_header *)handle)->magic == MH_CIGAM))
+ {
+ /* Cannot remove dynamic images once they've been loaded */
+ return;
+ }
NSUnLinkModule((NSModule)handle, NSUNLINKMODULE_OPTION_NONE);
}
***************
*** 180,188 ****
{
NSSymbol sym;
! sym = NSLookupSymbolInModule((NSModule)handle, symbol);
if(sym == 0)
{
return 0;
}
return (void *)NSAddressOfSymbol(sym);
}
--- 213,244 ----
{
NSSymbol sym;
!
! /* We have to use a different lookup approach for images and modules */
! if((((struct mach_header *)handle)->magic == MH_MAGIC) ||
! (((struct mach_header *)handle)->magic == MH_CIGAM))
! {
! if(NSIsSymbolNameDefinedInImage((struct mach_header *)handle,
symbol))
! {
! sym = NSLookupSymbolInImage((struct mach_header
*)handle, symbol,
!
NSLOOKUPSYMBOLINIMAGE_OPTION_BIND |
!
NSLOOKUPSYMBOLINIMAGE_OPTION_RETURN_ON_ERROR);
! }
! else
! {
! sym = 0;
! }
! }
! else
! {
! sym = NSLookupSymbolInModule((NSModule)handle, symbol);
! }
!
! /* Did we find the symbol? */
if(sym == 0)
{
return 0;
}
+
+ /* Convert the symbol into the address that we require */
return (void *)NSAddressOfSymbol(sym);
}
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [Dotgnu-pnet-commits] CVS: pnet/support dynlib.c,1.7,1.8,
Rhys Weatherley <address@hidden> <=