カメログ(2006-01-24) lsのソース読む

で、単純にソースの長さで比較すると、freebsd版のls.cが861行なのに対してGNU版は4245行。同じ機能のプログラムでソースが5倍かよ…。あとifdef多すぎ。まあGNU版は対応プラットフォームがいっぱいあるからしょうがないと言えばしょうがないけど、なんだかなー。

freebsd版は861行なのかよ! たしかにlsは超長かった覚えがある。逆に短くておれに勇気を与えてくれるようなソースは無いのかと思って調べてみました。

Debian etchでは基本的なコマンドはcoreutilsに入ってるそうです。

apt-get source coreutils
wc -l *.c | sort
      2 lbracket.c
      2 ls-dir.c
      2 ls-ls.c
      2 ls-vdir.c
      7 md5.c
      7 sha1sum.c
     71 false.c
     71 true.c
     75 sync.c
     82 pwd.c
     86 hostid.c
     96 yes.c
    103 link.c
    103 unlink.c
    106 logname.c
    107 dirname.c
    109 whoami.c
(略)
   1757 tail.c
   1941 stty.c
   2006 od.c
   2024 tr.c
   2227 ptx.c
   2573 sort.c
   2863 pr.c
   4038 ls.c

lsは最長かよ! 短い方は単にdefineしてるだけとか抜かすとyesとかその辺っぽい。 yesはひたすらy y y y y y y y …と出すだけの男らしいコマンド。(y/n聞いてくるコマンドに流し込む以外の用途は不明)

96行とは急激に親しみが沸いてきたのでソース見てみる。

(略)
  if (argc == 1)
    {
      argv[1] = "y";
      argc = 2;
    }
  for (;;)
    {
      int i;
      for (i = 1; i < argc; i++)
        if (fputs (argv[i], stdout)  EOF
            || putchar (i  argc – 1 ? ’\n’ : ’ ‘) == EOF)
          {
            error (0, errno, _(””standard output”“));
            exit (EXIT_FAILURE);
          }
    }

ああ、たしかにインデントキモイけどかわいいよ!yesかわいい!

Comments


Option