[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[freewnn:00730] Re: cmd_name not set in jserver/de.c



青野です。こんにちは。

<20010828.135849.68536961.hamajima@nagoya.ydc.co.jp>の記事において
hamajima@nagoya.ydc.co.jpさんは書きました。

>> jserver/de.cの中にある変数 cmd_name (たぶんコマンド名)って、誰も設定して
>> いないように見えますが、そんなことないですか?
>> 
>> 例えば jserver -v を実行すると先頭にコマンド名を表示するようになっている
>> と思うのですが、実際には表示されないです。

小野さんも[freewnn:00633]で案を示されていますが、後回しに
なっている模様です。
#これは[freewnn:00032]の本木さんによる(libwrap)パッチを元
#にしたものだそうです。

どちらにしてもリリース前に入れてほしいです。

…これだけではあれなので、error1() 関数でcmd_name+":"を無
視しないようにするパッチもつけます。やってることは始めに
strcpy / strcat した分だけsprintf()の対象からはずすだけの
ものです。
#コメントは適宜削除していただいて構いません。毎回strlen() 
#をするのも無駄な気がするので、static変数として保存してい
#てもよいような気もします。

---- cut here ----
--- ../orig/Wnn/jserver/error.c	Sun May 27 15:48:07 2001
+++ Wnn/jserver/error.c	Tue Aug 28 14:37:30 2001
@@ -111,17 +111,24 @@
   errno = 0;                    /* Reset error number for next calling */
 }
 
+/*
+   NOTICE: バッファの大きさは考慮していないので、プログラマ側で使い方に */
+           注意すべきである.
+*/
 void
 error1 (x, y1, y2, y3, y4, y5)
      register char *x;
      int y1, y2, y3, y4, y5;
 {
   char buf[512];
+  int len;
 
   strcpy (buf, cmd_name);       /* strcpy(buf , "jserver:"); */
   strcat (buf, ":");
-  strcat (buf, x);
-  sprintf (buf, x, y1, y2, y3, y4, y5);
+  /* strcat (buf, x); */	/* It's useless! - aono */
+  len = strlen(buf);
+  /* skip len to retain cmd_name + ':' . */
+  sprintf (buf + len, x, y1, y2, y3, y4, y5);
   my_error (buf);
 }
 
---- cut here ----
----
青野智樹	(aono@cc.osaka-kyoiku.ac.jp)


http://www.freewnn.org/ FreeWnn Project