summaryrefslogtreecommitdiff
path: root/hash.c
diff options
context:
space:
mode:
authormatz <matz@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2001-06-11 06:26:19 +0000
committermatz <matz@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2001-06-11 06:26:19 +0000
commitf2184b2024ffae23462e8e0fec009f4cd9c95c00 (patch)
tree2851c1e3de6cdfdf28617f1b0c2a3df585d136e6 /hash.c
parent528c61b5b7b0ff3a40a004d3fba6582791250a0f (diff)
* hash.c (ruby_setenv): readline library leaves their environment
strings uncopied. "free" check revised. * st.c (numhash): should shuffle bits by dividing by prime number. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/branches/ruby_1_6@1521 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'hash.c')
-rw-r--r--hash.c8
1 files changed, 6 insertions, 2 deletions
diff --git a/hash.c b/hash.c
index 1b007526da..43c1526a14 100644
--- a/hash.c
+++ b/hash.c
@@ -1063,8 +1063,12 @@ ruby_setenv(name, value)
environ = tmpenv; /* tell exec where it is now */
}
if (!value) {
- if (environ[i] != origenviron[i])
- free(environ[i]);
+ if (environ != origenviron) {
+ char **envp = origenviron;
+ while (*envp && *envp != environ[i]) envp++;
+ if (!*envp)
+ free(environ[i]);
+ }
while (environ[i]) {
environ[i] = environ[i+1];
i++;