[Mew-dist 10207] Re: IMAP & nntp (Re: Mew 1.94b49 + IM 120)

Shuichi KITAGUCHI ( 北口修一 ) kit at example.com
1999年 8月 18日 (水) 22:40:47 JST


From: Hideyuki SHIRAI (白井秀行) <shirai at example.com>
Subject: [Mew-dist 10191] Re: IMAP & nntp (Re: Mew 1.94b49 + IM 120)
Date: Wed, 18 Aug 1999 15:35:05 +0900

北口です。

kazu> > 1. Win32 で oimcat + imap + passwd 入力のときに message の最後に
kazu> >  余分な "^M" がつくことがある。
kazu> 

白井> +     binmode(STDERR);
白井>       print STDERR $prompt;
白井>       flush('STDERR');
白井>       chomp($secret = <STDIN>);
白井>       print STDERR "\n";
白井> +     flush('STDERR');

白井> これ、もうちょっと説明しておきますね。(以下、全部 M-x shell 上の結果)
白井> UNIX では
...
白井> となり、'print STDERR "\n";' の出力が boundary より先に来るため
白井> 何も問題ないのですが、Win32 ではなぜか
...
白井> のように 'print STDERR "\n";' の出力が一番最後に来てしまい、
白井> message の一部と見なされてしまいます。Mew から起動しても同じよう
白井> です。
白井> もしかしてたら環境依存かもしれないのですが、UNIX でも flush して
白井> おけば、確実に boundary より前に "\n" が出力されるし安全かな、と
白井> いった感じです。

これ、PGP でもありましたね。要は stdout と stderr という違う場所に
出力されているものをまとめて取得しようとして実際の出力結果が違って
しまう、というものです。Win32 だからというわけではなく、出力を more
などに通すだけでも結構変わったはず。

で、ad-hoc ですけど flush('STDERR'); を入れておけばよいと思います。

# バッファリングはややこしい...


--
Shuichi Kitaguchi <kit at example.com>



Mew-dist メーリングリストの案内