two questions

Chris Faylor cgf@cygnus.com
Sat Jul 15 21:38:00 GMT 2000


On Sun, Jul 16, 2000 at 02:26:50PM +1000, Robert Collins wrote:
>Sorry, I should explain more
>
>exec("C:/cygwin/usr/local/program.exe") fails
>exec("C:\\cygwin\usr\local\program.exe") works (\\ c-style escaped)
>
>and program.exe receives the first format from start|run, and from
>shortcuts, or double-clicking on a program. So having a program that calls
>exec based in it's own path will need an library call equivalent to
>cygpath -u (which looks to be cygwin_conv_to_posix_path(name,
>convertedname), or for argv[0] to be a little more consistent.

'exec' is not a cygwin function.  Maybe this function is having problems
with the path that you are specifying above.

The 'exec[lv]*' family of functions should (and as far as I can tell,
do) operate correctly with any valid windows or cygwin path.

The short program below illustrates this:

#include <stdio.h>

int
main (int argc, char **argv)
{
  fprintf (stderr, "argv[0] '%s', argv[1] '%s'\n", argv[0], argv[1]);
  sleep(10);
  execl (argv[1], argv + 2);
}

When I run this from Start->Run I notice that argv[0] has quotes around
it, unlike what happens when running from the command shell.  Cygwin was
preserving the quotes and that thwarts its later attempt to translate
the windows path version of argv[0] into a posix path.  I've checked in
a change to cygwin to cause it to strip the quotes from argv[0].

So, I'm not sure why you are having problems running the
c:/cygwin/usr/local/program.exe.  It works for me, and I would expect
that it would.

cgf

>I've put cygwin_conv_to_posix_path in the program I'm working on, All i'm
>saying is that a longer term solution might be to put something in the
>startup code..
>
>Rob
>
>
>----- Original Message -----
>From: "Chris Faylor" <cgf@cygnus.com>
>To: "cygapp" <cygwin-apps@sourceware.cygnus.com>
>Sent: Sunday, July 16, 2000 1:45 PM
>Subject: Re: two questions
>
>
>> On Sun, Jul 16, 2000 at 01:45:56PM +1000, Robert Collins wrote:
>> >1)Start|run, c:\cygwin\usr\local\program.exe
>> >2)start|run, cmd (running win2k). then (from any drive)
>> >"c:\cygwin\usr\local\program.exe"
>> >
>> >in 1, argv[0] is C:/cygwin/usr/local/program.exe
>> >in 2, argv[0] is /usr/local/program.exe
>> >
>> >Note that bash was not the shell in 2! I'm quite happy to code around
>this
>> >myself, but if someone wanted to provide a pointer as to where I should
>> >place it I'm happy to code around it for cygwin..
>> >
>> >The reason it's a issue, is that I want to call
>exec(argv[0],newswitches),
>> >which the above behaviour scuttles..
>>
>> Why?
>>
>> cgf
>>

-- 
cgf@cygnus.com                        Cygnus Solutions, a Red Hat company
http://sourceware.cygnus.com/         http://www.redhat.com/


More information about the Cygwin-apps mailing list