高度な検索
Developer Connection
Member Login ログイン | ご入会 ADC連絡先

Technical Q&A QA1203
Using cmPathBased profile locations on Mac OS X


Q: ColorSync ルーチンを使ってプロファイルの作成と記述を行っています。Mac OS X 10.2 では、‘/’文字を含むファイル名を CMNewProfile に渡すと、さまざまなファイルシステムエラーが発生しますが、これらのエラーは、この同じコードを Mac OS X の以前のバージョンで(さらに言えば Mac OS 9 でも)実行した際には発生しなかったものです。

これらのエラーは、‘/’文字がファイル名の一部ではなくパス名の区切り記号として認識されたかのように、ファイル名が異なった解釈をされたことを示しているように思われます。何が起きているのでしょうか?

A: Mac OS X で cmPathBased プロファイル位置を使う場合、パスは完全な POSIX ベースのパスでなければなりません。パスが fopen 関数で問題なく使えるパスであれば、ColorSync でも使えるはずです。つまり:

1) パスは‘/’で始まる必要があります

2) ディレクトリは‘/’によって区切られます

3) 名前に‘/’が含まれる場合は、パスには代わりに‘:’を使う必要があります

‘:’文字を含む POSIX ファイル名は、Finder や Carbon API を使用した場合では、異なった記号に見えます。たとえば、POSIX ファイル「/Library/foo:bar」は、Finder や Carbon API では「:Library:foo/bar」というように表示されます。

4) High-ASCII 文字もしくは Unicode 文字を含む名前は、UTF8 エンコードする必要があります

たとえば、/Library/ColorSync/Profiles/ にプロファイルを保存する際に、アプリケーションがユーザに対し、使用するプロファイル名を要求する場合は、以下のようにするべきです:

1) ユーザから文字列を取得します

2) 現在のエンコードから UTF8 エンコードに変換します

3) ‘/’文字を‘:’に、また、‘:’を‘/’に変換します

4) 「/Library/ColorSync/Profiles/」に文字列を追加します

Mac OS 10.2 においてわずかに動作が変更された理由としては:

1) Mac OS 10.2 以前では、ColorSync は FSSpec ベースのファイル I/O を内部的に使用していました。パスペースの位置は、内部で FSSpec に変換されていました。

2) Mac OS 10.2 でパフォーマンスを多少改善する目的で、ColorSync は、POSIX ベースのファイル I/O を内部的に使用しています。また、FSSpec ベースの位置は、内部で POSIX のパスに変換されます。

おそらく、Mac OS 10.2 以前でのパスから FSSpec への変換は、少し寛大すぎだったのでしょう。

Mac OS 10.2 で有効なパスは、以前のリリースでも機能するはずです。


[2002 年 11 月 6 日]