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: {lp,cb}Reserved2 under Windows 7 and file descriptors


On Jul 14 15:38, Daniel Colascione wrote:
> This is from sigproc.cc:
> 
>   /* It appears that when running under WOW64 on Vista 64, the first DWORD
>      value in the datastructure lpReserved2 is pointing to (msv_count in
>      Cygwin), has to reflect the size of that datastructure as used in the
>      Microsoft C runtime (a count value, counting the number of elements in
>      two subsequent arrays, BYTE[count and HANDLE[count]), even though the C
>      runtime isn't used.  Otherwise, if msv_count is 0 or too small, the
>      datastructure gets overwritten.
> [...]
> While this workaround is indeed necessary for Vista, it's *not* necessary
> for Windows 7, which again handles copying the data structure pointed to by
> lpReserved2 properly. Therefore, needs_count_in_si_lpres2 can be false on
> that platform. 

Thanks for the hint.  You *did* test that, did you?  I made a quick test
on Windows 7 x64.  Starting a shell, running scripts and starting other
processes looks good.  I checked in the change to wincap.cc.

> [...]
> Furthermore, there is a very long-standing issue with Cygwin pty devices:
> while Cygwin programs report true from isatty() when called on a Cygwin PTY,
> MSVCRT applications do *not*.

Right.

> [...]
> However, due to the way the CRT works, we can fool it into thinking a
> passed-in file descriptor is actually a tty. All you need to do is use 3 for
> the value of *lpReserved2, then follow it with three flag bytes, then three
> HANDLE values --- corresponding respectively to flags[fd0], flags[fd1],
> flags[fd2] and fh[0], fh[fd1] and fh[fd2].  This information would be
> followed by the normal child_info structure. If stdin, stdout, or stderr is
> a Cygwin PTY, Cygwin can manually set the FDEV bit (described in the old
> MSDOS headers) in corresponding flag byte, which will make _isatty() return
> true in the child.
> 
> (Not that I've actually tried it --- it's just an idea.)

That sounds like an interesting idea.  I'll play around with it as soon
as I have a bit of spare time again.  Unless, of course, nobody else
will try it or already did...


Corinna

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

--
Problem reports:       http://cygwin.com/problems.html
FAQ:                   http://cygwin.com/faq/
Documentation:         http://cygwin.com/docs.html
Unsubscribe info:      http://cygwin.com/ml/#unsubscribe-simple


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