This is the mail archive of the cygwin mailing list for the Cygwin project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: strange cygstart bug with current Cygwin versions


On 8-Feb-2006 16:41, Christopher Faylor wrote:
> On Tue, Feb 07, 2006 at 01:25:12PM -0600, Brian Ford wrote:
>   
>> On Tue, 7 Feb 2006, Christopher Faylor wrote:
>>
>>     
>>> I believe that Brian Ford is looking into modifying the new CW_SETUP_WINENV
>>> code to perform the proper conversion of POSIX style to Windows style.
>>>       
>> We're still debating aproaches for solving our problem, so it is possible
>> I won't get to it.  If someone else wants to try, feel free.
>>     
>
> Well, that's disappointing.  I'm not aware of any debates.  I thought
> just this once we could rely on someone else fixing a problem.
>
> I guess I'll look into this when I get a chance.
>
>   
Well, the below code works for cygstart, and does the right thing for
the variables Cygwin converts from POSIX <-> Win32.
Feel free to adapt this to CW_SETUP_WINENV. (Although it might be more
elegant to use conv_envvars[] from environ.cc there.)

If I hear no objections, I'm going to submit this as a path for
cygutils, and ask Chuck to release it. If and when this gets fixed in
CW_SETUP_WINENV, and released, I'll change it to use that instead.

– Michael


/* Copy cygwin environment variables to the Windows environment if
they're not
* already there. */
static void setup_win_environ(void)
{
char **envp = environ;
char *var, *val;
char curval[2];
char *winpathlist;
char winpath[MAX_PATH+1];

while (envp && *envp) {
var = strdup(*envp++);
val = strchr(var, '=');
*val++ = '\0';

if (GetEnvironmentVariable(var, curval, 2) == 0
&& GetLastError() == ERROR_ENVVAR_NOT_FOUND) {
/* Convert POSIX to Win32 where necessary */
if (!strcmp(var, "PATH") ||
!strcmp(var, "LD_LIBRARY_PATH")) {
winpathlist = (char *)
malloc(cygwin_posix_to_win32_path_list_buf_size(val));
if (winpathlist) {
cygwin_posix_to_win32_path_list(val, winpathlist);
SetEnvironmentVariable(var, winpathlist);
free(winpathlist);
}
} else if (!strcmp(var, "HOME") ||
!strcmp(var, "TMPDIR") ||
!strcmp(var, "TMP") ||
!strcmp(var, "TEMP")) {
cygwin_conv_to_win32_path(val, winpath);
SetEnvironmentVariable(var, winpath);
} else {
SetEnvironmentVariable(var, val);
}
}

free(var);
}
}

--
Unsubscribe info:      http://cygwin.com/ml/#unsubscribe-simple
Problem reports:       http://cygwin.com/problems.html
Documentation:         http://cygwin.com/docs.html
FAQ:                   http://cygwin.com/faq/


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]