зеркало из https://github.com/github/ruby.git
* sprintf.c (rb_f_sprintf): preceding ".." for negative
hexadecimal numbers should not appear if prec (e.g. %.4) is specified. * pack.c (NUM2I32): support platforms which does not have 32bit integers (e.g. Cray). git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@3081 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
Родитель
0b2c50f3a7
Коммит
7f62113f4d
|
@ -1,3 +1,12 @@
|
|||
Fri Nov 22 22:55:01 2002 Yukihiro Matsumoto <matz@ruby-lang.org>
|
||||
|
||||
* sprintf.c (rb_f_sprintf): preceding ".." for negative
|
||||
hexadecimal numbers should not appear if prec (e.g. %.4) is
|
||||
specified.
|
||||
|
||||
* pack.c (NUM2I32): support platforms which does not have 32bit
|
||||
integers (e.g. Cray).
|
||||
|
||||
Fri Nov 22 19:20:36 2002 Akinori MUSHA <knu@iDaemons.org>
|
||||
|
||||
* instruby.rb: Install batch files on Windows. [Submitted by usa]
|
||||
|
|
41
pack.c
41
pack.c
|
@ -309,11 +309,46 @@ typedef long I32;
|
|||
typedef unsigned long U32;
|
||||
#define NUM2I32(x) NUM2LONG(x)
|
||||
#define NUM2U32(x) NUM2ULONG(x)
|
||||
#elif SIZEOF_INT == SIZE32
|
||||
#else
|
||||
typedef int I32;
|
||||
typedef unsigned int U32;
|
||||
#define NUM2I32(x) NUM2INT(x)
|
||||
#define NUM2U32(x) NUM2UINT(x)
|
||||
# if SIZEOF_INT == SIZE32
|
||||
# define NUM2I32(x) NUM2INT(x)
|
||||
# define NUM2U32(x) NUM2UINT(x)
|
||||
# else
|
||||
|
||||
#define I32_MAX 2147483647
|
||||
#define I32_MIN (-I32_MAX-1)
|
||||
|
||||
static I32
|
||||
num2i32(x)
|
||||
VALUE x;
|
||||
{
|
||||
long num = NUM2LONG(x);
|
||||
|
||||
if (num < I32_MIN || I32_MAX < num) {
|
||||
rb_raise(rb_eRangeError, "integer %ld too big to convert to `I32'", num);
|
||||
}
|
||||
return (I32)num;
|
||||
}
|
||||
|
||||
#define U32_MAX 4294967295
|
||||
|
||||
static U32
|
||||
num2u32(x)
|
||||
VALUE x;
|
||||
{
|
||||
unsigned long num = NUM2ULONG(x);
|
||||
|
||||
if (U32_MAX < num) {
|
||||
rb_raise(rb_eRangeError, "integer %ld too big to convert to `U32'", num);
|
||||
}
|
||||
return (U32)num;
|
||||
}
|
||||
|
||||
# define NUM2I32(x) num2i32(x)
|
||||
# define NUM2U32(x) num2u32(x)
|
||||
# endif
|
||||
#endif
|
||||
|
||||
#ifdef HAVE_LONG_LONG
|
||||
|
|
14
sprintf.c
14
sprintf.c
|
@ -404,7 +404,7 @@ rb_f_sprintf(argc, argv)
|
|||
if (base == 10) {
|
||||
rb_warning("negative number for %%u specifier");
|
||||
}
|
||||
else {
|
||||
else if (!(flags&FPREC)) {
|
||||
strcpy(s, "..");
|
||||
s += 2;
|
||||
}
|
||||
|
@ -463,8 +463,10 @@ rb_f_sprintf(argc, argv)
|
|||
remove_sign_bits(++s, base);
|
||||
val = rb_str_new(0, 3+strlen(s));
|
||||
t = RSTRING(val)->ptr;
|
||||
strcpy(t, "..");
|
||||
t += 2;
|
||||
if (!(flags&FPREC)) {
|
||||
strcpy(t, "..");
|
||||
t += 2;
|
||||
}
|
||||
switch (base) {
|
||||
case 16:
|
||||
if (s[0] != 'f') strcpy(t++, "f"); break;
|
||||
|
@ -492,7 +494,7 @@ rb_f_sprintf(argc, argv)
|
|||
}
|
||||
if (prec < len) prec = len;
|
||||
width -= prec;
|
||||
if (!(flags&(FZERO|FMINUS)) && s[0] != '.') {
|
||||
if (!(flags&(FZERO|FMINUS)) && v >= 0) {
|
||||
CHECK(width);
|
||||
while (width-->0) {
|
||||
buf[blen++] = ' ';
|
||||
|
@ -507,7 +509,7 @@ rb_f_sprintf(argc, argv)
|
|||
if (!(flags & FMINUS)) {
|
||||
char c = ' ';
|
||||
|
||||
if (s[0] == '.') {
|
||||
if (v < 0) {
|
||||
c = '.';
|
||||
if ((flags & FPREC) && prec > len) {
|
||||
pos = blen;
|
||||
|
@ -524,7 +526,7 @@ rb_f_sprintf(argc, argv)
|
|||
}
|
||||
CHECK(prec - len);
|
||||
while (len < prec--) {
|
||||
buf[blen++] = s[0]=='.'?'.':'0';
|
||||
buf[blen++] = v < 0 ? '.' : '0';
|
||||
}
|
||||
PUSH(s, len);
|
||||
CHECK(width);
|
||||
|
|
Загрузка…
Ссылка в новой задаче