[PATCH] Hash#delete wrong documentation
From:
Gaston Ramos <ramos.gaston@...>
Date:
2008-05-21 02:41:13 UTC
List:
ruby-core #16825
Hi Core,
I found a bug on ruby documentation http://www.ruby-doc.org/core/ in
Hash#delete
* Deletes and returns a key-value pair from <i>hsh</i> whose key is
* equal to <i>key</i>. If the key is not found, returns the
* <em>default value</em>. If the optional code block is given and
the
* key is not found, pass in the key and return the result of
* <i>block</i>
I tested this featrure:
>> h =3D { "a" =3D> 100, "b" =3D> 200 }
=3D> {"a"=3D>100, "b"=3D>200}
>> h.default =3D "Go Fishing"
=3D> "Go Fishing"
>> h.delete("z")
=3D> nil
and the documentation says that "If the key is not found, returns the
default value" but really return nil. Attach the path.
I tried this on:
Linux Debian ETCH 2.6.22-1-k7 #1 SMP Mon Jul 23 14:02:09 UTC 2007 i686
GNU/Linux
ruby 1.8.6 (2008-03-03 patchlevel 114) [i486-linux]
Looking forward for this being applied.
Regards.
Gast=F3n Ramos
http://gastonramos.wordpress.com/
GNU/Linux Counter user #450312
Attachments (1)
hash-doc.patch
(32.9 KB, text/x-diff)
Index: hash.c
===================================================================
--- hash.c (revision 16501)
+++ hash.c (working copy)
@@ -31,7 +31,7 @@
if (!RHASH(hash)->tbl) rb_raise(rb_eTypeError, "uninitialized Hash");
if (OBJ_FROZEN(hash)) rb_error_frozen("hash");
if (!OBJ_TAINTED(hash) && rb_safe_level() >= 4)
- rb_raise(rb_eSecurityError, "Insecure: can't modify hash");
+ rb_raise(rb_eSecurityError, "Insecure: can't modify hash");
}
VALUE
@@ -61,15 +61,15 @@
if (a == b) return 0;
if (FIXNUM_P(a) && FIXNUM_P(b)) {
- return a != b;
+ return a != b;
}
if (TYPE(a) == T_STRING && RBASIC(a)->klass == rb_cString &&
- TYPE(b) == T_STRING && RBASIC(b)->klass == rb_cString) {
- return rb_str_cmp(a, b);
+ TYPE(b) == T_STRING && RBASIC(b)->klass == rb_cString) {
+ return rb_str_cmp(a, b);
}
if (a == Qundef || b == Qundef) return -1;
if (SYMBOL_P(a) && SYMBOL_P(b)) {
- return a != b;
+ return a != b;
}
args[0] = a;
@@ -94,19 +94,19 @@
switch (TYPE(a)) {
case T_FIXNUM:
case T_SYMBOL:
- hnum = (int)a;
- break;
+ hnum = (int)a;
+ break;
case T_STRING:
- hnum = rb_str_hash(a);
- break;
+ hnum = rb_str_hash(a);
+ break;
default:
- hval = rb_funcall(a, id_hash, 0);
- if (!FIXNUM_P(hval)) {
- hval = rb_funcall(hval, '%', 1, INT2FIX(536870923));
- }
- hnum = (int)FIX2LONG(hval);
+ hval = rb_funcall(a, id_hash, 0);
+ if (!FIXNUM_P(hval)) {
+ hval = rb_funcall(hval, '%', 1, INT2FIX(536870923));
+ }
+ hnum = (int)FIX2LONG(hval);
}
hnum <<= 1;
return RSHIFT(hnum, 1);
@@ -135,7 +135,7 @@
if (key == Qundef) return ST_CONTINUE;
status = (*arg->func)(key, value, arg->arg);
if (status == ST_CONTINUE) {
- return ST_CHECK;
+ return ST_CHECK;
}
return status;
}
@@ -152,7 +152,7 @@
arg.func = (st_foreach_func *)func;
arg.arg = a;
if (st_foreach(table, foreach_safe_i, (st_data_t)&arg)) {
- rb_raise(rb_eRuntimeError, "hash modified during iteration");
+ rb_raise(rb_eRuntimeError, "hash modified during iteration");
}
}
@@ -176,16 +176,16 @@
if (key == Qundef) return ST_CONTINUE;
status = (*arg->func)(key, value, arg->arg);
if (RHASH(arg->hash)->tbl != tbl) {
- rb_raise(rb_eRuntimeError, "rehash occurred during iteration");
+ rb_raise(rb_eRuntimeError, "rehash occurred during iteration");
}
switch (status) {
case ST_DELETE:
- st_delete_safe(tbl, (st_data_t*)&key, 0, Qundef);
- FL_SET(arg->hash, HASH_DELETED);
+ st_delete_safe(tbl, (st_data_t*)&key, 0, Qundef);
+ FL_SET(arg->hash, HASH_DELETED);
case ST_CONTINUE:
- break;
+ break;
case ST_STOP:
- return ST_STOP;
+ return ST_STOP;
}
return ST_CHECK;
}
@@ -197,10 +197,10 @@
RHASH(hash)->iter_lev--;
if (RHASH(hash)->iter_lev == 0) {
- if (FL_TEST(hash, HASH_DELETED)) {
- st_cleanup_safe(RHASH(hash)->tbl, Qundef);
- FL_UNSET(hash, HASH_DELETED);
- }
+ if (FL_TEST(hash, HASH_DELETED)) {
+ st_cleanup_safe(RHASH(hash)->tbl, Qundef);
+ FL_UNSET(hash, HASH_DELETED);
+ }
}
return 0;
}
@@ -210,7 +210,7 @@
struct hash_foreach_arg *arg;
{
if (st_foreach(RHASH(arg->hash)->tbl, hash_foreach_iter, (st_data_t)arg)) {
- rb_raise(rb_eRuntimeError, "hash modified during iteration");
+ rb_raise(rb_eRuntimeError, "hash modified during iteration");
}
return Qnil;
}
@@ -306,15 +306,15 @@
rb_hash_modify(hash);
if (rb_block_given_p()) {
- if (argc > 0) {
- rb_raise(rb_eArgError, "wrong number of arguments");
- }
- RHASH(hash)->ifnone = rb_block_proc();
- FL_SET(hash, HASH_PROC_DEFAULT);
+ if (argc > 0) {
+ rb_raise(rb_eArgError, "wrong number of arguments");
+ }
+ RHASH(hash)->ifnone = rb_block_proc();
+ FL_SET(hash, HASH_PROC_DEFAULT);
}
else {
- rb_scan_args(argc, argv, "01", &ifnone);
- RHASH(hash)->ifnone = ifnone;
+ rb_scan_args(argc, argv, "01", &ifnone);
+ RHASH(hash)->ifnone = ifnone;
}
return hash;
@@ -343,30 +343,30 @@
int i;
if (argc == 1) {
- tmp = rb_check_convert_type(argv[0], T_HASH, "Hash", "to_hash");
- if (!NIL_P(tmp)) {
- hash = hash_alloc0(klass);
- RHASH(hash)->tbl = st_copy(RHASH(tmp)->tbl);
- return hash;
- }
+ tmp = rb_check_convert_type(argv[0], T_HASH, "Hash", "to_hash");
+ if (!NIL_P(tmp)) {
+ hash = hash_alloc0(klass);
+ RHASH(hash)->tbl = st_copy(RHASH(tmp)->tbl);
+ return hash;
+ }
- tmp = rb_check_array_type(argv[0]);
- if (!NIL_P(tmp)) {
- long i;
+ tmp = rb_check_array_type(argv[0]);
+ if (!NIL_P(tmp)) {
+ long i;
- hash = hash_alloc(klass);
- for (i = 0; i < RARRAY_LEN(tmp); ++i) {
- VALUE v = rb_check_array_type(RARRAY_PTR(tmp)[i]);
-
- if (NIL_P(v)) continue;
- if (RARRAY_LEN(v) < 1 || 2 < RARRAY_LEN(v)) continue;
- rb_hash_aset(hash, RARRAY_PTR(v)[0], RARRAY_PTR(v)[1]);
- }
- return hash;
- }
+ hash = hash_alloc(klass);
+ for (i = 0; i < RARRAY_LEN(tmp); ++i) {
+ VALUE v = rb_check_array_type(RARRAY_PTR(tmp)[i]);
+
+ if (NIL_P(v)) continue;
+ if (RARRAY_LEN(v) < 1 || 2 < RARRAY_LEN(v)) continue;
+ rb_hash_aset(hash, RARRAY_PTR(v)[0], RARRAY_PTR(v)[1]);
+ }
+ return hash;
+ }
}
if (argc % 2 != 0) {
- rb_raise(rb_eArgError, "odd number of arguments for Hash");
+ rb_raise(rb_eArgError, "odd number of arguments for Hash");
}
hash = hash_alloc(klass);
@@ -449,7 +449,7 @@
VALUE val;
if (!st_lookup(RHASH(hash)->tbl, key, &val)) {
- return rb_funcall(hash, id_default, 1, key);
+ return rb_funcall(hash, id_default, 1, key);
}
return val;
}
@@ -461,7 +461,7 @@
VALUE val;
if (!st_lookup(RHASH(hash)->tbl, key, &val)) {
- return Qnil; /* without Hash#default */
+ return Qnil; /* without Hash#default */
}
return val;
}
@@ -509,14 +509,14 @@
block_given = rb_block_given_p();
if (block_given && argc == 2) {
- rb_warn("block supersedes default value argument");
+ rb_warn("block supersedes default value argument");
}
if (!st_lookup(RHASH(hash)->tbl, key, &val)) {
- if (block_given) return rb_yield(key);
- if (argc == 1) {
- rb_raise(rb_eIndexError, "key not found");
- }
- return if_none;
+ if (block_given) return rb_yield(key);
+ if (argc == 1) {
+ rb_raise(rb_eIndexError, "key not found");
+ }
+ return if_none;
}
return val;
}
@@ -552,8 +552,8 @@
rb_scan_args(argc, argv, "01", &key);
if (FL_TEST(hash, HASH_PROC_DEFAULT)) {
- if (argc == 0) return Qnil;
- return rb_funcall(RHASH(hash)->ifnone, id_call, 2, hash, key);
+ if (argc == 0) return Qnil;
+ return rb_funcall(RHASH(hash)->ifnone, id_call, 2, hash, key);
}
return RHASH(hash)->ifnone;
}
@@ -608,7 +608,7 @@
VALUE hash;
{
if (FL_TEST(hash, HASH_PROC_DEFAULT)) {
- return RHASH(hash)->ifnone;
+ return RHASH(hash)->ifnone;
}
return Qnil;
}
@@ -619,8 +619,8 @@
VALUE *args;
{
if (rb_equal(value, args[0])) {
- args[1] = key;
- return ST_STOP;
+ args[1] = key;
+ return ST_STOP;
}
return ST_CONTINUE;
}
@@ -632,13 +632,13 @@
st_data_t ktmp = (st_data_t)key, val;
if (RHASH(hash)->iter_lev > 0) {
- if (st_delete_safe(RHASH(hash)->tbl, &ktmp, &val, Qundef)) {
- FL_SET(hash, HASH_DELETED);
- return (VALUE)val;
- }
+ if (st_delete_safe(RHASH(hash)->tbl, &ktmp, &val, Qundef)) {
+ FL_SET(hash, HASH_DELETED);
+ return (VALUE)val;
+ }
}
else if (st_delete(RHASH(hash)->tbl, &ktmp, &val))
- return (VALUE)val;
+ return (VALUE)val;
return Qundef;
}
@@ -687,11 +687,11 @@
int i;
rb_warn("Hash#%s is deprecated; use Hash#values_at",
- rb_id2name(rb_frame_last_func()));
+ rb_id2name(rb_frame_last_func()));
indexes = rb_ary_new2(argc);
for (i=0; i<argc; i++) {
- RARRAY(indexes)->ptr[i] = rb_hash_aref(hash, argv[i]);
- RARRAY(indexes)->len++;
+ RARRAY(indexes)->ptr[i] = rb_hash_aref(hash, argv[i]);
+ RARRAY(indexes)->len++;
}
return indexes;
}
@@ -702,10 +702,9 @@
* hsh.delete(key) {| key | block } => value
*
* Deletes and returns a key-value pair from <i>hsh</i> whose key is
- * equal to <i>key</i>. If the key is not found, returns the
- * <em>default value</em>. If the optional code block is given and the
- * key is not found, pass in the key and return the result of
- * <i>block</i>.
+ * equal to <i>key</i>. If the key is not found, returns <code>nil</code>.
+ * If the optional code block is given and the key is not found,
+ * pass in the key and return the result of <i>block</i>.
*
* h = { "a" => 100, "b" => 200 }
* h.delete("a") #=> 100
@@ -724,7 +723,7 @@
val = rb_hash_delete_key(hash, key);
if (val != Qundef) return val;
if (rb_block_given_p()) {
- return rb_yield(key);
+ return rb_yield(key);
}
return Qnil;
}
@@ -779,26 +778,26 @@
rb_hash_modify(hash);
var.key = Qundef;
if (RHASH(hash)->iter_lev > 0) {
- rb_hash_foreach(hash, shift_i_safe, (st_data_t)&var);
- if (var.key != Qundef) {
- st_data_t key = var.key;
- if (st_delete_safe(RHASH(hash)->tbl, &key, 0, Qundef)) {
- FL_SET(hash, HASH_DELETED);
- }
- }
+ rb_hash_foreach(hash, shift_i_safe, (st_data_t)&var);
+ if (var.key != Qundef) {
+ st_data_t key = var.key;
+ if (st_delete_safe(RHASH(hash)->tbl, &key, 0, Qundef)) {
+ FL_SET(hash, HASH_DELETED);
+ }
+ }
}
else {
- rb_hash_foreach(hash, shift_i, (st_data_t)&var);
+ rb_hash_foreach(hash, shift_i, (st_data_t)&var);
}
if (var.key != Qundef) {
- return rb_assoc_new(var.key, var.val);
+ return rb_assoc_new(var.key, var.val);
}
else if (FL_TEST(hash, HASH_PROC_DEFAULT)) {
- return rb_funcall(RHASH(hash)->ifnone, id_call, 2, hash, Qnil);
+ return rb_funcall(RHASH(hash)->ifnone, id_call, 2, hash, Qnil);
}
else {
- return RHASH(hash)->ifnone;
+ return RHASH(hash)->ifnone;
}
}
@@ -808,7 +807,7 @@
{
if (key == Qundef) return ST_CONTINUE;
if (RTEST(rb_yield_values(2, key, value))) {
- rb_hash_delete_key(hash, key);
+ rb_hash_delete_key(hash, key);
}
return ST_CONTINUE;
}
@@ -879,7 +878,7 @@
{
if (key == Qundef) return ST_CONTINUE;
if (RTEST(rb_yield_values(2, key, value)))
- rb_ary_push(result, rb_assoc_new(key, value));
+ rb_ary_push(result, rb_assoc_new(key, value));
return ST_CONTINUE;
}
@@ -904,7 +903,7 @@
long i;
for (i=0; i<argc; i++) {
- rb_ary_push(result, rb_hash_aref(hash, argv[i]));
+ rb_ary_push(result, rb_hash_aref(hash, argv[i]));
}
return result;
}
@@ -958,7 +957,7 @@
{
rb_hash_modify(hash);
if (RHASH(hash)->tbl->num_entries > 0) {
- rb_hash_foreach(hash, clear_i, 0);
+ rb_hash_foreach(hash, clear_i, 0);
}
return hash;
@@ -988,10 +987,10 @@
{
rb_hash_modify(hash);
if (TYPE(key) != T_STRING || st_lookup(RHASH(hash)->tbl, key, 0)) {
- st_insert(RHASH(hash)->tbl, key, val);
+ st_insert(RHASH(hash)->tbl, key, val);
}
else {
- st_add_direct(RHASH(hash)->tbl, rb_str_new4(key), val);
+ st_add_direct(RHASH(hash)->tbl, rb_str_new4(key), val);
}
return val;
}
@@ -1001,7 +1000,7 @@
VALUE key, val, hash;
{
if (key != Qundef) {
- rb_hash_aset(hash, key, val);
+ rb_hash_aset(hash, key, val);
}
return ST_CONTINUE;
@@ -1029,10 +1028,10 @@
rb_hash_foreach(hash2, replace_i, hash);
RHASH(hash)->ifnone = RHASH(hash2)->ifnone;
if (FL_TEST(hash2, HASH_PROC_DEFAULT)) {
- FL_SET(hash, HASH_PROC_DEFAULT);
+ FL_SET(hash, HASH_PROC_DEFAULT);
}
else {
- FL_UNSET(hash, HASH_PROC_DEFAULT);
+ FL_UNSET(hash, HASH_PROC_DEFAULT);
}
return hash;
@@ -1074,7 +1073,7 @@
VALUE hash;
{
if (RHASH(hash)->tbl->num_entries == 0)
- return Qtrue;
+ return Qtrue;
return Qfalse;
}
@@ -1282,7 +1281,7 @@
if (key == Qundef) return ST_CONTINUE;
if (RSTRING(str)->len > 1) {
- rb_str_cat2(str, ", ");
+ rb_str_cat2(str, ", ");
}
str2 = rb_inspect(key);
rb_str_buf_append(str, str2);
@@ -1321,7 +1320,7 @@
VALUE hash;
{
if (RHASH(hash)->tbl == 0 || RHASH(hash)->tbl->num_entries == 0)
- return rb_str_new2("{}");
+ return rb_str_new2("{}");
if (rb_inspecting_p(hash)) return rb_str_new2("{...}");
return rb_protect_inspect(inspect_hash, hash, 0);
}
@@ -1455,7 +1454,7 @@
VALUE key;
{
if (st_lookup(RHASH(hash)->tbl, key, 0)) {
- return Qtrue;
+ return Qtrue;
}
return Qfalse;
}
@@ -1466,8 +1465,8 @@
{
if (key == Qundef) return ST_CONTINUE;
if (rb_equal(value, data[1])) {
- data[0] = Qtrue;
- return ST_STOP;
+ data[0] = Qtrue;
+ return ST_STOP;
}
return ST_CONTINUE;
}
@@ -1514,12 +1513,12 @@
if (key == Qundef) return ST_CONTINUE;
if (!st_lookup(data->tbl, key, &val2)) {
- data->result = Qfalse;
- return ST_STOP;
+ data->result = Qfalse;
+ return ST_STOP;
}
if (!(data->eql ? rb_eql(val1, val2) : rb_equal(val1, val2))) {
- data->result = Qfalse;
- return ST_STOP;
+ data->result = Qfalse;
+ return ST_STOP;
}
return ST_CONTINUE;
}
@@ -1544,23 +1543,23 @@
static VALUE
hash_equal(hash1, hash2, eql)
VALUE hash1, hash2;
- int eql; /* compare default value if true */
+ int eql; /* compare default value if true */
{
struct equal_data data;
if (hash1 == hash2) return Qtrue;
if (TYPE(hash2) != T_HASH) {
- if (!rb_respond_to(hash2, rb_intern("to_hash"))) {
- return Qfalse;
- }
- return rb_equal(hash2, hash1);
+ if (!rb_respond_to(hash2, rb_intern("to_hash"))) {
+ return Qfalse;
+ }
+ return rb_equal(hash2, hash1);
}
if (RHASH(hash1)->tbl->num_entries != RHASH(hash2)->tbl->num_entries)
- return Qfalse;
+ return Qfalse;
if (eql) {
- if (!(rb_equal(RHASH(hash1)->ifnone, RHASH(hash2)->ifnone) &&
- FL_TEST(hash1, HASH_PROC_DEFAULT) == FL_TEST(hash2, HASH_PROC_DEFAULT)))
- return Qfalse;
+ if (!(rb_equal(RHASH(hash1)->ifnone, RHASH(hash2)->ifnone) &&
+ FL_TEST(hash1, HASH_PROC_DEFAULT) == FL_TEST(hash2, HASH_PROC_DEFAULT)))
+ return Qfalse;
}
data.tbl = RHASH(hash2)->tbl;
@@ -1617,7 +1616,7 @@
int hval;
if (recur) {
- return LONG2FIX(0);
+ return LONG2FIX(0);
}
hval = RHASH(hash)->tbl->num_entries;
rb_hash_foreach(hash, hash_i, (st_data_t)&hval);
@@ -1704,7 +1703,7 @@
{
if (key == Qundef) return ST_CONTINUE;
if (rb_hash_has_key(hash, key)) {
- value = rb_yield_values(3, key, rb_hash_aref(hash, key), value);
+ value = rb_yield_values(3, key, rb_hash_aref(hash, key), value);
}
rb_hash_aset(hash, key, value);
return ST_CONTINUE;
@@ -1731,10 +1730,10 @@
{
hash2 = to_hash(hash2);
if (rb_block_given_p()) {
- rb_hash_foreach(hash2, rb_hash_update_block_i, hash1);
+ rb_hash_foreach(hash2, rb_hash_update_block_i, hash1);
}
else {
- rb_hash_foreach(hash2, rb_hash_update_i, hash1);
+ rb_hash_foreach(hash2, rb_hash_update_i, hash1);
}
return hash1;
}
@@ -1811,22 +1810,22 @@
SafeStringValue(name);
nam = RSTRING(name)->ptr;
if (strlen(nam) != RSTRING(name)->len) {
- rb_raise(rb_eArgError, "bad environment variable name");
+ rb_raise(rb_eArgError, "bad environment variable name");
}
val = getenv(nam);
if (val) {
- VALUE value = env_str_new2(val);
+ VALUE value = env_str_new2(val);
- ruby_setenv(nam, 0);
+ ruby_setenv(nam, 0);
#ifdef ENV_IGNORECASE
- if (strcasecmp(nam, PATH_ENV) == 0)
+ if (strcasecmp(nam, PATH_ENV) == 0)
#else
- if (strcmp(nam, PATH_ENV) == 0)
+ if (strcmp(nam, PATH_ENV) == 0)
#endif
- {
- path_tainted = 0;
- }
- return value;
+ {
+ path_tainted = 0;
+ }
+ return value;
}
return Qnil;
}
@@ -1851,22 +1850,22 @@
StringValue(name);
nam = RSTRING(name)->ptr;
if (strlen(nam) != RSTRING(name)->len) {
- rb_raise(rb_eArgError, "bad environment variable name");
+ rb_raise(rb_eArgError, "bad environment variable name");
}
env = getenv(nam);
if (env) {
#ifdef ENV_IGNORECASE
- if (strcasecmp(nam, PATH_ENV) == 0 && !rb_env_path_tainted())
+ if (strcasecmp(nam, PATH_ENV) == 0 && !rb_env_path_tainted())
#else
- if (strcmp(nam, PATH_ENV) == 0 && !rb_env_path_tainted())
+ if (strcmp(nam, PATH_ENV) == 0 && !rb_env_path_tainted())
#endif
- {
- VALUE str = rb_str_new2(env);
+ {
+ VALUE str = rb_str_new2(env);
- rb_obj_freeze(str);
- return str;
- }
- return env_str_new2(env);
+ rb_obj_freeze(str);
+ return str;
+ }
+ return env_str_new2(env);
}
return Qnil;
}
@@ -1883,27 +1882,27 @@
rb_scan_args(argc, argv, "11", &key, &if_none);
block_given = rb_block_given_p();
if (block_given && argc == 2) {
- rb_warn("block supersedes default value argument");
+ rb_warn("block supersedes default value argument");
}
StringValue(key);
nam = RSTRING(key)->ptr;
if (strlen(nam) != RSTRING(key)->len) {
- rb_raise(rb_eArgError, "bad environment variable name");
+ rb_raise(rb_eArgError, "bad environment variable name");
}
env = getenv(nam);
if (!env) {
- if (block_given) return rb_yield(key);
- if (argc == 1) {
- rb_raise(rb_eIndexError, "key not found");
- }
- return if_none;
+ if (block_given) return rb_yield(key);
+ if (argc == 1) {
+ rb_raise(rb_eIndexError, "key not found");
+ }
+ return if_none;
}
#ifdef ENV_IGNORECASE
if (strcasecmp(nam, PATH_ENV) == 0 && !rb_env_path_tainted())
#else
if (strcmp(nam, PATH_ENV) == 0 && !rb_env_path_tainted())
#endif
- return rb_str_new2(env);
+ return rb_str_new2(env);
return env_str_new2(env);
}
@@ -1918,7 +1917,7 @@
rb_env_path_tainted()
{
if (path_tainted < 0) {
- path_tainted_p(getenv(PATH_ENV));
+ path_tainted_p(getenv(PATH_ENV));
}
return path_tainted;
}
@@ -1932,15 +1931,15 @@
env = GET_ENVIRON(environ);
for (i = 0; env[i]; i++) {
- if (
+ if (
#ifdef ENV_IGNORECASE
- strncasecmp(env[i],nam,len) == 0
+ strncasecmp(env[i],nam,len) == 0
#else
- memcmp(env[i],nam,len) == 0
+ memcmp(env[i],nam,len) == 0
#endif
- && env[i][len] == '=')
- break; /* memcmp must come first to avoid */
- } /* potential SEGV's */
+ && env[i][len] == '=')
+ break; /* memcmp must come first to avoid */
+ } /* potential SEGV's */
FREE_ENVIRON(environ);
return i;
}
@@ -1973,42 +1972,42 @@
#undef setenv
#undef unsetenv
if (value)
- setenv(name,value,1);
+ setenv(name,value,1);
else
- unsetenv(name);
+ unsetenv(name);
#else /* WIN32 */
size_t len;
- int i=envix(name); /* where does it go? */
+ int i=envix(name); /* where does it go? */
- if (environ == origenviron) { /* need we copy environment? */
- int j;
- int max;
- char **tmpenv;
+ if (environ == origenviron) { /* need we copy environment? */
+ int j;
+ int max;
+ char **tmpenv;
- for (max = i; environ[max]; max++) ;
- tmpenv = ALLOC_N(char*, max+2);
- for (j=0; j<max; j++) /* copy environment */
- tmpenv[j] = strdup(environ[j]);
- tmpenv[max] = 0;
- environ = tmpenv; /* tell exec where it is now */
+ for (max = i; environ[max]; max++) ;
+ tmpenv = ALLOC_N(char*, max+2);
+ for (j=0; j<max; j++) /* copy environment */
+ tmpenv[j] = strdup(environ[j]);
+ tmpenv[max] = 0;
+ environ = tmpenv; /* tell exec where it is now */
}
if (environ[i]) {
- char **envp = origenviron;
- while (*envp && *envp != environ[i]) envp++;
- if (!*envp)
- free(environ[i]);
- if (!value) {
- while (environ[i]) {
- environ[i] = environ[i+1];
- i++;
- }
- return;
- }
+ char **envp = origenviron;
+ while (*envp && *envp != environ[i]) envp++;
+ if (!*envp)
+ free(environ[i]);
+ if (!value) {
+ while (environ[i]) {
+ environ[i] = environ[i+1];
+ i++;
+ }
+ return;
+ }
}
- else { /* does not exist yet */
- if (!value) return;
- REALLOC_N(environ, char*, i+2); /* just expand it a bit */
- environ[i+1] = 0; /* make sure it's null terminated */
+ else { /* does not exist yet */
+ if (!value) return;
+ REALLOC_N(environ, char*, i+2); /* just expand it a bit */
+ environ[i+1] = 0; /* make sure it's null terminated */
}
len = strlen(name) + strlen(value) + 2;
environ[i] = ALLOC_N(char, len);
@@ -2041,12 +2040,12 @@
char *name, *value;
if (rb_safe_level() >= 4) {
- rb_raise(rb_eSecurityError, "can't change environment variable");
+ rb_raise(rb_eSecurityError, "can't change environment variable");
}
if (NIL_P(val)) {
- env_delete(obj, nm);
- return Qnil;
+ env_delete(obj, nm);
+ return Qnil;
}
StringValue(nm);
@@ -2054,9 +2053,9 @@
name = RSTRING(nm)->ptr;
value = RSTRING(val)->ptr;
if (strlen(name) != RSTRING(nm)->len)
- rb_raise(rb_eArgError, "bad environment variable name");
+ rb_raise(rb_eArgError, "bad environment variable name");
if (strlen(value) != RSTRING(val)->len)
- rb_raise(rb_eArgError, "bad environment variable value");
+ rb_raise(rb_eArgError, "bad environment variable value");
ruby_setenv(name, value);
#ifdef ENV_IGNORECASE
@@ -2064,14 +2063,14 @@
#else
if (strcmp(name, PATH_ENV) == 0) {
#endif
- if (OBJ_TAINTED(val)) {
- /* already tainted, no check */
- path_tainted = 1;
- return val;
- }
- else {
- path_tainted_p(value);
- }
+ if (OBJ_TAINTED(val)) {
+ /* already tainted, no check */
+ path_tainted = 1;
+ return val;
+ }
+ else {
+ path_tainted_p(value);
+ }
}
return val;
}
@@ -2084,11 +2083,11 @@
env = GET_ENVIRON(environ);
while (*env) {
- char *s = strchr(*env, '=');
- if (s) {
- rb_ary_push(ary, env_str_new(*env, s-*env));
- }
- env++;
+ char *s = strchr(*env, '=');
+ if (s) {
+ rb_ary_push(ary, env_str_new(*env, s-*env));
+ }
+ env++;
}
FREE_ENVIRON(environ);
return ary;
@@ -2103,7 +2102,7 @@
RETURN_ENUMERATOR(ehash, 0, 0);
for (i=0; i<RARRAY(keys)->len; i++) {
- rb_yield(RARRAY(keys)->ptr[i]);
+ rb_yield(RARRAY(keys)->ptr[i]);
}
return ehash;
}
@@ -2116,11 +2115,11 @@
env = GET_ENVIRON(environ);
while (*env) {
- char *s = strchr(*env, '=');
- if (s) {
- rb_ary_push(ary, env_str_new2(s+1));
- }
- env++;
+ char *s = strchr(*env, '=');
+ if (s) {
+ rb_ary_push(ary, env_str_new2(s+1));
+ }
+ env++;
}
FREE_ENVIRON(environ);
return ary;
@@ -2135,7 +2134,7 @@
RETURN_ENUMERATOR(ehash, 0, 0);
for (i=0; i<RARRAY(values)->len; i++) {
- rb_yield(RARRAY(values)->ptr[i]);
+ rb_yield(RARRAY(values)->ptr[i]);
}
return ehash;
}
@@ -2151,22 +2150,22 @@
env = GET_ENVIRON(environ);
while (*env) {
- char *s = strchr(*env, '=');
- if (s) {
- rb_ary_push(ary, env_str_new(*env, s-*env));
- rb_ary_push(ary, env_str_new2(s+1));
- }
- env++;
+ char *s = strchr(*env, '=');
+ if (s) {
+ rb_ary_push(ary, env_str_new(*env, s-*env));
+ rb_ary_push(ary, env_str_new2(s+1));
+ }
+ env++;
}
FREE_ENVIRON(environ);
for (i=0; i<RARRAY(ary)->len; i+=2) {
- if (values) {
- rb_yield_values(2, RARRAY(ary)->ptr[i], RARRAY(ary)->ptr[i+1]);
- }
- else {
- rb_yield(rb_assoc_new(RARRAY(ary)->ptr[i], RARRAY(ary)->ptr[i+1]));
- }
+ if (values) {
+ rb_yield_values(2, RARRAY(ary)->ptr[i], RARRAY(ary)->ptr[i+1]);
+ }
+ else {
+ rb_yield(rb_assoc_new(RARRAY(ary)->ptr[i], RARRAY(ary)->ptr[i+1]));
+ }
}
return ehash;
}
@@ -2199,14 +2198,14 @@
keys = env_keys();
for (i=0; i<RARRAY(keys)->len; i++) {
- VALUE val = rb_f_getenv(Qnil, RARRAY(keys)->ptr[i]);
- if (!NIL_P(val)) {
- if (RTEST(rb_yield_values(2, RARRAY(keys)->ptr[i], val))) {
- FL_UNSET(RARRAY(keys)->ptr[i], FL_TAINT);
- env_delete(Qnil, RARRAY(keys)->ptr[i]);
- del++;
- }
- }
+ VALUE val = rb_f_getenv(Qnil, RARRAY(keys)->ptr[i]);
+ if (!NIL_P(val)) {
+ if (RTEST(rb_yield_values(2, RARRAY(keys)->ptr[i], val))) {
+ FL_UNSET(RARRAY(keys)->ptr[i], FL_TAINT);
+ env_delete(Qnil, RARRAY(keys)->ptr[i]);
+ del++;
+ }
+ }
}
if (del == 0) return Qnil;
return envtbl;
@@ -2229,7 +2228,7 @@
long i;
for (i=0; i<argc; i++) {
- rb_ary_push(result, rb_f_getenv(Qnil, argv[i]));
+ rb_ary_push(result, rb_f_getenv(Qnil, argv[i]));
}
return result;
}
@@ -2245,15 +2244,15 @@
result = rb_ary_new();
env = GET_ENVIRON(environ);
while (*env) {
- char *s = strchr(*env, '=');
- if (s) {
- VALUE k = env_str_new(*env, s-*env);
- VALUE v = env_str_new2(s+1);
- if (RTEST(rb_yield_values(2, k, v))) {
- rb_ary_push(result, rb_assoc_new(k, v));
- }
- }
- env++;
+ char *s = strchr(*env, '=');
+ if (s) {
+ VALUE k = env_str_new(*env, s-*env);
+ VALUE v = env_str_new2(s+1);
+ if (RTEST(rb_yield_values(2, k, v))) {
+ rb_ary_push(result, rb_assoc_new(k, v));
+ }
+ }
+ env++;
}
FREE_ENVIRON(environ);
@@ -2270,10 +2269,10 @@
keys = env_keys();
for (i=0; i<RARRAY(keys)->len; i++) {
- VALUE val = rb_f_getenv(Qnil, RARRAY(keys)->ptr[i]);
- if (!NIL_P(val)) {
- env_delete(Qnil, RARRAY(keys)->ptr[i]);
- }
+ VALUE val = rb_f_getenv(Qnil, RARRAY(keys)->ptr[i]);
+ if (!NIL_P(val)) {
+ env_delete(Qnil, RARRAY(keys)->ptr[i]);
+ }
}
return envtbl;
}
@@ -2293,19 +2292,19 @@
env = GET_ENVIRON(environ);
while (*env) {
- char *s = strchr(*env, '=');
+ char *s = strchr(*env, '=');
- if (env != environ) {
- rb_str_buf_cat2(str, ", ");
- }
- if (s) {
- rb_str_buf_cat2(str, "\"");
- rb_str_buf_cat(str, *env, s-*env);
- rb_str_buf_cat2(str, "\"=>");
- i = rb_inspect(rb_str_new2(s+1));
- rb_str_buf_append(str, i);
- }
- env++;
+ if (env != environ) {
+ rb_str_buf_cat2(str, ", ");
+ }
+ if (s) {
+ rb_str_buf_cat2(str, "\"");
+ rb_str_buf_cat(str, *env, s-*env);
+ rb_str_buf_cat2(str, "\"=>");
+ i = rb_inspect(rb_str_new2(s+1));
+ rb_str_buf_append(str, i);
+ }
+ env++;
}
FREE_ENVIRON(environ);
rb_str_buf_cat2(str, "}");
@@ -2322,12 +2321,12 @@
env = GET_ENVIRON(environ);
while (*env) {
- char *s = strchr(*env, '=');
- if (s) {
- rb_ary_push(ary, rb_assoc_new(env_str_new(*env, s-*env),
- env_str_new2(s+1)));
- }
- env++;
+ char *s = strchr(*env, '=');
+ if (s) {
+ rb_ary_push(ary, rb_assoc_new(env_str_new(*env, s-*env),
+ env_str_new2(s+1)));
+ }
+ env++;
}
FREE_ENVIRON(environ);
return ary;
@@ -2347,7 +2346,7 @@
env = GET_ENVIRON(environ);
for(i=0; env[i]; i++)
- ;
+ ;
FREE_ENVIRON(environ);
return INT2FIX(i);
}
@@ -2359,8 +2358,8 @@
env = GET_ENVIRON(environ);
if (env[0] == 0) {
- FREE_ENVIRON(environ);
- return Qtrue;
+ FREE_ENVIRON(environ);
+ return Qtrue;
}
FREE_ENVIRON(environ);
return Qfalse;
@@ -2374,7 +2373,7 @@
s = StringValuePtr(key);
if (strlen(s) != RSTRING(key)->len)
- rb_raise(rb_eArgError, "bad environment variable name");
+ rb_raise(rb_eArgError, "bad environment variable name");
if (getenv(s)) return Qtrue;
return Qfalse;
}
@@ -2388,15 +2387,15 @@
if (TYPE(value) != T_STRING) return Qfalse;
env = GET_ENVIRON(environ);
while (*env) {
- char *s = strchr(*env, '=');
- if (s++) {
- long len = strlen(s);
- if (RSTRING(value)->len == len && strncmp(s, RSTRING(value)->ptr, len) == 0) {
- FREE_ENVIRON(environ);
- return Qtrue;
- }
- }
- env++;
+ char *s = strchr(*env, '=');
+ if (s++) {
+ long len = strlen(s);
+ if (RSTRING(value)->len == len && strncmp(s, RSTRING(value)->ptr, len) == 0) {
+ FREE_ENVIRON(environ);
+ return Qtrue;
+ }
+ }
+ env++;
}
FREE_ENVIRON(environ);
return Qfalse;
@@ -2412,16 +2411,16 @@
StringValue(value);
env = GET_ENVIRON(environ);
while (*env) {
- char *s = strchr(*env, '=');
- if (s++) {
- long len = strlen(s);
- if (RSTRING(value)->len == len && strncmp(s, RSTRING(value)->ptr, len) == 0) {
- str = env_str_new(*env, s-*env-1);
- FREE_ENVIRON(environ);
- return str;
- }
- }
- env++;
+ char *s = strchr(*env, '=');
+ if (s++) {
+ long len = strlen(s);
+ if (RSTRING(value)->len == len && strncmp(s, RSTRING(value)->ptr, len) == 0) {
+ str = env_str_new(*env, s-*env-1);
+ FREE_ENVIRON(environ);
+ return str;
+ }
+ }
+ env++;
}
FREE_ENVIRON(environ);
return Qnil;
@@ -2436,16 +2435,16 @@
VALUE indexes = rb_ary_new2(argc);
rb_warn("ENV.%s is deprecated; use ENV.values_at",
- rb_id2name(rb_frame_last_func()));
+ rb_id2name(rb_frame_last_func()));
for (i=0;i<argc;i++) {
- VALUE tmp = rb_check_string_type(argv[i]);
- if (NIL_P(tmp)) {
- RARRAY(indexes)->ptr[i] = Qnil;
- }
- else {
- RARRAY(indexes)->ptr[i] = env_str_new2(getenv(RSTRING(tmp)->ptr));
- }
- RARRAY(indexes)->len = i+1;
+ VALUE tmp = rb_check_string_type(argv[i]);
+ if (NIL_P(tmp)) {
+ RARRAY(indexes)->ptr[i] = Qnil;
+ }
+ else {
+ RARRAY(indexes)->ptr[i] = env_str_new2(getenv(RSTRING(tmp)->ptr));
+ }
+ RARRAY(indexes)->len = i+1;
}
return indexes;
@@ -2459,12 +2458,12 @@
env = GET_ENVIRON(environ);
while (*env) {
- char *s = strchr(*env, '=');
- if (s) {
- rb_hash_aset(hash, env_str_new(*env, s-*env),
- env_str_new2(s+1));
- }
- env++;
+ char *s = strchr(*env, '=');
+ if (s) {
+ rb_hash_aset(hash, env_str_new(*env, s-*env),
+ env_str_new2(s+1));
+ }
+ env++;
}
FREE_ENVIRON(environ);
return hash;
@@ -2483,13 +2482,13 @@
env = GET_ENVIRON(environ);
if (*env) {
- char *s = strchr(*env, '=');
- if (s) {
- VALUE key = env_str_new(*env, s-*env);
- VALUE val = env_str_new2(getenv(RSTRING(key)->ptr));
- env_delete(Qnil, key);
- return rb_assoc_new(key, val);
- }
+ char *s = strchr(*env, '=');
+ if (s) {
+ VALUE key = env_str_new(*env, s-*env);
+ VALUE val = env_str_new2(getenv(RSTRING(key)->ptr));
+ env_delete(Qnil, key);
+ return rb_assoc_new(key, val);
+ }
}
FREE_ENVIRON(environ);
return Qnil;
@@ -2506,10 +2505,10 @@
VALUE key, val, keys;
{
if (key != Qundef) {
- env_aset(Qnil, key, val);
- if (rb_ary_includes(keys, key)) {
- rb_ary_delete(keys, key);
- }
+ env_aset(Qnil, key, val);
+ if (rb_ary_includes(keys, key)) {
+ rb_ary_delete(keys, key);
+ }
}
return ST_CONTINUE;
}
@@ -2526,7 +2525,7 @@
rb_hash_foreach(hash, env_replace_i, keys);
for (i=0; i<RARRAY(keys)->len; i++) {
- env_delete(env, RARRAY(keys)->ptr[i]);
+ env_delete(env, RARRAY(keys)->ptr[i]);
}
return env;
}
@@ -2536,10 +2535,10 @@
VALUE key, val;
{
if (key != Qundef) {
- if (rb_block_given_p()) {
- val = rb_yield_values(3, key, rb_f_getenv(Qnil, key), val);
- }
- env_aset(Qnil, key, val);
+ if (rb_block_given_p()) {
+ val = rb_yield_values(3, key, rb_f_getenv(Qnil, key), val);
+ }
+ env_aset(Qnil, key, val);
}
return ST_CONTINUE;
}
@@ -2714,7 +2713,7 @@
rb_define_global_const("ENV", envtbl);
#else /* __MACOS__ */
- envtbl = rb_hash_s_new(0, NULL, rb_cHash);
+ envtbl = rb_hash_s_new(0, NULL, rb_cHash);
rb_define_global_const("ENV", envtbl);
#endif /* ifndef __MACOS__ environment variables nothing on MacOS. */
}