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

[freewnn:00830] setenv() in uum



小野寛生です

At Sat, 30 Mar 2002 21:43:00 +0900,
Hiroo Ono wrote:
> という作業をしています。

書き換えてテストしていたら、
Wnn/uum で
  termcap.c: In function `decfline':
  termcap.c:295: too few arguments to function `setenv'
というエラーが出てしまいました。

Wnn/uum/jhlp.c の setenv() の定義と衝突しているのですが、
/** 環境変数のセット */
void
setenv (var, value)
     char *var;
     char *value;
{
  extern char **environ;
  char **newenv;
  register int i, j;

  (略)
}

libc が持っている、*environ[] 変数を書き換えて setenv() を実現している
ようなんですが、FreeBSD のヘッダを見る限り、

/usr/include/stand.h:
extern struct env_var   *environ;

と文字列ではないようですし、どの OS でも動くということは期待出来ないと
思います。また、FreeBSD の man を信じれば

HISTORY
     The functions setenv() and unsetenv() appeared in Version 7 AT&T UNIX.
     The putenv() function appeared in 4.3BSD-Reno.

ということのようなので、ISO C にも Posix.1,2 にも Single Unix Specification
v.1,2 にも入っていないようですが、setenv() を使ってもよかろうと思っています。
Wnn4 でわざわざ独自に定義していたのはなにか理由があるんでしょうか。
% あと、ない場合を考えるとしたら、
% setenv() がない → putenv() があれば使う → なければ…?
% というとこかと思いますが。

とりあえずは、setenv() の定義を #if 0 で括って、setenv() の呼び出しは
  setenv(name, value, 1);
に変えるつもりです。うまく動かない OS が出てきたら、そのとき考えましょう。

それから、

> Wnn/jutil/wddel.c で
>   rb.buf = (char *) malloc ((unsigned) (rb.size = 0));
> という部分があります。

malloc(0) の動作は処理系定義のはずですし、ここは
  rb.buf=NULL;
  rb.size=0;
でよいと思っています。指摘がなければ、変えてしまいますので、問題が
あればいって下さい。


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