ruby-changes:24378
From: shyouhei <ko1@a...>
Date: Wed, 18 Jul 2012 14:29:39 +0900 (JST)
Subject: [ruby-changes:24378] shyouhei:r36429 (trunk): add casts
shyouhei 2012-07-18 14:29:24 +0900 (Wed, 18 Jul 2012) New Revision: 36429 http://svn.ruby-lang.org/cgi-bin/viewvc.cgi?view=rev&revision=36429 Log: add casts * pack.c: (ditto) bitwise operations are not char. Apply explicit casts on them. Modified files: trunk/ChangeLog trunk/pack.c Index: ChangeLog =================================================================== --- ChangeLog (revision 36428) +++ ChangeLog (revision 36429) @@ -1,3 +1,8 @@ +Wed Jul 18 14:25:55 2012 URABE Shyouhei <shyouhei@r...> + + * pack.c: (ditto) bitwise operations are not char. Apply explicit + casts on them. + Wed Jul 18 12:59:50 2012 URABE Shyouhei <shyouhei@r...> * encoding.c (load_encoding): explicit cast to suppress warning. Index: pack.c =================================================================== --- pack.c (revision 36428) +++ pack.c (revision 36429) @@ -88,27 +88,27 @@ #endif #ifndef swap16 -# define swap16(x) ((((x)&0xFF)<<8) | (((x)>>8)&0xFF)) +# define swap16(x) ((uint16_t)((((x)&0xFF)<<8) | (((x)>>8)&0xFF))) #endif #ifndef swap32 -# define swap32(x) ((((x)&0xFF)<<24) \ +# define swap32(x) ((uint32_t)((((x)&0xFF)<<24) \ |(((x)>>24)&0xFF) \ |(((x)&0x0000FF00)<<8) \ - |(((x)&0x00FF0000)>>8) ) + |(((x)&0x00FF0000)>>8) )) #endif #ifndef swap64 # ifdef HAVE_INT64_T # define byte_in_64bit(n) ((uint64_t)0xff << (n)) -# define swap64(x) ((((x)&byte_in_64bit(0))<<56) \ +# define swap64(x) ((uint64_t)((((x)&byte_in_64bit(0))<<56) \ |(((x)>>56)&0xFF) \ |(((x)&byte_in_64bit(8))<<40) \ |(((x)&byte_in_64bit(48))>>40) \ |(((x)&byte_in_64bit(16))<<24) \ |(((x)&byte_in_64bit(40))>>24) \ |(((x)&byte_in_64bit(24))<<8) \ - |(((x)&byte_in_64bit(32))>>8)) + |(((x)&byte_in_64bit(32))>>8))) # endif #endif @@ -512,6 +512,8 @@ } break; +#define castchar(from) (char)((from) & 0xff) + case 'b': /* bit string (ascending) */ { int byte = 0; @@ -527,7 +529,7 @@ if (i & 7) byte >>= 1; else { - char c = byte & 0xff; + char c = castchar(byte); rb_str_buf_cat(res, &c, 1); byte = 0; } @@ -535,7 +537,7 @@ if (len & 7) { char c; byte >>= 7 - (len & 7); - c = byte & 0xff; + c = castchar(byte); rb_str_buf_cat(res, &c, 1); } len = j; @@ -557,7 +559,7 @@ if (i & 7) byte <<= 1; else { - char c = byte & 0xff; + char c = castchar(byte); rb_str_buf_cat(res, &c, 1); byte = 0; } @@ -565,7 +567,7 @@ if (len & 7) { char c; byte <<= 7 - (len & 7); - c = byte & 0xff; + c = castchar(byte); rb_str_buf_cat(res, &c, 1); } len = j; @@ -590,13 +592,13 @@ if (i & 1) byte >>= 4; else { - char c = byte & 0xff; + char c = castchar(byte); rb_str_buf_cat(res, &c, 1); byte = 0; } } if (len & 1) { - char c = byte & 0xff; + char c = castchar(byte); rb_str_buf_cat(res, &c, 1); } len = j; @@ -621,13 +623,13 @@ if (i & 1) byte <<= 4; else { - char c = byte & 0xff; + char c = castchar(byte); rb_str_buf_cat(res, &c, 1); byte = 0; } } if (len & 1) { - char c = byte & 0xff; + char c = castchar(byte); rb_str_buf_cat(res, &c, 1); } len = j; @@ -988,7 +990,7 @@ VALUE big128 = rb_uint2big(128); while (RB_TYPE_P(from, T_BIGNUM)) { from = rb_big_divmod(from, big128); - c = NUM2INT(RARRAY_PTR(from)[1]) | 0x80; /* mod */ + c = castchar(NUM2INT(RARRAY_PTR(from)[1]) | 0x80); /* mod */ rb_str_buf_cat(buf, &c, sizeof(char)); from = RARRAY_PTR(from)[0]; /* div */ } @@ -1003,7 +1005,7 @@ } while (ul) { - c = (char)(ul & 0x7f) | 0x80; + c = castchar((ul & 0x7f) | 0x80); rb_str_buf_cat(buf, &c, sizeof(char)); ul >>= 7; } @@ -1062,7 +1064,7 @@ char buff[4096]; long i = 0; const char *trans = type == 'u' ? uu_table : b64_table; - int padding; + char padding; if (type == 'u') { buff[i++] = (char)len + ' '; @@ -1925,7 +1927,7 @@ b64_xtable[i] = -1; } for (i = 0; i < 64; i++) { - b64_xtable[(unsigned char)b64_table[i]] = i; + b64_xtable[(unsigned char)b64_table[i]] = (char)i; } } if (len == 0) { @@ -1944,17 +1946,17 @@ if (s + 1 == send && *s == '=') break; d = b64_xtable[(unsigned char)*s++]; if (d == -1) rb_raise(rb_eArgError, "invalid base64"); - *ptr++ = a << 2 | b >> 4; - *ptr++ = b << 4 | c >> 2; - *ptr++ = c << 6 | d; + *ptr++ = castchar(a << 2 | b >> 4); + *ptr++ = castchar(b << 4 | c >> 2); + *ptr++ = castchar(c << 6 | d); } if (c == -1) { - *ptr++ = a << 2 | b >> 4; + *ptr++ = castchar(a << 2 | b >> 4); if (b & 0xf) rb_raise(rb_eArgError, "invalid base64"); } else if (d == -1) { - *ptr++ = a << 2 | b >> 4; - *ptr++ = b << 4 | c >> 2; + *ptr++ = castchar(a << 2 | b >> 4); + *ptr++ = castchar(b << 4 | c >> 2); if (c & 0x3) rb_raise(rb_eArgError, "invalid base64"); } } @@ -1973,16 +1975,16 @@ while ((d = b64_xtable[(unsigned char)*s]) == -1 && s < send) {if (*s == '=') break; s++;} if (*s == '=' || s >= send) break; s++; - *ptr++ = a << 2 | b >> 4; - *ptr++ = b << 4 | c >> 2; - *ptr++ = c << 6 | d; + *ptr++ = castchar(a << 2 | b >> 4); + *ptr++ = castchar(b << 4 | c >> 2); + *ptr++ = castchar(c << 6 | d); } if (a != -1 && b != -1) { if (c == -1 && *s == '=') - *ptr++ = a << 2 | b >> 4; + *ptr++ = castchar(a << 2 | b >> 4); else if (c != -1 && *s == '=') { - *ptr++ = a << 2 | b >> 4; - *ptr++ = b << 4 | c >> 2; + *ptr++ = castchar(a << 2 | b >> 4); + *ptr++ = castchar(b << 4 | c >> 2); } } } @@ -2006,7 +2008,7 @@ if ((c1 = hex2num(*s)) == -1) break; if (++s == send) break; if ((c2 = hex2num(*s)) == -1) break; - *ptr++ = c1 << 4 | c2; + *ptr++ = castchar(c1 << 4 | c2); } } else { @@ -2165,38 +2167,38 @@ return 1; } if (uv <= 0x7ff) { - buf[0] = (char)((uv>>6)&0xff)|0xc0; - buf[1] = (char)(uv&0x3f)|0x80; + buf[0] = castchar(((uv>>6)&0xff)|0xc0); + buf[1] = castchar((uv&0x3f)|0x80); return 2; } if (uv <= 0xffff) { - buf[0] = (char)((uv>>12)&0xff)|0xe0; - buf[1] = (char)((uv>>6)&0x3f)|0x80; - buf[2] = (char)(uv&0x3f)|0x80; + buf[0] = castchar(((uv>>12)&0xff)|0xe0); + buf[1] = castchar(((uv>>6)&0x3f)|0x80); + buf[2] = castchar((uv&0x3f)|0x80); return 3; } if (uv <= 0x1fffff) { - buf[0] = (char)((uv>>18)&0xff)|0xf0; - buf[1] = (char)((uv>>12)&0x3f)|0x80; - buf[2] = (char)((uv>>6)&0x3f)|0x80; - buf[3] = (char)(uv&0x3f)|0x80; + buf[0] = castchar(((uv>>18)&0xff)|0xf0); + buf[1] = castchar(((uv>>12)&0x3f)|0x80); + buf[2] = castchar(((uv>>6)&0x3f)|0x80); + buf[3] = castchar((uv&0x3f)|0x80); return 4; } if (uv <= 0x3ffffff) { - buf[0] = (char)((uv>>24)&0xff)|0xf8; - buf[1] = (char)((uv>>18)&0x3f)|0x80; - buf[2] = (char)((uv>>12)&0x3f)|0x80; - buf[3] = (char)((uv>>6)&0x3f)|0x80; - buf[4] = (char)(uv&0x3f)|0x80; + buf[0] = castchar(((uv>>24)&0xff)|0xf8); + buf[1] = castchar(((uv>>18)&0x3f)|0x80); + buf[2] = castchar(((uv>>12)&0x3f)|0x80); + buf[3] = castchar(((uv>>6)&0x3f)|0x80); + buf[4] = castchar((uv&0x3f)|0x80); return 5; } if (uv <= 0x7fffffff) { - buf[0] = (char)((uv>>30)&0xff)|0xfc; - buf[1] = (char)((uv>>24)&0x3f)|0x80; - buf[2] = (char)((uv>>18)&0x3f)|0x80; - buf[3] = (char)((uv>>12)&0x3f)|0x80; - buf[4] = (char)((uv>>6)&0x3f)|0x80; - buf[5] = (char)(uv&0x3f)|0x80; + buf[0] = castchar(((uv>>30)&0xff)|0xfc); + buf[1] = castchar(((uv>>24)&0x3f)|0x80); + buf[2] = castchar(((uv>>18)&0x3f)|0x80); + buf[3] = castchar(((uv>>12)&0x3f)|0x80); + buf[4] = castchar(((uv>>6)&0x3f)|0x80); + buf[5] = castchar((uv&0x3f)|0x80); return 6; } rb_raise(rb_eRangeError, "pack(U): value out of range"); -- ML: ruby-changes@q... Info: http://www.atdot.net/~ko1/quickml/