本物のcatを眺めてみる。

せっかくcoreutilsのソースを手に入れたので、GNU catのソースを眺めてます。ソース量は、800行。案外短いような長いような。vimのTlistで、ざざ〜っと眺める。

プログラムの概要は、

  macro
    PROGRAM_NAME
    AUTHORS
    max
    max
    LINE_COUNTER_BUF_LEN

  variable
    program_name
    infile
    input_desc
    line_buf
    line_num_print
    line_num_start
    line_num_end
    newlines2

  function
    usage
    next_line_num
    simple_cat
    write_pending
    cat
    main

こんな感じ。関数mainとcatだけで、600行もある。

まず、気になったのは、終了方法。

int
main(int argc, char **argv)
{
  (略)
  exit (EXIT_SUCCESS);
}

intを返さなくてもいいのかなぁ・・・return EXIT_SUCCESS or void main()じゃないかなぁと思うんだけど。イマイチ納得出来てない。う〜ん。

あんまり深追いするとヤバそうなので、stdio.h版の簡易catをつくるべぇ〜。