зеркало из https://github.com/github/ruby.git
* pack.c (pack_unpack): reduced static variables.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@18273 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
Родитель
c5e1d8c3d5
Коммит
e7207d0404
|
@ -1,3 +1,7 @@
|
|||
Thu Jul 31 00:58:33 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
|
||||
|
||||
* pack.c (pack_unpack): reduced static variables.
|
||||
|
||||
Thu Jul 31 00:10:20 2008 Yusuke Endoh <mame@tsg.ne.jp>
|
||||
|
||||
* proc.c (rb_proc_call_with_block): prevent null reference.
|
||||
|
|
24
pack.c
24
pack.c
|
@ -1787,33 +1787,31 @@ pack_unpack(VALUE str, VALUE fmt)
|
|||
VALUE buf = infected_str_new(0, (send - s)*3/4, str);
|
||||
char *ptr = RSTRING_PTR(buf);
|
||||
int a = -1,b = -1,c = 0,d;
|
||||
static int first = 1;
|
||||
static int b64_xtable[256];
|
||||
static signed char b64_xtable[256];
|
||||
|
||||
if (first) {
|
||||
if (b64_xtable['/'] <= 0) {
|
||||
int i;
|
||||
first = 0;
|
||||
|
||||
for (i = 0; i < 256; i++) {
|
||||
b64_xtable[i] = -1;
|
||||
}
|
||||
for (i = 0; i < 64; i++) {
|
||||
b64_xtable[(int)b64_table[i]] = i;
|
||||
b64_xtable[(unsigned char)b64_table[i]] = i;
|
||||
}
|
||||
}
|
||||
while (s < send) {
|
||||
a = b = c = d = -1;
|
||||
while((a = b64_xtable[(int)(*(unsigned char*)s)]) == -1 && s < send) { s++; }
|
||||
if( s >= send ) break;
|
||||
while ((a = b64_xtable[(unsigned char)*s]) == -1 && s < send) {s++;}
|
||||
if (s >= send) break;
|
||||
s++;
|
||||
while((b = b64_xtable[(int)(*(unsigned char*)s)]) == -1 && s < send) { s++; }
|
||||
if( s >= send ) break;
|
||||
while ((b = b64_xtable[(unsigned char)*s]) == -1 && s < send) {s++;}
|
||||
if (s >= send) break;
|
||||
s++;
|
||||
while((c = b64_xtable[(int)(*(unsigned char*)s)]) == -1 && s < send) { if( *s == '=' ) break; s++; }
|
||||
if( *s == '=' || s >= send ) break;
|
||||
while ((c = b64_xtable[(unsigned char)*s]) == -1 && s < send) {if (*s == '=') break; s++;}
|
||||
if (*s == '=' || s >= send) break;
|
||||
s++;
|
||||
while((d = b64_xtable[(int)(*(unsigned char*)s)]) == -1 && s < send) { if( *s == '=' ) break; s++; }
|
||||
if( *s == '=' || s >= send ) break;
|
||||
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;
|
||||
|
|
Загрузка…
Ссылка в новой задаче