diff options
author | shyouhei <shyouhei@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2011-12-28 12:47:15 +0000 |
---|---|---|
committer | shyouhei <shyouhei@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2011-12-28 12:47:15 +0000 |
commit | e19bd3eaa8bd71cfc9e5bf436527f015b093f31e (patch) | |
tree | c3d5fae02297a4fff84f969a963fe6342eb288c8 /string.c | |
parent | 858cb3f6b9ebc307e3721c73b406e238f7221e3d (diff) |
-This line, and those below, will be ignored--
M ruby_1_8_7/ChangeLog
M ruby_1_8_7/inits.c
M ruby_1_8_7/version.h
M ruby_1_8_7/string.c
M ruby_1_8_7/st.c
M ruby_1_8_7/test/ruby/test_string.rb
M ruby_1_8_7/random.c
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/branches/ruby_1_8_7@34151 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'string.c')
-rw-r--r-- | string.c | 7 |
1 files changed, 6 insertions, 1 deletions
@@ -875,13 +875,15 @@ rb_str_concat(str1, str2) return str1; } +static unsigned long hash_seed; + int rb_str_hash(str) VALUE str; { register long len = RSTRING(str)->len; register char *p = RSTRING(str)->ptr; - register int key = 0; + register unsigned long key = hash_seed; #if defined(HASH_ELFHASH) register unsigned int g; @@ -905,6 +907,7 @@ rb_str_hash(str) while (len--) { key = key*65599 + *p; p++; + key = (key << 13) | (key >> ((sizeof(unsigned long) * CHAR_BIT) - 13)); } key = key + (key>>5); #endif @@ -5062,4 +5065,6 @@ Init_String() rb_fs = Qnil; rb_define_variable("$;", &rb_fs); rb_define_variable("$-F", &rb_fs); + + hash_seed = rb_genrand_int32(); } |