[patch] cygcheck.cc update for cygpath()

Christopher Faylor cgf-use-the-mailinglist-please@cygwin.com
Sun Mar 9 14:38:00 GMT 2008


On Sun, Mar 09, 2008 at 10:28:06AM +0100, Corinna Vinschen wrote:
>Hi Brian,
>
>Thanks for your patch.  I have a few nits, sorry.
>
>On Mar  8 20:13, Brian Dessent wrote:
>> Index: cygcheck.cc
>> ===================================================================
>> RCS file: /cvs/src/src/winsup/utils/cygcheck.cc,v
>> retrieving revision 1.97
>> diff -u -p -r1.97 cygcheck.cc
>> --- cygcheck.cc	13 Jan 2008 13:41:45 -0000	1.97
>> +++ cygcheck.cc	9 Mar 2008 03:52:07 -0000
>> @@ -807,6 +807,31 @@ ls (char *f)
>>      display_error ("ls: CloseHandle()");
>>  }
>>  
>> +/* If s is non-NULL, save the CWD in a static buffer and set the CWD
>> +   to the dirname part of s.  If s is NULL, restore the CWD last
>> +   saved.  */
>> +static
>> +void save_cwd_helper (const char *s)
>> +{
>> +  static char cwdbuf[MAX_PATH + 1];
>> +  char dirnamebuf[MAX_PATH + 1];
>> +
>> +  if (s)
>> +    {
>> +      GetCurrentDirectory (sizeof (cwdbuf), cwdbuf);
>> +
>> +      /* Remove the filename part from s.  */
>> +      strncpy (dirnamebuf, s, MAX_PATH);
>> +      dirnamebuf[MAX_PATH] = '\0';   // just in case strlen(s) > MAX_PATH
>> +      char *lastsep = strrchr (dirnamebuf, '\\');
>> +      if (lastsep)
>> +        lastsep[1] = '\0';
>> +      SetCurrentDirectory (dirnamebuf);
>> +    }
>> +  else
>> +    SetCurrentDirectory (cwdbuf);
>> +}
>
>Given that Cygwin changes to support long path names, I don't really
>like to see new code still using MAX_PATH and Win32 Ansi functions
>in the utils dir.  I know that the Win32 cwd is always restricted to
>259 chars.  However, there *is* a way to recognize the current working
>directory of the parent Cygwin application.
>
>Bash as well as tcsh, as well as zsh (and probbaly pdksh, too) create an
>environment variable $PWD.  Maybe Cygwin should create $PWD for native
>apps if it's not already available through the parent shell.

I'd really rather not do that.  I don't think Cygwin should be polluting
the environment any more than it has to.  Even if this worked, it is
easily defeatable by setting a PWD environment variable before running
cygwin, so you'd have to keep track of this value through multiple
levels of process invocation.

I know everyone hates it but a cygwin_internal interface could be used
to get the current working directory for applications that need it.  I
would think that only mingw-like applications working in close
conjunction with cygwin would care about this.

cgf



More information about the Cygwin-patches mailing list