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 を間違って定義または呼び出しているに違いないと考えていますが、どこで失敗しているのか正確にはわかりません - アイデアですか?