[netatalk-ja:0031] Re: Compile error in netatalk 3.0.2 making on debian 4 (etch)

Masaya TONOKAWA tonop55 @ gmail.com
2013年 3月 15日 (金) 02:34:20 JST


tonopです。

ご提示のパッチを当ててmakeしました。
make でき、インストールも出来ました。
現時点で問題を発見しません。正常に動作しているようです。

以上、よろしくお願い致します。

(2013/03/13 19:17), HAT wrote:
> HATです。
>
>> netatalk 3.0.1, 3.0.2がリリースされていたのでHDL2-G2.0にインストールしま
>> した。このNASはDebian 4 (etch)環境で稼働しています。
>>
>> configure optionは以下のとおり。
>> ./configure --with-init-style=debian --with-bdb=/usr/local/Berkeley-5.3.21
>>
>> configure option等、インストール手順はこれまでと同様です。
>>
>> 3.0.1は、無事インストール出来ました。
>>
>> 3.0.2は、make中に以下のエラーが発生。
>>
>>     make[3]: ディレクトリ
>> `/mnt/sataraid1/root/work/netatalk-3.0.2/etc/afpd' に入ります
>>     CC afpd-filedir.o
>>     filedir.c: In function ‘moveandrename’:
>>     filedir.c:266: warning: passing argument 1 of ‘of_findname’ from
>> incompatible pointer type
>>     filedir.c:266: error: too few arguments to function ‘of_findname’
>>     make[3]: *** [afpd-filedir.o] エラー 1
>>     make[3]: ディレクトリ
>> `/mnt/sataraid1/root/work/netatalk-3.0.2/etc/afpd' から出ます
> netatalk-3.0.2/etc/afpd/filedir.cの266行目周辺のソースはこれ。
>
> 263 #ifdef HAVE_ATFUNCS
> 264         opened = of_findnameat(sdir_fd, &path);
> 265 #else
> 266         opened = of_findname(&path);
> 267 #endif /* HAVE_ATFUNCS */
>
> HAVE_ATFUNCSが定義されていないときだけ、266行目のof_findname()が
> 呼び出される。
>
> 次にHAVE_ATFUNCSが定義される条件を調べる。configure.acをみてみると...
>
> ac_neta_haveatfuncs=yes
> AC_CHECK_FUNCS(openat renameat fstatat unlinkat, , ac_neta_haveatfuncs=no)
> if test x"$ac_neta_haveatfuncs" = x"yes" ; then
>    AC_DEFINE([_ATFILE_SOURCE], 1, AT file source)
>    AC_DEFINE([HAVE_ATFUNCS], 1, whether at funcs are available)
> fi
>
> openat() renameat() fstatat() unlinkat()といった関数の存在を調べて、
> 存在すればHAVE_ATFUNCを定義する。
>
>> VMware Fusionで稼働しているdebian 4(etch)でも同様のエラー発生。
>> VMware Fusionで稼働しているdebian 6(squeeze)では無事インストール完了。
> 取り敢えずFedora 18のmanでopenat()を調べてみる。
>
> バージョン
>     openat()   は  Linux  カーネル 2.6.16 で追加された。 ライブラリによるサ
>     ポートは glibc バージョン 2.4 で追加された。
>
> 準拠
>     POSIX.1-2008.  Solaris には、これと同じようなシステムコールが存在する。
>
> FreeBSD 9のmanpageを見てみる。
>
> HISTORY
>     The open() function appeared in Version 6 AT&T UNIX.  The openat() func‐
>     tion was introduced in FreeBSD 8.0.
>
> つまり古い環境のときだけ266行目が呼び出される。
>
> netatalk 3.0.1と3.0.2を比較すると、of_findname()関数の引数が1個から
> 2個に増えている。
> 具体的には、この変更。
> Configurable symlink behaviour
> https://github.com/franklahm/Netatalk/commit/acb180395693ed05a4e6a1edb6796c8e6f644a72
>
> netatalk 3.0.2のof_findname()を検索してみると...
>
> $ grep -r of_findname\( *
> etc/afpd/catsearch.c:   if (!isdir && (of = of_findname(vol, path))) {
> etc/afpd/desktop.c:    if (isadir || !(of = of_findname(vol, path))) {
> etc/afpd/desktop.c:    if (isadir || !(of = of_findname(vol, path))) {
> etc/afpd/desktop.c:    if (isadir || !(of = of_findname(vol, path))) {
> etc/afpd/file.c:    if ((of = of_findname(vol, s_path))) {
> etc/afpd/file.c:    if ((*of = of_findname(vol, path))) {
> etc/afpd/filedir.c:        opened = of_findname(&path);
> etc/afpd/filedir.c:        if (of_findname(vol, &path)) {
> etc/afpd/filedir.c:    } else if (of_findname(vol, s_path)) {
> etc/afpd/fork.c:    if ((opened = of_findname(vol, s_path))) {
> etc/afpd/ofork.c:struct ofork *of_findname(const struct vol *vol, struct path *path)
> etc/afpd/ofork.c:    if ((of = of_findname(vol, path))) {
>
> filedir.cの266行目のof_findname()だけ引数が1個のまま。
> 単なる編集忘れでしょう。
>
> こういうパッチを当てるとどうなりますか。
> 問題ないようであればcommitします。
>
> --- filedir.c.orig      2013-01-22 02:28:44.000000000 +0900
> +++ filedir.c   2013-03-13 19:12:00.822592205 +0900
> @@ -263,7 +263,7 @@
>  #ifdef HAVE_ATFUNCS
>          opened = of_findnameat(sdir_fd, &path);
>  #else
> -        opened = of_findname(&path);
> +        opened = of_findname(vol, &path);
>  #endif /* HAVE_ATFUNCS */
>  
>          if (opened) {
>
>



Netatalk-ja メーリングリストの案内