#include <stdio.h>
#include <stdbool.h>
#include <mach-o/dyld.h>
#include <Availability.h>
#include "test.h" // PASS(), FAIL()
typedef bool (*CheckFunc)();
int main()
{
#if __MAC_OS_X_VERSION_MIN_REQUIRED
NSObjectFileImage ofi;
if ( NSCreateObjectFileImageFromFile("test.bundle", &ofi) != NSObjectFileImageSuccess ) {
FAIL("NSCreateObjectFileImageFromFile failed");
return 1;
}
NSModule modPriv = NSLinkModule(ofi, "test.bundle-private", NSLINKMODULE_OPTION_PRIVATE);
if ( modPriv == NULL ) {
FAIL("NSLinkModule failed");
return 1;
}
NSSymbol symPriv = NSLookupSymbolInModule(modPriv, "_findme");
if ( symPriv == NULL ) {
FAIL("NSLookupSymbolInModule failed");
return 1;
}
if ( NSIsSymbolNameDefined("_findme") ) {
FAIL("NSIsSymbolNameDefined (incorrectly) found symbol in private bundle");
return 1;
}
NSModule modPublic = NSLinkModule(ofi, "test.bundle-public", NSLINKMODULE_OPTION_NONE);
if ( modPublic == NULL ) {
FAIL("NSLinkModule failed");
return 1;
}
NSSymbol symPublic = NSLookupSymbolInModule(modPublic, "_findme");
if ( symPublic == NULL ) {
FAIL("NSLookupSymbolInModule failed");
return 1;
}
if ( !NSIsSymbolNameDefined("_findme") ) {
FAIL("NSIsSymbolNameDefined did not found symbol in public bundle");
return 1;
}
if ( !NSUnLinkModule(modPriv, NSUNLINKMODULE_OPTION_NONE) ) {
FAIL("NSUnLinkModule failed");
return 1;
}
if ( !NSUnLinkModule(modPublic, NSUNLINKMODULE_OPTION_NONE) ) {
FAIL("NSUnLinkModule failed");
return 1;
}
if ( NSIsSymbolNameDefined("_findme") ) {
FAIL("NSIsSymbolNameDefined found unlinked symbol in public bundle");
return 1;
}
if ( !NSDestroyObjectFileImage(ofi) ) {
FAIL("NSDestroyObjectFileImage failed");
return 1;
}
#endif
PASS("bundle-private");
return 0;
}