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] |
On Dec 12 14:23, Michael Schaap wrote:Indeed.
Corinna Vinschen wrote:
No, it uses ShellExecute (see "cygstart --reference"). It does indeed need to sync the environment, but it does this using its own code. (Predates cygwin_internal(CW_SYNC_WINENV); I still need to change cygstart some day to use it.)Does cygstart use CreateProcess and/or GetCurrentDirectory instead of fork/exec/getcwd?
If so, cygstart will have to call cygwin_internal(CW_SYNC_WINENV) before
using the native Windows functions.
ShellExecute is the same problem. With 1.7.0 you must use cygwin_internal(CW_SYNC_WINENV), when calling native Windows functions which have even vaguely to do with the current directory.
You're right. I was fooled by the strace output which seemed to suggest that it did.However, this is unrelated to this problem, things go wrong long before that. It appears that cygwin_conv_to_win32_path incorrectly determines the current working directory.
It is called as follows:
cygwin_conv_to_win32_path(aPath, winPath);
where aPath == "hello.txt".
The current directory is "/cygdrive/c/user" =~ "c:\user", but cygwin_conv_to_win32_path thinks that:
normalize_posix_path: /cygdrive/c/WINDOWS/system32/hello.txt = normalize_posix_path (hello.txt)
Hang on. cygwin_conv_to_win32_path does not translate the path into an absolute path, cygwin_conv_to_full_win32_path does that.
I'm running the following simple testcase(tm):Yes, ma'am. :-)
#include <stdio.h> #include <sys/cygwin.h>
int main (int argc, char **argv) { char buf[260];
cygwin_conv_to_win32_path (argv[1], buf); puts (buf); cygwin_conv_to_full_win32_path (argv[1], buf); puts (buf); GetCurrentDirectory (260, buf); puts (buf); cygwin_internal (CW_SYNC_WINENV); GetCurrentDirectory (260, buf); puts (buf); return 0; }
$ pwd /home/corinna/tests $ ./cyg_conv_to_w32 hello.txt hello.txt C:\home\corinna\tests\hello.txt C:\WINDOWS\system32 C:\home\corinna\tests
This shows you what happens. This is not a bug, but deliberately chosen. Use cygwin_internal(CW_SYNC_WINENV), please.
-- 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] |