2010-04-11

netatalkからシンボリックリンクが見えん

netatalk-2.1beta2/libatalk/adouble/ad_open.c lines 1295 あたり。

シンボリックリンクを O_NOFOLLOW でopenしたとき、ELOOPが返る事を期待してるようだが、FreeBSDではEMLINKが返るのだ。

なので、そう書き換えて再インストールしたらシンボリックリンクもちゃんと読めるようになった。

CVSの最新では直ってるのかね。


追記:
どこをどう変えたのか具体的な手順を。
netatalk-2.1beta2/libatalk/adouble/ad_open.c の 1295 行目で、元のコードはELOOPでのみ判定してるところを以下のようにEMLINKでもifの条件に落ちるようにしてやる。

if (ad->ad_data_fork.adf_fd == -1 && (errno == ELOOP || errno == EMLINK)) {

一行書き換えるだけ。


追記:4月29日
netatalk2.1がリリースされましたね。βが取れてます。

Xcodeのプロジェクト置き場のフォルダとしてnetatalkの共有フォルダを指定してみましたが、問題なくビルドと実行ができています。
すばらしい!

5 件のコメント:

HAT さんのコメント...

そういう報告は今のところありません。
おそらくこれが世界初の報告です。
そのパッチをこのページに貼付けておいてもらえませんか。
私がMLでここのURLを報告すれば、修正されるでしょう。

HAT さんのコメント...

MLにて報告済です。

ObiWan Kooga さんのコメント...

ありがとうございます。きっとたくさんのMacユーザが喜びます。
報告いただいたとの事でもう解決しているかもしれませんが、僕のやった手順は以下のとおりです。

オリジナルを残してないのでdiff取るのがめんどいので、手で説明しますと ad_open.c lines 1295 をですね、

if (ad->ad_data_fork.adf_fd == -1 && (errno == ELOOP || errno == EMLINK)) {

これで、FreeBSD 6.2 GENERIC ではきちんと動作するようになりました。元のコードはELOOPでのみ判定してましたが、そういうOS実装もあるだろうと思って残してあります。

ObiWan Kooga さんのコメント...

って、コメントに書いても検索にかからず意味がないと思いブログ本文にも情報を追記しました。

HAT さんのコメント...

NetBSDは更に異なるerrnoを返すことが報告され、NetBSD, FreeBSDの両方に対応するような変更が行われました。
最新のCVSを試してみてください。