BSD層にあるextended attribute APIとCarbon/Cocoa層のSpotlight APIの関係

http://arstechnica.com/reviews/os/macosx-10.4.ars/6
ここにあるサンプルを使ってみたけど、どうもFinderでコメントを設定した後にファイルにアクセスすると、bus errorになる。なにもコメントがない状態で実行すれば問題ない。gdbでさくっと確認してみたところ、見慣れない属性をハンドリングしようとしていて落ちている。BSDAPIのgetxattrを使った場合は、MDItemといったCarbon層のMetadata APIとはゼンゼン違った見え方をするようだ。BSD層のAPI的には、SpotlightのAttribute(今回取得したいkMDItemFinderCommentとか)は全く見えない。 その代わり"com.apple.FinderInfo"というキー値のバイナリデータが見える。また、BSD層のAPIで何らかの適当な拡張属性を追加しても、mdlsで確認できるSpotlightの属性としては見えない。どうも、MDItemのレイヤでは、ファイルのカタログにある情報(ファイルサイズや更新日付)、ファイル本体の索引、拡張属性(getxattr/setxattrでアクセスできる)の3種類を統合してアクセス出来るようになっていて、下部のデータ構造をさらに一段階抽象化しているようだ。従って、Spotlightの属性群は、BSD層のAPIでアクセスすることが全く出来ないというわけではないだろうが、かなり難しそうだしやるべきではなさそうだ。ザンネン。

やっぱりAppleEventsなのかー。あー。