- UNIXプログラミング質問すれ Part10
652 :デフォルトの名無しさん[]:2014/05/30(金) 18:57:46.01 ID:1vuEEnaV - OpenBSD の diff コマンドのソースを
src.tar.gz というアーカイブの /usr/bin/diff から持ってきて、 わずかに修正後、cygwin でビルドには成功し、一応動作はするのですが、 「diff: : Cannot allocate memory」 というエラーが二回に一回くらい出ます。「:」は二つです。 これは何が原因で、どうやったら直せますか? ソースの修正箇所は、__dead ・__dead void usage(void) の __dead が定義されていなかったので、 #define __dead とした。 ・fgetln() が宣言されていなかったようなので、 呼び出し箇所を my_fgetln() という名前に変更し、 /* $OpenBSD: util.c,v 1.23 2007/09/17 09:28:36 espie Exp $ */ /* $NetBSD: util.c,v 1.10 1996/12/31 17:56:04 christos Exp $ */ /* * Copyright (c) 2001 Marc Espie. */ /* OPENBSD ORIGINAL: usr.bin/make/util.c */ と書かれた、fgeln() のソースを関数名を my_fgetln()に変更して追加した。
| - UNIXプログラミング質問すれ Part10
653 :デフォルトの名無しさん[]:2014/05/30(金) 19:05:18.54 ID:1vuEEnaV - なお、diffのソース・フォルダで"Cannot" "allocate" "memory" と
いうキーワードを検索してみましたが、違うキーワードが含まれた 別の文字列の一部として存在しているだけでした。 「diff」という文字列を誰がどうやって表示しているのかさえ分かり ません。__FILE__ マクロも検索してみましたが、見つかりません でした。
| - UNIXプログラミング質問すれ Part10
655 :デフォルトの名無しさん[]:2014/05/30(金) 19:31:55.39 ID:1vuEEnaV - main() 関数の冒頭で、
{ char **oargv; // main のローカル変数 oargv = argv; while ((ch = getopt_long(argc, argv, OPTIONS, longopts, NULL)) != -1) { ・・・ lastch = ch; newarg = optind != prevoptind; prevoptind = optind; } argc -= optind; argv += optind; ・・・ set_argstr(oargv, argv); ・・・ } のようになっており、oargv は上記以外では参照されておらず、 argv[0]を参照できる可能性が有るとすれば、 getopt_long() と set_argstr() しかないようです。 これらの関数のうちどちらかが、メッセージを出しているのでしょうか?
|
|