カメログ(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かわいい!