* hash.c (ruby_setenv): fixed SEGV. [ruby-dev:26186]
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@8616 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
parent
8db3dc39d6
commit
7a986b2871
@ -1,3 +1,7 @@
|
|||||||
|
Mon Jun 13 13:03:08 2005 Hirokazu Yamamoto <ocean@m2.ccsnet.ne.jp>
|
||||||
|
|
||||||
|
* hash.c (ruby_setenv): fixed SEGV. [ruby-dev:26186]
|
||||||
|
|
||||||
Mon Jun 13 01:54:20 2005 Yukihiro Matsumoto <matz@ruby-lang.org>
|
Mon Jun 13 01:54:20 2005 Yukihiro Matsumoto <matz@ruby-lang.org>
|
||||||
|
|
||||||
* signal.c (sigexit): call rb_thread_signal_exit() instead of
|
* signal.c (sigexit): call rb_thread_signal_exit() instead of
|
||||||
|
13
hash.c
13
hash.c
@ -1824,27 +1824,24 @@ ruby_setenv(name, value)
|
|||||||
tmpenv[max] = 0;
|
tmpenv[max] = 0;
|
||||||
environ = tmpenv; /* tell exec where it is now */
|
environ = tmpenv; /* tell exec where it is now */
|
||||||
}
|
}
|
||||||
if (!value) {
|
if (environ[i]) {
|
||||||
if (environ != origenviron) {
|
|
||||||
char **envp = origenviron;
|
char **envp = origenviron;
|
||||||
while (*envp && *envp != environ[i]) envp++;
|
while (*envp && *envp != environ[i]) envp++;
|
||||||
if (!*envp)
|
if (!*envp)
|
||||||
free(environ[i]);
|
free(environ[i]);
|
||||||
}
|
if (!value) {
|
||||||
while (environ[i]) {
|
while (environ[i]) {
|
||||||
environ[i] = environ[i+1];
|
environ[i] = environ[i+1];
|
||||||
i++;
|
i++;
|
||||||
}
|
}
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (!environ[i]) { /* does not exist yet */
|
}
|
||||||
|
else { /* does not exist yet */
|
||||||
|
if (!value) return;
|
||||||
REALLOC_N(environ, char*, i+2); /* just expand it a bit */
|
REALLOC_N(environ, char*, i+2); /* just expand it a bit */
|
||||||
environ[i+1] = 0; /* make sure it's null terminated */
|
environ[i+1] = 0; /* make sure it's null terminated */
|
||||||
}
|
}
|
||||||
else {
|
|
||||||
if (environ[i] != origenviron[i])
|
|
||||||
free(environ[i]);
|
|
||||||
}
|
|
||||||
environ[i] = ALLOC_N(char, strlen(name) + strlen(value) + 2);
|
environ[i] = ALLOC_N(char, strlen(name) + strlen(value) + 2);
|
||||||
#ifndef MSDOS
|
#ifndef MSDOS
|
||||||
sprintf(environ[i],"%s=%s",name,value); /* all that work just for this */
|
sprintf(environ[i],"%s=%s",name,value); /* all that work just for this */
|
||||||
|
Loading…
x
Reference in New Issue
Block a user