This is the mail archive of the cygwin-developers 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]

[PATCH v4 0/1] Pseudo console support in PTY (v4)


Hi Thomas and Corinna,

I revised the patch to v4.

Major chages from v3:
(1) Refine the algorithm for switching I/O between cygwin apps and
    native console apps. This resolves the following issues.
  - Output from native console app cannot be displayed if the app is
    executed in the background. This is because the I/O is switched
    to cygwin shell.
  - When a native console app is foreground, it lose input if you
    execute:
    echo something > /dev/pty*
    from another terminal.
  - The native console app, which just read input without any output,
    fails.
(2) Add error handlings when attaching to pseudo console fails.
(3) The timing of terminating cygwin-console-helper is changed.
    Previously, it was when the pty master opened first was closed.
    Now, it is when the last pty master is closed.
(4) Clear-screen for "synchronization" is limited only to the first
    attach of pty slave.
(5) Procedures after attaching to pseudo console are moved into
    the function: fixup_after_attach().
(6) Avoid that the code page is set to 65001 even when the locale
    is not *.UTF-8. This fixes the issue that shell freezes when
    non ascii chars are typed.
(7) As a test, call init_console_handler() at attaching to pseudo
    console according to Corinna's suggestion.

On Sat, 6 Apr 2019 23:33:04 +0200 Thomas Wolff wrote:
> If I try a non-Unicode terminal session, e.g. running mintty -o Locale=C 
> -o Charset=CP1252 -, and enter a € key, mintty hangs. While you said it 
> doesn't work (yet), it should better not hang at least.

This is resolved by (6).


On Sat, 6 Apr 2019 23:33:04 +0200 Thomas Wolff wrote:
> Output to alternate screen seems to be forced to the primary screen, mostly;
> if I try to switch screen in various ways (menu, echo "\033[?1047h" > 
> /dev/pty1, before or while cmd.exe runs),
> behaviour appears to be inconsistent and not as expected (expected 
> behaviour is that any output goes to the active screen). Again, I don't 
> see a need that you intercept this at all.

This is resolved by (1).


On Sat, 6 Apr 2019 23:33:04 +0200 Thomas Wolff wrote:
> Character output conversion works with my test program (using 
> WriteConsoleW). Using java, output works too (with proper java encoding 
> option), but non-ASCII input characters are replaced by and echoed as space.

Thanks for the test case. This can be reproduced, but the behaviour
is exactly the same as that in the command prompt, in the both cases
(a) and (b) below. So I think it is not the problem of implementation
of pty.

(a)
chcp 65001
java -Dfile.encoding=UTF-8 YourProg

(b)
chcp 1252
java -Dfile.encoding=CP1252 YourProg


Regarding (7),

On Sat, 6 Apr 2019 19:43:35 +0200 Corinna Vinschen wrote:
> This looks better, but there's still some problem:
> $ cygport gawk.cygport build
> >>> Compiling gawk-4.2.62-1.x86_64
> [pressing Ctrl-C multiple times]
>      14 [main] chmod (7016) child_copy: cygheap read copy failed, 0x180376408..0
> x1803887A8, done 0, windows pid 7016, Win32 error 299
>     766 [main] chmod (7016) C:\cygwin64\bin\chmod.exe: *** fatal error - ccalloc would have returned NULL
>      14 [main] chmod (7016) child_copy: cygheap read copy failed, 0x180376408..0x1803887A8, done 0, windows pid 7016, Win32 error 299
>     766 [main] chmod (7016) C:\cygwin64\bin\chmod.exe: *** fatal error - ccalloc
>  would have returned NULL

I cannot reproduce this, but I added init_console_handler() call after
attaching to pseudo console for a test according to your suggestion.
Could you please test?


D=http://tyan0.dip.jp/cygwin
${D}/x86_64/test/cygwin1-20190412.dll.xz
${D}/x86_64/test/cygwin-console-helper.exe.xz
${D}/x86/test/cygwin1-20190412.dll.xz
${D}/x86/test/cygwin-console-helper.exe.xz


Takashi Yano (1):
  Cygwin: pty: add pseudo console support.

 winsup/cygwin/dtable.cc               |  57 +++
 winsup/cygwin/fhandler.h              |  42 +-
 winsup/cygwin/fhandler_console.cc     |  32 ++
 winsup/cygwin/fhandler_tty.cc         | 671 ++++++++++++++++++++++++--
 winsup/cygwin/fork.cc                 |  24 +
 winsup/cygwin/select.cc               |  22 +-
 winsup/cygwin/spawn.cc                |  55 +++
 winsup/cygwin/tty.cc                  |   7 +
 winsup/cygwin/tty.h                   |  23 +-
 winsup/utils/cygwin-console-helper.cc |  14 +-
 10 files changed, 903 insertions(+), 44 deletions(-)

-- 
2.17.0


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