[netatalk-ja:0106] Re: 3.0.2でPhotoshop CS5で濁音のファイルがセーブできない
HAT
hat @ fa2.so-net.ne.jp
2013年 3月 27日 (水) 23:39:59 JST
HATです。
[Global]
log level = default:maxdebug
の場合のログを見せてください。 > 久保さん, kyoさん
> ad_pathの部分は多分、/hoge/fuga.txtというファイルがあったら
> /hoge/._fuga.txtというファイル名を生成する関数のようです(ad_open.c:ad_path_osx)
>
> つまりファイル名が
> ・/hoge/fuga.txtだったら、
> ・/hoge/._fuga.txt
> を削除する(unlink)という挙動のように思われます。
>
> ここで疑問なのですが
> ._fuga.txtってファイルがなぜ無いんでしょうね?
>
> そもそも作成されていないのか、2回削除しているのかな..
該当部分がなぜ呼び出されるのか、._fuga.txtがなぜないのか、
そもそも._fuga.txtがあってもなくてもよいのではないか、
などなど、疑問は色々あります。
これを解決するには、該当部分が呼び出された経緯を知る必要があります。
たぶん、Photoshop CS4やCS6では該当部分が呼び出されないんでしょう。
> CS5があれば試せるんですが、CS5がなくても試す良い方法はないものか...
手元にPhotoshop CS5があればデバッグ法はいくらでもありますが、
ない状態で観察するには、
log level = default:maxdebug
のログを辿って、経緯を探るべきと考えます。
> ad_write.c
>
> 159 /* ------------------------ */
> 160 int ad_rtruncate( struct adouble *ad, const off_t size)
> 161 {
> 162 EC_INIT;
> 163
> 164 #ifndef HAVE_EAFD
> 165 if (ad->ad_vers == AD_VERSION_EA && size == 0)
> 166 EC_NEG1( unlink(ad->ad_ops->ad_path(ad->ad_name, 0)) );
> 167 else
> 168 #endif
> 169 EC_NEG1( sys_ftruncate(ad_reso_fileno(ad), size +
> ad->ad_eid[ ADEID_ RFORK ].ade_off) );
> 170
> 171 EC_CLEANUP:
> 172 if (ret == 0)
> 173 ad->ad_rlen = size;
> 174 else
> 175 LOG(log_error, logtype_ad, "ad_rtruncate(\"%s\"): %s",
> 176 fullpathname(ad->ad_name), strerror(errno));
> 177 EC_EXIT;
> 178 }
既に観察したログによれば、ad->ad_nameはNFKDで保存されています。
この構造体はAppleDoubleデータを生成するためのものですから、Appleの流儀に
従い、NFKDで保存するのは当たり前と考えます。
このNKFDのまま、ファイルシステム上に探しにいった結果、
「そんなファイルはない」
と怒られているように思えます。
どこかの段階でad->ad_nameをUTF8-MACからvol charsetに変換する必要が
あるのだと思います。
--
HAT
netatalk-ja メーリングリストの案内