This is the mail archive of the cygwin-apps@sources.redhat.com 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]

Re: two questions


This sample program demonstrates the problem. I am using execvp for my my
code, by exec() I actually meant the exec family of calls... I'll try to be
clearer next time..

#include <stdio.h>

int
main (int argc, char **argv)
{
  char *prog;
  char passarg[]="A";
  fprintf (stderr, "argv[0] '%s', argv[1] '%s'\n", argv[0], argv[1]);
  prog=(char *)strdup(argv[0]);
  if (argv[1]==NULL)
  {
    fprintf(stderr, "called with no args going to run '%s' with '%s'
\n",prog,passarg);
    sleep(5);
    execl (prog,prog,passarg );
    /* SHOULD NEVER REACH */
    fprintf(stderr, "exec failed!\n");
    sleep(10);
    }
  sleep(10);
}

some tests with this:
installed as \usr\local\pathtest\pathtest.exe
(c:\cygwin\usr\local\pathtest\pathtest.exe)
From explorer: fails
from a shortcut: fails
from a cmd.exe prompt (current dir): works
from a cmd.exe prompt (as \cygwin\usr\local\pathtest\pathtest): fails
from a cmd.exe prompt (as c:\cygwin\usr\local\pathtest\pathtest): stackdump
from a cmd.exe prompt (as ..\pathtest): works
from bash (/cygdrive/c/cygwin/usr/local/pathtest/pathtest): works
from bash(./pathtest): works
from bash(/pathtest): works
from bash(/usr/local/pathtest/pathtest): works

Rob


----- Original Message -----
From: "Chris Faylor" <cgf@cygnus.com>
To: "Robert Collins" <robert.collins@itdomain.com.au>
Cc: "cygapp" <cygwin-apps@sourceware.cygnus.com>
Sent: Sunday, July 16, 2000 2:38 PM
Subject: Re: two questions


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


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