[PHP-dev 959]Re: Signal11で落ちる(php-src/ext/standard/

NAKAMURA Takeshi 1yen @ sh.rim.or.jp
2003年 12月 24日 (水) 15:27:43 JST


仲村です。


 原因が同じ所にあるのに、対処が2箇所に分かれるのはどう考えても
汚いので、デリミタの直後が行末だと、値が返らないことを利用して
行末に番兵を立てるようにしました。Bug を利用しちゃいけないとは
思いつつ、Bug も仕様ということで...
===================================================================
diff -u file.c.orig file.c
--- file.c.orig Wed Dec 24 10:51:27 2003
+++ file.c      Wed Dec 24 13:01:34 2003
@@ -2263,6 +2263,7 @@
 	/* strip trailing spaces */
 	while (--e >= s && isspace((int)*(unsigned char *)(e)) && *e != delimiter);
 	e++;
+	*(e++) = delimiter;	/* sentinel */
 
 	array_init(return_value);
 
===================================================================

On Wed, 24 Dec 2003 08:24:36 +0900,
 NAKAMURA Takeshi <1yen @ sh.rim.or.jp> wrote:

>  とりあえず、動くのを書きましたが、
> 空行を読む動作はまだ良いとして... まともなプログラム希望。
> # 久しぶりに ddd とか、関数名を探すために始めて cc -S とか使いました。
>
> On Tue, Dec 23, 2003 at 09:45:33PM +0900,
>  NAKAMURA Takeshi wrote:
>
>>>  ただ、空行があるとそれから先を読まなかったり
>>> 「文字,文字,文字,」と、デリミタのすぐ後が行末だと ("文字","文字","文字")
>>> と、3つしか帰ってこないようです。
>>> 空行の後もそのまま読んだり、("文字","文字","文字","") と、4つ
>>> 返すことはできないでしょうか?
----+----1----+----2----+----3----+----4----+----5----+----6----+----7----+
 関西沖縄青年の集い がじまるの会 手伝い 一人だけの勝手に神奈川支部
 仲村 武 <1yen @ sh.rim.or.jp>
 while ((p = memchr(s, delimiter, (e - s)))) を
 while ((e - s) >=0 ) として while の中で判断したいと思ったのですが
 Bus error や、FATAL:  emalloc():  Unable to allocate と言われ続け
 力尽きました。



PHP-dev メーリングリストの案内