[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 メーリングリストの案内