[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[FDclone-users:00518] Re: FDclone でファイルサイズが 0 と表示される



潮田です。

> > その上、今回のメールは内容が無くて、白旗宣言だったりします。
>  そんなことおっしゃらずにもう少しおつき合い下さい。
分かりました。
ただ、反応がかなり鈍くなりますので、ご了承ください。

>  いや、その位置はまずいでしょう。引用部分の直前に「else」が
> ある筈で、「else」と「if」の途中に printf() を挿入してしまう
> と流れが変わってしまいます。
仰るとおりです。
頭がまだお休みモードになってますね。
# 普段のソースが、必ず {} をつける冗長なものなので・・・

>  CFLAGS をいじったという話ですが、「-D_LARGE_FILES」まで消
> してしまっていませんか?空の directory に FD-2.08b を展開し
> てから [FDclone-users:00510] を当てて再挑戦してみて下さい。
今度は、 Makefile.tmp は触らない方向で挑戦です。
どうせ、 sscanf2() の中の動きは理解できないので、 I/O から
なにか分からないと眺めているのですが、この場合の呼び出し側は
readfileent() の理解であってますでしょうか。
また、ここの
    while (l--) switch (s[l]) {
で、 case を基本的に上から下へ処理しているイメージでしょうか。

case g:
   sscanf2("", "%-*d%$", )
case s:
   sscanf2("", "%qd", )

と buf が "" で sscanf2() に来ているので、その前の case u が
何かをしてそうだなというところまでは見ました。

case u:
   cp = sscanf2("203 1        0 Apr 14 09:13:28 2006 ss",
                "%-*d%$",
                sizeof(uid_t), &uid);

この部分ですが、 uid には 203 が戻りますが、 cp は NULL が
戻ります。
("%-*d%$" が '$' で終わっているから?)
この為、次の  if (cp) に入れず、 else if へ行くのですが、
finduid() の戻り (up) も NULL で戻るようで、結果的に
tmp -> st_uid には何も入らず -1 がセットされた状態になる
様です。
( sscanf2() に %u/%g が来てましたが、 AIX の tar は
  ブランク区切りみたいです)
普段、2列表示にしていたので気が付きませんでしたが、
1列表示にすると

$ tar tvf xx.tar
-rw-r--r-- 203 1        0 Apr 14 09:13:28 2006 ss
-rw-r--r-- 203 1        2 Apr 14 09:17:04 2006 sss

が、

  ss    0 06-01-01  0:00:00 daemon   system   -rw-r--r--
  sss   0 06-01-01  0:00:00 daemon   bin      -rw-r--r--

とUID, GID とも違うものが表示されています。
# uid 203 = shiota, gid 1 = staff
(ファイル名とサイズの部分のブランクを削ってます)