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: cygstart getting The specified file was not found


On Dec 12 14:23, Michael Schaap wrote:
> Corinna Vinschen wrote:
> >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.
> 
> 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.)

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.

> 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):

  #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.


Corinna

-- 
Corinna Vinschen                  Please, send mails regarding Cygwin to
Cygwin Project Co-Leader          cygwin AT cygwin DOT com
Red Hat

--
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]