トップページ > プログラム > 2014年05月30日 > 1vuEEnaV

書き込み順位&時間帯一覧

19 位/210 ID中時間01234567891011121314151617181920212223Total
書き込み数0000000000000000001200003



使用した名前一覧書き込んだスレッド一覧
デフォルトの名無しさん
UNIXプログラミング質問すれ Part10

書き込みレス一覧

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()
しかないようです。

これらの関数のうちどちらかが、メッセージを出しているのでしょうか?


※このページは、『2ちゃんねる』の書き込みを基に自動生成したものです。オリジナルはリンク先の2ちゃんねるの書き込みです。
※このサイトでオリジナルの書き込みについては対応できません。
※何か問題のある場合はメールをしてください。対応します。