* environ.cc (getearly): New function.
(findenv_func): New function pointer, predefined to getearly. (getenv): Call findenv function over the findenv_func pointer. (environ_init): Change findenv_func pointer to my_findenv after Cygwin environment is initialized.
This commit is contained in:
parent
053fc4771a
commit
33b0abd1c3
|
@ -1,3 +1,12 @@
|
|||
2006-04-21 Pierre Humblet <Pierre.Humblet@ieee.org>
|
||||
Corinna Vinschen <corinna@vinschen.de>
|
||||
|
||||
* environ.cc (getearly): New function.
|
||||
(findenv_func): New function pointer, predefined to getearly.
|
||||
(getenv): Call findenv function over the findenv_func pointer.
|
||||
(environ_init): Change findenv_func pointer to my_findenv after Cygwin
|
||||
environment is initialized.
|
||||
|
||||
2006-04-21 Lars Munch <lars@segv.dk>
|
||||
|
||||
* include/asm/byteorder.h (__ntohl): Fix the missing uint32_t.
|
||||
|
|
|
@ -223,6 +223,41 @@ my_findenv (const char *name, int *offset)
|
|||
return NULL;
|
||||
}
|
||||
|
||||
/*
|
||||
* getearly --
|
||||
* Primitive getenv before the environment is built.
|
||||
*/
|
||||
|
||||
static char * __stdcall
|
||||
getearly (const char * name, int *offset __attribute__ ((unused)))
|
||||
{
|
||||
int s = strlen (name);
|
||||
char * rawenv;
|
||||
char ** ptr;
|
||||
child_info *get_cygwin_startup_info ();
|
||||
child_info_spawn *ci = (child_info_spawn *) get_cygwin_startup_info ();
|
||||
|
||||
if (ci && (ptr = ci->moreinfo->envp))
|
||||
{
|
||||
for (; *ptr; ptr++)
|
||||
if (strncasematch (name, *ptr, s)
|
||||
&& (*(*ptr + s) == '='))
|
||||
return *ptr + s + 1;
|
||||
}
|
||||
else if ((rawenv = GetEnvironmentStrings ()))
|
||||
{
|
||||
while (*rawenv)
|
||||
if (strncasematch (name, rawenv, s)
|
||||
&& (*(rawenv + s) == '='))
|
||||
return rawenv + s + 1;
|
||||
else
|
||||
rawenv = strchr (rawenv, 0) + 1;
|
||||
}
|
||||
return NULL;
|
||||
}
|
||||
|
||||
static char * (*findenv_func)(const char *, int *) = (char * (*)(const char *, int *)) getearly;
|
||||
|
||||
/*
|
||||
* getenv --
|
||||
* Returns ptr to value associated with name, if any, else NULL.
|
||||
|
@ -232,8 +267,7 @@ extern "C" char *
|
|||
getenv (const char *name)
|
||||
{
|
||||
int offset;
|
||||
|
||||
return my_findenv (name, &offset);
|
||||
return findenv_func (name, &offset);
|
||||
}
|
||||
|
||||
static int __stdcall
|
||||
|
@ -808,6 +842,7 @@ environ_init (char **envp, int envc)
|
|||
FreeEnvironmentStrings (rawenv);
|
||||
|
||||
out:
|
||||
findenv_func = (char * (*)(const char*, int*)) my_findenv;
|
||||
__cygwin_environ = envp;
|
||||
update_envptrs ();
|
||||
if (envp_passed_in)
|
||||
|
|
Loading…
Reference in New Issue