環境: Ubuntu 10.04 LTS Gnome デスクトップ v2.30.2 gcc/g++ 4.4.3 libreadline 6.1
複数行の入力を入力して処理するアプリケーションを構築していたところ、入力のサイズが大きい場合、readline が数バイトの文字をスキップすることがわかりました。確認するために、次のような簡単なプログラムを作成しました。
#include <stdio.h>
#include <readline/readline.h>
int main() {
while (1) {
char *p = readline("> ");
if (!p) break;
fprintf(stderr, "%s\n", p);
}
return 0;
}
120000バイトで構成される20000行の入力を生成しました。
seq -f "%05g" 1 20000 >gen.txt
gnome 端末でテスト プログラムを実行し、gen.txt の内容をコピー アンド ペーストしました。
g++ test.cpp -lreadline
./a.out 2>out.txt
[copy-and-paste the content of gen.txt]
out.txt は gen.txt よりも小さく、多くのバイトが省略されていることがわかりました。
wc -c out.txt
119966 out.txt
gnome 端末であれ readline であれ、どのコンポーネントに欠陥があるかを知りたいです。また、readline と gnome 端末のクリップボード コンテンツの何バイトが問題なくコピー アンド ペーストできることを保証しているかを知りたいです。