* external.cc (create_winenv): Rename from sync_winenv. Take

environment pointer as parameter and return pointer to corresponding
	win32 environment block if != NULL.  Otherwise just sync as before.
	(cygwin_internal): Add CW_CVT_ENV_TO_WINENV case.
	* include/cygwin/version.h: Bump API minor number.
	* include/sys/cygwin.h (cygwin_getinfo_types): Add CW_CVT_ENV_TO_WINENV.
This commit is contained in:
Corinna Vinschen 2011-10-05 12:27:37 +00:00
parent a06c3bf336
commit 8dfce03bfa
4 changed files with 30 additions and 7 deletions
winsup/cygwin

View File

@ -1,3 +1,12 @@
2011-10-05 Corinna Vinschen <corinna@vinschen.de>
* external.cc (create_winenv): Rename from sync_winenv. Take
environment pointer as parameter and return pointer to corresponding
win32 environment block if != NULL. Otherwise just sync as before.
(cygwin_internal): Add CW_CVT_ENV_TO_WINENV case.
* include/cygwin/version.h: Bump API minor number.
* include/sys/cygwin.h (cygwin_getinfo_types): Add CW_CVT_ENV_TO_WINENV.
2011-10-04 Corinna Vinschen <corinna@vinschen.de> 2011-10-04 Corinna Vinschen <corinna@vinschen.de>
* net.cc (socketpair): Bind first socket to loopback only as well. * net.cc (socketpair): Bind first socket to loopback only as well.

View File

@ -132,12 +132,12 @@ check_ntsec (const char *filename)
} }
/* Copy cygwin environment variables to the Windows environment. */ /* Copy cygwin environment variables to the Windows environment. */
static void static PWCHAR
sync_winenv () create_winenv (const char * const *env)
{ {
int unused_envc; int unused_envc;
PWCHAR envblock = NULL; PWCHAR envblock = NULL;
char **envp = build_env (cur_environ (), envblock, unused_envc, false); char **envp = build_env (env ?: cur_environ (), envblock, unused_envc, false);
PWCHAR p = envblock; PWCHAR p = envblock;
if (envp) if (envp)
@ -146,8 +146,12 @@ sync_winenv ()
cfree (*e); cfree (*e);
cfree (envp); cfree (envp);
} }
/* If we got an env block, just return pointer to win env. */
if (env)
return envblock;
/* Otherwise sync win env of current process with its posix env. */
if (!p) if (!p)
return; return NULL;
while (*p) while (*p)
{ {
PWCHAR eq = wcschr (p, L'='); PWCHAR eq = wcschr (p, L'=');
@ -160,6 +164,7 @@ sync_winenv ()
p = wcschr (p, L'\0') + 1; p = wcschr (p, L'\0') + 1;
} }
free (envblock); free (envblock);
return NULL;
} }
/* /*
@ -419,7 +424,7 @@ cygwin_internal (cygwin_getinfo_types t, ...)
try_to_debug (); try_to_debug ();
break; break;
case CW_SYNC_WINENV: case CW_SYNC_WINENV:
sync_winenv (); create_winenv (NULL);
res = 0; res = 0;
break; break;
case CW_CYGTLS_PADSIZE: case CW_CYGTLS_PADSIZE:
@ -516,6 +521,13 @@ cygwin_internal (cygwin_getinfo_types t, ...)
} }
break; break;
case CW_CVT_ENV_TO_WINENV:
{
char **posix_env = va_arg (arg, char **);
res = (uintptr_t) create_winenv (posix_env);
}
break;
default: default:
set_errno (ENOSYS); set_errno (ENOSYS);
} }

View File

@ -420,12 +420,13 @@ details. */
249: Export pthread_condattr_getclock, pthread_condattr_setclock. 249: Export pthread_condattr_getclock, pthread_condattr_setclock.
250: Export clock_nanosleep. 250: Export clock_nanosleep.
251: RTLD_NODELETE, RTLD_NOLOAD, RTLD_DEEPBIND added. 251: RTLD_NODELETE, RTLD_NOLOAD, RTLD_DEEPBIND added.
252: CW_CVT_ENV_TO_WINENV added.
*/ */
/* Note that we forgot to bump the api for ualarm, strtoll, strtoull */ /* Note that we forgot to bump the api for ualarm, strtoll, strtoull */
#define CYGWIN_VERSION_API_MAJOR 0 #define CYGWIN_VERSION_API_MAJOR 0
#define CYGWIN_VERSION_API_MINOR 251 #define CYGWIN_VERSION_API_MINOR 252
/* There is also a compatibity version number associated with the /* There is also a compatibity version number associated with the
shared memory regions. It is incremented when incompatible shared memory regions. It is incremented when incompatible

View File

@ -134,7 +134,8 @@ typedef enum
CW_INT_SETLOCALE, CW_INT_SETLOCALE,
CW_CVT_MNT_OPTS, CW_CVT_MNT_OPTS,
CW_LST_MNT_OPTS, CW_LST_MNT_OPTS,
CW_STRERROR CW_STRERROR,
CW_CVT_ENV_TO_WINENV
} cygwin_getinfo_types; } cygwin_getinfo_types;
/* Token type for CW_SET_EXTERNAL_TOKEN */ /* Token type for CW_SET_EXTERNAL_TOKEN */