mendex/upmendex と makeindex での空入力に対する挙動の違い

Re: mendex/upmendex と makeindex での空入力に対する挙動の違い

- 和田 勇 の投稿
返信数: 1

たまたま見つけたコードですので読み違いかもしれませんが。

makeindex/src/mkind.c の static void prepare_idx(VOID_ARG) 内の289行目、290行目に以下のような記述があります。

        if (head == (NODE_PTR)NULL)
        FATAL("No valid index entries collected.\n", "");

NULL になるのは malloc で領域取得失敗したときで、その時点で FATAL エラーにはなっています。 ですので上記のコードはフェールセーフなコード故に実際に動くことはありません。

しかし、このコードから、makeindex も当初はエントリー無しはエラーにしたかったのではと思えてきました。

エントリー無しは軽微なエラーだとしてスルーして欲しい気持ちは理解できますが、 その逆も有りだとも考えることができます。

以上から、私見では有りますが、mended/upmendex に makeindex のこの挙動に準拠するようなオプションを追加した方が良いように思っています。

和田 勇 への返信

Re: mendex/upmendex と makeindex での空入力に対する挙動の違い

- Lemures Lemniscati の投稿

GItHub にある TeX Live のミラーで,現行の makeindex のソースをみてみました.
https://github.com/TeX-Live/texlive-source/tree/f767c1003714b2caa71ffc740c57399bf79f0f3d/texk/makeindexk

このソースに基づくと,makeindex において exit code の挙動は以下のように要約できます.

  • FATAL が出たら,exit code は 1 .
  • FATAL が出なかったら(ERROR があっても),exit code は 0 .

個人的にはちょっと衝撃的だったので,どう考えるべきか悩んでいます……

確かに,オプション対応のほうがよさそうな気がしてきました.