我正在尝试使用DYLD_INSERT_LIBRARIES覆盖OS X Lion 10.7下的FSGetCatalogInfo函数,并且一切正常,直到我实际调用原始FSGetCatalogInfo函数,此时我得到“总线错误:10”
我的代码段是:
OSErr (*original_FSGetCatalogInfo) (const FSRef *,FSCatalogInfoBitmap,FSCatalogInfo *,HFSUniStr255 *,FSSpecPtr,FSRef *) = NULL;
OSErr FSGetCatalogInfo (const FSRef *ref,FSCatalogInfoBitmap whichInfo,FSCatalogInfo *catalogInfo,HFSUniStr255 *outName,FSSpecPtr fsSpec,FSRef *parentRef)
{
if(!original_FSGetCatalogInfo) {
printf("== FSGetCatalogInfo - creating shim link ==\n");
original_FSGetCatalogInfo = dlsym(RTLD_NEXT, "FSGetCatalogInfo");
printf("== FSGetCatalogInfo - created shim link ==\n");
}
printf("== FSGetCatalogInfo - calling original function ==\n");
OSErr oserr = original_FSGetCatalogInfo(ref,whichInfo,catalogInfo,outName,fsSpec,parentRef);
printf("== FSGetCatalogInfo - called original function ==\n");
return oserr;
}
我在想我必须要么定义或调用原来的FSGetCatalogInfo错误,但我无法确切地知道我搞砸了什么 - 想法?