morita
morit****@razil*****
2008年 7月 3日 (木) 22:55:53 JST
森です。 いつもありがとうございます。。。コミットお願いします!! Kouhei Sutou さんは書きました: > 須藤です。 > > 2008/07/03 11:00 Kouhei Sutou <kou****@cozmi*****>: > >> sen_atoi()とsen_str_itoa()がINT_MINも扱えるようにするパッチです。 >> >> <time>のリテラルにINT_MINが使えるようになります。 >> >> パッチ前: >> #:<-2147483648.0> ; => #f >> #:<-2147483649.0> ; => #f >> >> パッチ後: >> #:<-2147483648.0> ; => #:<-2147483648.0> >> #:<-2147483649.0> ; => #f >> > > ごめんなさい。 > INT_MAX + 1のとき、#fじゃなくてオーバーフローした値になっていました。。。 > > パッチ前: > >> #:<2147483647.0> >> > #:<2147483647.0> > >> #:<2147483648.0> >> > #f > > パッチ後: > >> #:<2147483647.0> >> > #:<2147483647.0> > >> #:<2147483648.0> >> > #f > > > Index: lib/str.c > =================================================================== > --- lib/str.c (revision 897) > +++ lib/str.c (working copy) > @@ -1381,7 +1381,6 @@ > int > sen_atoi(const char *nptr, const char *end, const char **rest) > { > - /* FIXME: INT_MIN is not supported */ > const char *p = nptr; > int v = 0, t, n = 0, o = 0; > if (p < end && *p == '-') { > @@ -1390,14 +1389,14 @@ > o = 1; > } > while (p < end && *p >= '0' && *p <= '9') { > - t = v * 10 + (*p - '0'); > - if (t < v) { v =0; break; } > + t = v * 10 - (*p - '0'); > + if (t > v || (!n && t == INT_MIN)) { v = 0; break; } > v = t; > o = 0; > p++; > } > if (rest) { *rest = o ? nptr : p; } > - return n ? -v : v; > + return n ? v : -v; > } > > unsigned int > @@ -1497,14 +1496,18 @@ > sen_rc > sen_str_itoa(int i, char *p, char *end, char **rest) > { > - /* FIXME: INT_MIN is not supported */ > char *q; > if (p >= end) { return sen_invalid_argument; } > + q = p; > if (i < 0) { > *p++ = '-'; > + q = p; > + if (i == INT_MIN) { > + *p++ = (-(i % 10)) + '0'; > + i /= 10; > + } > i = -i; > } > - q = p; > do { > if (p >= end) { return sen_invalid_argument; } > *p++ = i % 10 + '0'; > > _______________________________________________ > Senna-dev mailing list > Senna****@lists***** > http://lists.sourceforge.jp/mailman/listinfo/senna-dev > バグ報告方法:http://qwik.jp/senna/bug_report.html > >