Commit Graph

12612 Commits

Author SHA1 Message Date
Ken Brown 84d446734f Document recent FIFO changes 2020-05-08 07:42:14 -04:00
Ken Brown 98dfadec3a Cygwin: FIFO: update commentary
The beginning of fhandler_fifo.cc contains a long comment giving an
overview of the FIFO implementation.  This is now updated to describe
the support for multiple readers.
2020-05-08 06:45:24 -04:00
Ken Brown 4811889e0c Cygwin: FIFO: support opening multiple readers
Although we can have multiple readers open because of dup/fork/exec,
the current code does not support multiple readers opening a FIFO by
explicitly calling 'open'.

The main complication in supporting this is that when a blocking
reader tries to open and there's already one open, it has to check
whether there any writers open.  It can't rely on the write_ready
event, whose state hasn't changed since the first writer opened.

To fix this, add two new named events, check_write_ready_evt and
write_ready_ok_evt, and a new method, check_write_ready().

The first event signals the owner's reader thread to call
check_write_ready(), which polls the fc_handler list to check for
connected writers.  If it finds none, it checks to see if there's a
writer in the process and then sets/resets write_ready appropriately.

When check_write_ready() finishes it sets write_ready_ok_evt to signal
the reader that write_ready has been updated.

The polling is done via fifo_client_handler::pipe_state().  As long as
it's calling that function anyway, check_write_ready() updates the
state of each handler.

Also add a new lock to prevent a race if two readers are trying to
open simultaneously.
2020-05-08 06:45:24 -04:00
Ken Brown bf66a56cca Cygwin: FIFO: allow any reader to take ownership
Add a take_ownership method, used by raw_read and select.cc:peek_fifo.
It wakes up all fifo_reader_threads and allows the caller to become
owner.  The work is done by the fifo_reader_threads.

For synchronization we introduce several new fhandler_fifo data
members and methods:

- update_needed_evt signals the current owner to stop listening for
  writer connections and update its fc_handler list.

- shared_fc_handler() gets and sets the status of the fc_handler
  update process.

- get_pending_owner() and set_pending_owner() get and set the reader
  that is requesting ownership.

Finally, a new 'reading_lock' prevents two readers from trying to take
ownership simultaneously.
2020-05-08 06:45:24 -04:00
Ken Brown f35dfff3de Cygwin: FIFO: find a new owner when closing
If the owning reader is closing, wait for another reader (if there is
one) to take ownership before closing the owner's pipe handles.

To synchronize the ownership transfer, add events owner_needed_evt and
owner_found_evt, and add methods owner_needed and owner_found to
set/reset them.

Modify the fifo_reader_thread function to wake up all non-owners when
a new owner is needed.

Make a cosmetic change in close so that fhandler_base::close is called
only if we have a write handle.  This prevents strace output from
being littered with statements that the null handle is being closed.
2020-05-08 06:45:24 -04:00
Ken Brown 39a9cd9465 Cygwin: FIFO: take ownership on exec
If fixup_after_exec is called on a non-close-on-exec reader whose
parent is the owner, transfer ownership to the child.  Otherwise the
parent's pipe handles will be closed before any other reader can
duplicate them.

To help with this, make the cancel_evt and thr_sync_evt handles
inheritable, so that the child can terminate the parent's
fifo_reader_thread (and the parent will update the shared fc_handler
list).

Add an optional argument 'from_exec' to update_my_handlers to simplify
its use in this case; no handle duplication is required.
2020-05-08 06:45:20 -04:00
Ken Brown d9918451e2 Cygwin: FIFO: add a shared fifo_client_handler list
This is in a new shared memory section.  We will use it for temporary
storage of the owner's fc_handler list when we need to change owner.
The new owner can then duplicate the pipe handles from that list
before taking ownership.

Add several shared data members and methods that are needed for the
duplication process

Add methods update_my_handlers and update_shared_handlers that carry
out the duplication.

Allow the shared list to grow dynamically, up to a point.  Do this by
initially reserving a block of memory (currently 100 pages) and only
committing pages as needed.

Add methods create_shared_fc_handler, reopen_shared_fc_handler, and
remap_shared_fc_handler to create the new shared memory section,
reopen it, and commit new pages.  The first is called in open, the
second is called in dup/fork/exec, and the third is called in
update_shared_handlers if more shared memory is needed.

Modify the fifo_reader_thread function to call update_my_handlers when
it finds that there is no owner.  Also make it call
update_shared_handlers when the owner's thread terminates, so that the
new owner will have an accurate shared fc_handler list from which to
duplicate.

For convenience, add new methods cleanup_handlers and
close_all_handlers.  And add an optional arg to add_client_handler
that allows it to create a new fifo_client_handler without creating a
new pipe instance.
2020-05-08 06:36:31 -04:00
Ken Brown c76ded2ca0 Cygwin: FIFO: allow fc_handler list to grow dynamically
Make fc_handler a pointer to malloc'd memory instead of a fixed-size
array.  The size is now a new data member 'shandlers'.  Call realloc
in add_client_handler if we need to grow the array.

free fc_handler in close.  As long as we're touching that code, also
remove an unneeded lock.
2020-05-08 06:32:00 -04:00
Ken Brown 606baf5566 Cygwin: FIFO: designate one reader as owner
Among all the open readers of a FIFO, one is declared to be the owner.
This is the only reader that listens for client connections, and it is
the only one that has an accurate fc_handler list.

Add shared data and methods for getting and setting the owner, as well
as a lock to prevent more than one reader from accessing these data
simultaneously.

Modify the fifo_reader_thread so that it checks the owner at the
beginning of its loop.  If there is no owner, it takes ownership.  If
there is an owner but it is a different reader, the thread just waits
to be canceled.  Otherwise, it listens for client connections as
before.

Remove the 'first' argument from create_pipe_instance.  It is not
needed, and it may be confusing in the future since only the owner
knows whether a pipe instance is the first.

When opening a reader, don't return until the fifo_reader_thread has
time to set an owner.

If the owner closes, indicate that there is no longer an owner.

Clear the child's fc_handler list in dup, and don't bother duplicating
the handles.  The child never starts out as owner, so it can't use
those handles.

Do the same thing in fixup_after_fork in the close-on-exec case.  In
the non-close-on-exec case, the child inherits an fc_handler list that
it can't use, but we can just leave it alone; the handles will be
closed when the child is closed.
2020-05-08 06:32:00 -04:00
Ken Brown 16e7c10578 Cygwin: FIFO: introduce a new type, fifo_reader_id_t
This uniquely identifies an fhandler_fifo open for reading in any
process.

Add a new data member 'me' of this type, which is set in open, dup,
fork, and exec.
2020-05-08 06:32:00 -04:00
Ken Brown 365818a4a5 Cygwin: FIFO: keep track of the number of readers
Add data and methods to the shared memory that keep track of the
number of open readers.

Increment this number in open, dup, fork, and exec.  Decrement it in
close.  Reset read_ready if there are no readers left.
2020-05-08 06:32:00 -04:00
Ken Brown 878eb22462 Cygwin: FIFO: add shared memory
Even though we currently allow a FIFO to be opened for reading only
once, we can still have more than one reader open because of dup and
fork.  Add a named shared memory section accessible to all readers of
a given FIFO.  In future commits we will add information needed by all
readers to this section

Add a class fifo_shmem_t that lets us access this information.

Add a method create_shmem that is called when a reader opens, and add
a method reopen_shmem that is called by dup, fork, and exec.  (Each
new reader needs its own view of the shared memory.)
2020-05-08 06:32:00 -04:00
Ken Brown 71726ba70b Cygwin: FIFO: use a cygthread instead of a homemade thread
This will simplify future work.

Rename the thread from "listen_client_thread" to "fifo_reader_thread"
because it will be used for more than just listening.

Remove the fixup_before stuff, which won't be needed after future
changes to fixup_after_fork and fixup_after_exec.
2020-05-08 06:32:00 -04:00
Ken Brown 9ee8fdf2b3 Cygwin: FIFO: make opening a writer more robust
- Make read_ready a manual-reset event.

- Signal read_ready in open instead of in the listen_client_thread.

- Don't reset read_ready when the listen_client thread terminates;
  instead do it in close().

- Rearrange open and change its error handling.

- Add a wait_open_pipe method that waits for a pipe instance to be
  available and then calls open_pipe.  Use it when opening a writer if
  we can't connect immediately.  This can happen if the system is
  heavily loaded and/or if many writers are trying to open
  simultaneously.
2020-05-08 06:32:00 -04:00
Ken Brown 301454f132 Cygwin: FIFO: fix hit_eof
According to Posix, a FIFO open for reading is at EOF if it is empty
and there are no writers open.

The only way to test this is to poll the fifo_client_handlers as in
raw_read and select.cc:peek_fifo.  The current hit_eof instead relies
on the value of nconnected, which can be out of date.  On the one
hand, it doesn't take into account writers that were connected but
have since closed.  On the other hand, it doesn't take into account
writers that are in the process of opening but haven't yet connected.

Fix this by introducing a maybe_eof method that tentatively assumes
EOF if there are no connected writers after polling.  Then check for
writers currently opening (via a new 'writer_opening' event), and wait
for the fifo_reader_thread to record any new connection that was made
while we were polling.

To handle the needs of peek_fifo, replace the get_fc_handle method
by a get_fc_handler method, and add a fifo_client_handler::get_state
method.

Remove the is_connected method, which was used only in peek_fifo and
is no longer needed.

Remove the nconnected data member, which was used only for the flawed
hit_eof.

Add some comments about events to fhandler.h.
2020-05-08 06:32:00 -04:00
Ken Brown 13c65c43c2 Cygwin: FIFO: dup/fork/exec: make sure child starts unlocked
There can be deadlocks if the child starts with its fifo_client_lock
in the locked state.
2020-05-08 06:32:00 -04:00
Ken Brown 624fda1e96 Cygwin: FIFO: honor the flags argument in dup
Also improve the error handling.
2020-05-08 06:32:00 -04:00
Ken Brown 25e8727368 Cygwin: FIFO: remove the arm method
There's no reason to check for errors when we set read_ready or
write_ready.  We don't do that for other events.
2020-05-08 06:32:00 -04:00
Ken Brown 9b2afd78ce Cygwin: FIFO: simplify the listen_client_thread code
Always return 0; no one is doing anything with the return value
anyway.

Remove the return value from stop_listen_client.

Make the connection event auto-reset, so that we don't have to reset
it later.

Simplify the process of connecting a bogus client when thread
termination is signaled.

Make some failures fatal.

Remove the unnecessary extra check for thread termination near the end
of listen_client_thread.
2020-05-08 06:32:00 -04:00
Ken Brown 32dbc3d215 Cygwin: FIFO: change the fifo_client_connect_state enum
Make the values correspond to the possible return values of
fifo_client_handler::pipe_state().

When cleaning up the fc_handler list in listen_client_thread(), don't
delete handlers in the fc_closing state.  I think the pipe might still
have input to be read in that case.

Set the state to fc_closing later in the same function if a connection
is made and the status returned by NtFsControlFile is
STATUS_PIPE_CLOSING.

In raw_read, don't error out if NtReadFile returns an unexpected
status; just set the state of that handler to fc_error.  One writer in
a bad state doesn't justify giving up on reading.
2020-05-08 06:32:00 -04:00
Ken Brown ce23e97640 Cygwin: FIFO: simplify the fifo_client_handler structure
Replace the 'fhandler_base *' member by a HANDLE to the server side of
the Windows named pipe instance.  Make the corresponding
simplifications throughout.
2020-05-08 06:32:00 -04:00
Ken Brown d05124dc6b Cygwin: FIFO: minor change - use NtClose
Replace CloseHandle by NtClose since all handles are created by NT
functions.
2020-05-08 06:32:00 -04:00
Corinna Vinschen 72865dc2a3 Revert "localtime define _DIAGASSERT" and followups affecting localtime.cc
This reverts commits 453b6d17bf,
                     489a47d603,
                     3003c3dacd,
                     9e29639ca0,
                     a40701c7dc,
                     0a41de2725,
                     b8aa5f7a0f,
                     0f4bda8792,
                     65bf580752,
                     3f0c2ac96e,
                     76d4d40b8b,
                     f2e06d8af5.
2020-05-04 11:25:30 +02:00
Johannes Schindelin 717db9fd1c setup_pseudoconsole(): handle missing/incorrect helper gracefully
When `cygwin-console-helper.exe` is either missing, or corresponds to a
different Cygwin runtime, we currently wait forever while setting up
access to the pseudo console, even long after the process is gone that
was supposed to signal that it set up access to the pseudo console.

Let's handle that more gracefully: if the process exited without
signaling, we cannot use the pseudo console. In that case, let's just
fall back to not using it.

Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
2020-05-04 11:19:19 +02:00
Corinna Vinschen 453b6d17bf localtime define _DIAGASSERT 2020-04-29 09:51:52 +02:00
Corinna Vinschen 489a47d603 localtime 1.82 2020-04-28 21:35:41 +02:00
Corinna Vinschen 3003c3dacd localtime 1.81 2020-04-28 21:26:45 +02:00
Corinna Vinschen 9e29639ca0 localtime 1.80 2020-04-28 21:21:14 +02:00
Corinna Vinschen a40701c7dc localtime 1.79 2020-04-28 21:20:18 +02:00
Corinna Vinschen 0a41de2725 localtime 1.78 2020-04-28 21:14:01 +02:00
Corinna Vinschen b8aa5f7a0f localtime 1.77 2020-04-28 20:58:29 +02:00
Corinna Vinschen 0f4bda8792 localtime 1.76 2020-04-28 20:57:34 +02:00
Corinna Vinschen 65bf580752 localtime 1.75 2020-04-28 20:56:16 +02:00
Corinna Vinschen 3f0c2ac96e localtime 1.74 2020-04-28 20:50:57 +02:00
Corinna Vinschen 76d4d40b8b localtime 1.73 2020-04-27 11:22:57 +02:00
Corinna Vinschen f2e06d8af5 Cygwin: localtime.cc: reformat for easier patching
Signed-off-by: Corinna Vinschen <corinna@vinschen.de>
2020-04-27 11:22:51 +02:00
Corinna Vinschen d94763fc2e Cygwin: add release message for fixed floppy bugs
Signed-off-by: Corinna Vinschen <corinna@vinschen.de>
2020-04-24 16:40:25 +02:00
Corinna Vinschen 39a1c3c96f Cygwin: raw disk I/O: lock floppys as well
The workaround to access the full disk required since Vista
and described in http://support.microsoft.com/kb/942448
(NOT ACCESSIBLE at the time of writing this commit message)
is required on floppy drives as well.

Signed-off-by: Corinna Vinschen <corinna@vinschen.de>
2020-04-24 16:22:26 +02:00
Corinna Vinschen b834921895 Cygwin: raw disk I/O: Fix return value in error case
The cast to generate the return value uses a DWORD variable
as test and set value.  The error case is the constant -1.
Given the type of the other half of the conditioal expression,
-1 is cast to DWORD as well.

On 64 bit, this results in the error case returning a 32 bit
-1 value which is equivalent to (ssize_t) 4294967295 rather
than (ssize_t) -1.

Add a fixing cast.

Signed-off-by: Corinna Vinschen <corinna@vinschen.de>
2020-04-24 16:19:09 +02:00
Corinna Vinschen 5a7e130c31 Cygwin: file I/O: make sure to treat write return value as ssize_t
The return type of fhandler write methods is ssize_t.  Don't
use an int to store the return value, use ssize_t.  Use ptrdiff_t
for the buffer size.

Signed-off-by: Corinna Vinschen <corinna@vinschen.de>
2020-04-24 16:14:43 +02:00
David Macek via Cygwin-patches 8a0bdd84b8 Cygwin: accounts: Report unrecognized db_* nsswitch.conf keywords
Signed-off-by: David Macek <david.macek.0@gmail.com>
2020-04-22 09:32:33 +02:00
David Macek via Cygwin-patches 969c8392fe Cygwin: accounts: Don't keep old schemes when parsing nsswitch.conf
The implicit assumption seemed to be that any subsequent occurence of
the same setting in nsswitch.conf is supposed to rewrite the previous
ones completely.  This was not the case if the third or any further
schema was previously defined and the last line defined less than that
(but at least 2), for example:

```
db_home: windows cygwin /myhome/%U
db_home: cygwin desc
```

Let's document this behavior as well.

Signed-off-by: David Macek <david.macek.0@gmail.com>
2020-04-22 09:32:33 +02:00
David Macek via Cygwin-patches d5add9ee5e Cygwin: accounts: Unify nsswitch.conf db_* defaults
Signed-off-by: David Macek <david.macek.0@gmail.com>
2020-04-22 09:32:33 +02:00
Corinna Vinschen f47347716c Cygwin: Add David Macek to CONTRIBUTORS
Signed-off-by: Corinna Vinschen <corinna@vinschen.de>
2020-04-21 10:39:36 +02:00
Corinna Vinschen 6b97962073 Cygwin: symlinks: fix WSL symlink creation if cygdrive prefix is /
If the cygdrive prefix is /, then the following happens right now:

  $ ln -s /tmp/foo .
  $ ls -l foo
  lrwxrwxrwx 1 user group 12 Apr 15 23:44 foo -> /mnt/tmp/foo

Fix this by skipping cygdrive prefix conversion to WSL drive
prefix "/mnt", if the cygdrive prefix is just "/".  There's no
satisfying way to do the right thing all the time in this case
anyway.  For a description and the alternatives, see
https://cygwin.com/pipermail/cygwin-developers/2020-April/011859.html

Also, fix a typo in a comment.

Signed-off-by: Corinna Vinschen <corinna@vinschen.de>
2020-04-21 10:39:36 +02:00
David Macek via Cygwin-patches 5951b3e600 cygheap_pwdgrp: Handle invalid db_* entries correctly
If the first scheme in db_* was invalid, the code would think there
were no schemes specified and replace the second scheme with
NSS_SCHEME_DESC.

Signed-off-by: David Macek <david.macek.0@gmail.com>
2020-04-17 09:54:40 +02:00
Corinna Vinschen 1fac24078a Cygwin: faq: disable outdated "sshd in domain" faq
Signed-off-by: Corinna Vinschen <corinna@vinschen.de>
2020-04-14 13:26:37 +02:00
Brian Inglis 073edd5329 proc_cpuinfo: Add PPIN support for AMD
Newer AMD CPUs support a feature called protected processor
identification number (PPIN). This feature can be detected via
CPUID_Fn80000008_EBX[23].
2020-04-14 12:35:51 +02:00
Corinna Vinschen 3d1360113d Cygwin: utils: override definition of PMEM_EXTENDED_PARAMETER
PMEM_EXTENDED_PARAMETER is defined in the local winlean.h as long
as mingw-w64 doesn't define it (in winnt.h).  ntdll.h needs the
definition for declaring NtMapViewOfSectionEx.  cygpath.cc and ps.cc
both include ntdll.h but not winlean.h, so they complain about the
missing definition.

Signed-off-by: Corinna Vinschen <corinna@vinschen.de>
2020-04-07 19:04:41 +02:00
Corinna Vinschen 3fe9b02ccd Cygwin: mmap_alloc: fix comment to document using the extended memory API
Signed-off-by: Corinna Vinschen <corinna@vinschen.de>
2020-04-07 18:23:11 +02:00
Corinna Vinschen b8ecbaaac0 Cygwin: threads: use extended memory API if available
So far Cygwin was jumping through hoops to restrict memory
allocation to specific regions.  With the advent of VirtualAlloc2
and MapViewOfFile3 (and it's NT counterpart NtMapViewOfSectionEx),
we can skip searching for free space in the specific regions
and just call these functions and let the OS do the job more
efficiently and less racy.

Use VirtualAlloc2 on W10 1803 and later in thread stack allocation.

Signed-off-by: Corinna Vinschen <corinna@vinschen.de>
2020-04-07 18:23:11 +02:00
Corinna Vinschen 8d0a7701aa Cygwin: mmap: use extended memory API if available
So far Cygwin was jumping through hoops to restrict memory
allocation to specific regions.  With the advent of VirtualAlloc2
and MapViewOfFile3 (and it's NT counterpart NtMapViewOfSectionEx),
we can skip searching for free space in the specific regions
and just call these functions and let the OS do the job more
efficiently and less racy.

Use the new functions on W10 1803 and later in mmap.

Signed-off-by: Corinna Vinschen <corinna@vinschen.de>
2020-04-07 17:42:02 +02:00
Corinna Vinschen e18f7f99cc Cygwin: memory: declare extended memory API
Windows 10 1803 introduced an extended memory API allowing
to specify memory regions allocations are to be taken off.

In preparation of using this API, define the struct
MEM_EXTENDED_PARAMETER and friends.  Declare and allow to
autoload the functions VirtualAlloc2 and NtMapViewOfSectionEx.

Introduce a wincap flag has_extended_mem_api.

Signed-off-by: Corinna Vinschen <corinna@vinschen.de>
2020-04-07 17:42:02 +02:00
Corinna Vinschen ccb3a40dad Cygwin: threads: add missing include of mmap_alloc.h
This is needed for using mmap_alloc.alloc()

Signed-off-by: Corinna Vinschen <corinna@vinschen.de>
2020-04-07 17:42:02 +02:00
Corinna Vinschen e8ae404440 Cygwin: threads: lower thread size from pool to 256 Megs
Signed-off-by: Corinna Vinschen <corinna@vinschen.de>
2020-04-07 14:18:08 +02:00
Corinna Vinschen aa4d960306 Cygwin: threads: use mmap area to fulfill requests for big stacks
Otherwise big stacks have a higher probability to collide with
randomized PEBs and TEBs after fork.

Signed-off-by: Corinna Vinschen <corinna@vinschen.de>
2020-04-07 14:18:08 +02:00
Corinna Vinschen ece49e4090 Cygwin: symlinks: Allow traversing WSL symlinks
Unfortunately Windows doesn't understand WSL symlinks,
despite being a really easy job.  NT functions trying
to access paths traversing WSL symlinks return the status
code STATUS_IO_REPARSE_TAG_NOT_HANDLED.  Handle this
status code same as STATUS_OBJECT_PATH_NOT_FOUND in
symlink_info::check to align behaviour to traversing
paths with other non-NTFS type symlinks.

Signed-off-by: Corinna Vinschen <corinna@vinschen.de>
2020-04-05 16:18:05 +02:00
Corinna Vinschen 44fe41a766 Cygwin: docs: revamp docs explaining symlinks
The descriptions of symlink handling are a bit dated, so
revamp them and add the new WSL symlink type.

Signed-off-by: Corinna Vinschen <corinna@vinschen.de>
2020-04-03 21:44:00 +02:00
Corinna Vinschen 44da5e4b8c Cygwin: symlinks: create WSL symlinks on supporting filesystems
WSL symlinks are reparse points containing a POSIX path in UTF-8.
On filesystems supporting reparse points, use this symlink type.
On other filesystems, or in case of error, fall back to the good
old plain SYSTEM file.

Signed-off-by: Corinna Vinschen <corinna@vinschen.de>
2020-04-03 21:40:01 +02:00
Corinna Vinschen fb834beebe Cygwin: symlinks: fix WSL symlinks pointing to /mnt
Commit 4a36897af3 allowed to convert /mnt/<drive> path
prefixes to Cygwin cygdrive prefixes on the fly.  However,
the patch neglected WSL symlinks pointing to the /mnt
directory.  Rearrange path conversion so /mnt is converted
to the cygdrive prefix path itself.

Signed-off-by: Corinna Vinschen <corinna@vinschen.de>
2020-04-02 22:25:55 +02:00
Biswapriyo Nath 1171927f1a winsup/cygwin: remove defines added in mingw-w64 v7.0.0
Signed-off-by: Biswapriyo Nath <nathbappai@gmail.com>
2020-04-01 11:15:25 +02:00
Corinna Vinschen 4a36897af3 Cygwin: symlinks: support WSL symlinks
Treat WSL symlinks just like other symlinks.  Convert
absolute paths pointing to Windows drives via
/mnt/<driveletter> to Windows-style paths <driveletter>:

Signed-off-by: Corinna Vinschen <corinna@vinschen.de>
2020-03-27 12:12:31 +01:00
Corinna Vinschen d2e0b65a7f Cygwin: serial: fix GCC warning
Signed-off-by: Corinna Vinschen <corinna@vinschen.de>
2020-03-26 14:13:37 +01:00
Corinna Vinschen 009c7a0553 Revert "Cygwin: serial: read: if VMIN > 0, wait for VMIN chars in inbound queue"
This reverts commit 082f2513c7.

Turns out, Linux as well as BSD really only wait for the smaller
number, MIN or # of requested bytes.

Signed-off-by: Corinna Vinschen <corinna@vinschen.de>
2020-03-25 21:01:29 +01:00
Corinna Vinschen 8ffe12b394 fhandler_serial: fix comments
Signed-off-by: Corinna Vinschen <corinna@vinschen.de>
2020-03-25 12:25:06 +01:00
Corinna Vinschen 082f2513c7 Cygwin: serial: read: if VMIN > 0, wait for VMIN chars in inbound queue
Per termios, read waits for MIN chars even if the number of requested
bytes is less.  This requires to add WaitCommEvent to wait non-busily
for MIN chars prior to calling ReadFile, so, reintroduce it.

Signed-off-by: Corinna Vinschen <corinna@vinschen.de>
2020-03-25 12:22:26 +01:00
Corinna Vinschen 2a4b1de773 Cygwin: serial: use per call OVERLAPPED structs
Sharing the OVERLAPPED struct and event object in there between
read and select calls in the fhandler might have been a nice
optimization way back when, but it is a dangerous, not thread-safe
approach.  Fix this by creating per-fhandler, per-call OVERLAPPED
structs and event objects on demand.

Signed-off-by: Corinna Vinschen <corinna@vinschen.de>
2020-03-23 21:06:03 +01:00
Corinna Vinschen a1f0585454 Cygwin: serial: select: call ClearCommError prior to calling WaitCommEvent
This (hopefully) eliminates a race condition

Signed-off-by: Corinna Vinschen <corinna@vinschen.de>
2020-03-23 17:23:19 +01:00
Corinna Vinschen 3a74630f75 Cygwin: serial: select: fix WaitCommEvent request
- make sure event object is reset
- set read_ready to true if WaitCommEvent returns success
- improve debugging

Signed-off-by: Corinna Vinschen <corinna@vinschen.de>
2020-03-23 13:08:32 +01:00
Corinna Vinschen 912c902615 Cygwin: serial: tcsetattr: set timeouts unconditionally
tcsetattr checks if the VTIME and VMIN values changed and only
calls SetCommTimeouts if so.  That's a problem if tcsetattr
is supposed to set VTIME and VIMN to 0, because these are the
start values anyway.  But this requires to set ReadIntervalTimeout
to MAXDWORD, which just doesn't happen.

Fix this by dropping the over-optimization of checking the old
values before calling SetCommTimeouts,

Signed-off-by: Corinna Vinschen <corinna@vinschen.de>
2020-03-23 12:13:35 +01:00
Corinna Vinschen 72294cd211 Cygwin: serial: avoid overrun of vtime
After changing the type of fhandler_serial::vtime_ to cc_t, vtime_
must be stored in 10s of seconds, not in milliseconds.

Signed-off-by: Corinna Vinschen <corinna@vinschen.de>
2020-03-22 15:15:19 +01:00
Åke Rehnman e4f9fc92ac Cygwin: serial: select: fix previous revamp patch
- We need a verify function.
- The event object referenced in WaitCommEvent must not be a local var,
  move it into fhandler_serial.
2020-03-22 15:15:19 +01:00
Corinna Vinschen 2929599590 Cygwin: serial: revamp overlapped IO in read and select
Get rid of WaitCommEvent and using overlapped_armed to share the
same overlapped operation between read and select.  Rather, make
sure to cancel the overlapped IO before leaving any of these functions.

Signed-off-by: Corinna Vinschen <corinna@vinschen.de>
2020-03-22 15:15:19 +01:00
Corinna Vinschen 93b491c4f2 Cygwin: serial: read: revamp raw_read, change vmin_ and vtime_ to cc_t
- Datatypes were incorrect, especially vmin_ and vtime_.
  Change them to cc_t, as in user space.

- Error checking had a gap or two.  Debug output used the
  wrong formatting.

- Don't use ev member for ClearCommError and WaitCommEvent.
  Both returned values are different (error value vs. event
  code).  The values are not used elsewhere so it doesn't make
  sense to store them in the object.  Therefore, drop ev member.

- Some variable names were not very helpful.  Especially using
  n as lpNumberOfBytesTransferred from GetOverlappedResult and
  then actually printing it as if it makes sense was quite
  puzzeling.

- Rework the loop and the definition of minchars so that it
  still makes sense when looping.

Signed-off-by: Corinna Vinschen <corinna@vinschen.de>
2020-03-22 15:15:19 +01:00
Corinna Vinschen 9e106db0ad Cygwin: serial: select: simplify peek_serial
- Don't use ev member for ClearCommError and WaitCommEvent.
  Both returned values are different (error value vs. event
  code).  The values are not used elsewhere so it doesn't make
  sense to store them in the object.

- Drop local variable ready which is used inconsequentially.

- Since WFSO already waits 10 ms, don't wait again if no char
  is in the inbound queue.

- Avoid else if chains.

- Only print one line of debug output on error.

- Drop overlapped_armed < 0 check.  This value is only set in
  fhandler_serial::raw_read if VTIME > 0, and even then it's only
  set to be immediately reset to 0 before calling ReadFile.  So
  overlapped_armed is never actually < 0 when calling select.

- Fix a screwed up statement order.

Signed-off-by: Corinna Vinschen <corinna@vinschen.de>
2020-03-22 15:15:19 +01:00
Jon Turney 6c8392d651
Cygwin: Use a separate Start Menu folder for WoW64 installs
This aligns the shortcuts to documentation with the setup changes in
https://sourceware.org/pipermail/cygwin-apps/2020-March/039873.html

v2:
Create/remove the Start Menu directory as needed/possible
Correctly use that directory when making shortcuts
2020-03-21 17:16:53 +00:00
Corinna Vinschen 7947581905 Cygwin: serial: wait for CancelIo completion
Per https://devblogs.microsoft.com/oldnewthing/20110202-00/?p=11613
GetOverlappedResult must be called blocking, waiting for the overlapped
operation to complete.

Signed-off-by: Corinna Vinschen <corinna@vinschen.de>
2020-03-16 10:20:16 +01:00
Takashi Yano via Cygwin-patches 071b8e0cbd Cygwin: pty: Add FreeConsole to destructor of pty slave.
- When pseudo console is closed, all the processes attched to the
  pseudo console are terminated. This causes the problem reported
  in https://sourceware.org/pipermail/cygwin/2020-March/244046.html.
  This patch fixes the issue.
2020-03-13 10:55:41 +01:00
Corinna Vinschen 57a80207ff Cygwin: serial: try fix o_nonblock 2020-03-12 16:07:01 +01:00
Corinna Vinschen bd22d2f91e Cygwin: belatedly add Hans-Bernhard to CONTRIBUTORS file
Signed-off-by: Corinna Vinschen <corinna@vinschen.de>
2020-03-11 17:40:03 +01:00
Corinna Vinschen b74bc88385 Cygwin: fix formatting: drop trailing whitespace
Signed-off-by: Corinna Vinschen <corinna@vinschen.de>
2020-03-11 13:45:58 +01:00
Corinna Vinschen 3bb346d593 Cygwin: fix formatting: collapse whitespace-only lines
Signed-off-by: Corinna Vinschen <corinna@vinschen.de>
2020-03-11 13:45:58 +01:00
Corinna Vinschen d2ef2331f9 Cygwin: fix formatting: drop spaces leading tabs
Signed-off-by: Corinna Vinschen <corinna@vinschen.de>
2020-03-11 13:45:58 +01:00
Corinna Vinschen 256bc8bde0 Cygwin: fix formatting: replace TAB char with \t in string constant
Signed-off-by: Corinna Vinschen <corinna@vinschen.de>
2020-03-11 13:45:57 +01:00
Takashi Yano 3e7fff6b49 Cygwin: console: Fix behaviour of "ESC 8" after reset.
- This patch matches the behaviour of "ESC 8" (DECRC) to the real
  xterm after full reset (RIS), soft reset (DECSTR) and "CSI 3 J".
2020-03-09 09:52:06 +01:00
Hans-Bernhard Broeker bf0cb64d90 Do not bother passing optional argument to WriteConsoleA.
Passing a pointer to a local variable to WriteConsoleA is
not actually needed if we're not going to do anything with
what WriteConsoleA would put in there.

For the wpbuf class the pointer argument was made optional,
so it can be just left out; other call places now pass a
NULL pointer instead.  The local variables `wn' and `n'
are no unused, so they go away.
2020-03-09 09:52:06 +01:00
Hans-Bernhard Broeker b0f78f15b7 Collect handling of wpixput and wpbuf into a helper class.
Replace direct access to a pair of co-dependent variables
by calls to methods of a class that encapsulates their relation.

Also replace C #define by C++ class constant.
2020-03-09 09:52:06 +01:00
Corinna Vinschen ecf27dd2e0 Cygwin: console: convert wpbuf_put to inline function
fix potential buffer overrun while at it

Signed-off-by: Corinna Vinschen <corinna@vinschen.de>
2020-03-02 20:30:09 +01:00
Takashi Yano b4bc238311 Cygwin: console: Add a workaround for "ESC 7" and "ESC 8".
- In xterm compatible mode, "ESC 7" and "ESC 8" do not work properly
  in the senario:
   1) Execute /bin/ls /bin to fill screen.
   2) Sned CSI?1049h to alternate screen.
   3) Reduce window size.
   4) Send CSI?1049l to resume screen.
   5) Send "ESC 7" and "ESC 8".
  After sending "ESC 8", the cursor goes to incorrect position. This
  patch adds a workaround for this issue.
2020-03-02 19:46:40 +01:00
Takashi Yano 750cd6e5b2 Cygwin: console: Prevent buffer overrun.
- This patch prevent potential buffer overrun in the code handling
  escape sequences.
2020-03-02 19:46:40 +01:00
Takashi Yano 10d8c2782d Cygwin: console: Fix setting/unsetting xterm mode for input.
- This patch fixes the issue that xterm compatible mode for input
  is not correctly set/unset in some situation such as:
   1) cat is stopped by ctrl-c.
   2) The window size is changed in less.
  In case 1), request_xterm_mode_input(true) is called in read(),
  however, cat is stopped without request_xterm_mode_input(false).
  In case 2), less uses longjmp in signal handler, therefore,
  corresponding request_xterm_mode_input(false) is not called if
  the SIGWINCH signal is sent within read(). With this patch,
  InterlockedExchange() is used instead of InterlockedIncrement/
  Decrement().
2020-03-02 19:46:40 +01:00
Takashi Yano 7f5051d766 Cygwin: console: Revise the code to fix tab position.
- This patch fixes the issue that the cursor position is broken if
  window size is changed while executing vim, less etc.
2020-03-02 19:46:40 +01:00
Corinna Vinschen 1b7fcf22be Cygwin: ioctl: TIOCINQ: always return number of chars in the inbound queue
So far ioctl(TIOCINQ) could end up returning -1 with errno set to EINVAL
if a non-zero device error mask has been returned by ClearCommError.
This doesn't reflect Linux behaviour, which always returns the number of
chars in the inbound queue, independent of any I/O error condition.
EINVAL was a pretty weird error code to use in this scenario, too.

Fix this by dropping all checking for device errors in the TIOCINQ
case.  Just return the number of chars in the inbound queue.

Signed-off-by: Corinna Vinschen <corinna@vinschen.de>
2020-03-02 17:05:59 +01:00
Takashi Yano 002206dc7c Cygwin: console: Adjust the detailed behaviour of ESC sequences.
- This patch makes some detailed behaviour of ESC sequences such as
  "CSI Ps L" (IL), "CSI Ps M" (DL) and "ESC M" (RI) in xterm mode
  match with real xterm.
2020-02-28 15:32:51 +01:00
Corinna Vinschen 729cb70bcf Cygwin: AF_UNIX: rework fixup_after_exec
fhandler_socket_unix::fixup_after_exec incorrectly calls
fhandler_socket_unix::fixup_after_fork with a NULL parent process
handle.  Not only that calling DuplicateHandle with a NULL parent
handle fails, but it's utterly wrong trying to duplicate the handles
at all here.

Rather just set some important values to NULL and reopen the shared
memory region.  Create a fixup_helper method to call common code from
fixup_after_fork and fixup_after_exec.

Add comments to other invocations of fixup_after_fork with NULL
handle to mark them as correct this way.

Signed-off-by: Corinna Vinschen <corinna@vinschen.de>
2020-02-28 15:27:16 +01:00
Corinna Vinschen a834dc1ba9 Cygwin: 32 bit: remove old code to 16 bit align stack
Aligning the stack pointer using an asm statement isn't any longer
supported.  gcc-9.2.0 generates the following warning:

  init.cc:33:46: error: listing the stack pointer register '%esp'
  in a clobber list is deprecated [-Werror=deprecated]
  [...]
  init.cc:33:46: note: the value of the stack pointer after an
  'asm' statement must be the same as it was before the statement

Replace the asm expression with the gcc function attribute
`force_align_arg_pointer'.  This aligns the stack exactly as
required.

Signed-off-by: Corinna Vinschen <corinna@vinschen.de>
2020-02-28 15:02:09 +01:00
Corinna Vinschen f5357141ad Cygwin: AF_UNIX: use Nt functions within Nt functions
Functionaly equivalent, but makes for cleaner code

Signed-off-by: Corinna Vinschen <corinna@vinschen.de>
2020-02-28 12:41:05 +01:00
Corinna Vinschen 92b8b300c2 Cygwin: AF_UNIX: fix creating shared mem region in dup
reopen_shmem is accidentally called on the parent fhandler
rather than the child fhandler, and it's called too early.
Make sure to call it on the child and only after its shmem_handle
is valid.

Signed-off-by: Corinna Vinschen <corinna@vinschen.de>
2020-02-28 12:41:05 +01:00
Jon Turney ba2f251d43
Cygwin: Update dumper for bfd API changes
Update dumper for bfd API changes in binutils 2.34

libbfd doesn't guarantee API stability, so we've just been lucky this
hasn't broken more often.

See binutils commit fd361982.
2020-02-27 17:37:49 +00:00
Takashi Yano c13cdfd00e Cygwin: console: Add emulation of CSI3J on Win10 1809.
- This patch add emulation of CSI3J, which is broken in Win10 1809,
  rather than ignoring it as before.
2020-02-26 21:17:36 +01:00
Takashi Yano 0d7bbc0bc3 Cygwin: console: Add support for REP escape sequence to xterm mode.
- In Win10 upto 1809, xterm compatible mode does not have REP
  escape sequence which terminfo declares. This patch adds support
  for "CSI Ps b" (REP). With this patch, bvi (binary editor) works
  normally in Win10 1809. Also, xterm compatible mode does not have
  "CSI Pm `" (HPA), "CSI Pm a" (HPR) and "CSI Ps e" (VPR). However,
  they do not appear to be declared by terminfo. Therefore, these
  have been pending.
2020-02-26 21:17:36 +01:00
Takashi Yano 3b42762e0b Cygwin: console: Unify workaround code for CSI3J and CSI?1049h/l.
- This patch unifies workaround code for CSI3J and CSI?1049h/l into
  the code handling other escape sequences in xterm mode.
2020-02-26 21:17:36 +01:00
Takashi Yano 7dfe04e933 Cygwin: console: Add workaround for broken IL/DL in xterm mode.
- Cygwin console with xterm compatible mode causes problem reported
  in https://www.cygwin.com/ml/cygwin-patches/2020-q1/msg00212.html
  if background/foreground colors are set to gray/black respectively
  in Win10 1903/1909. This is caused by "CSI Ps L" (IL), "CSI Ps M"
  (DL) and "ESC M" (RI) control sequences which are broken. This
  patch adds a workaround for the issue.
2020-02-26 21:17:36 +01:00
Corinna Vinschen 09981903e6 Cygwin: ps: fix compiler warning in ttynam
The helper function ttynam creates a tty name by using sprintf wrongly
on a pretty short buffer.  The foramt string only specifies a minimum
field length, not a maximum field length, so gcc-9.2.0 complains:

  ps.cc:101:23: warning: 'sprintf' may write a terminating nul past the
  end of the destination [-Wformat-overflow=]

Fix this thoroughly by specifying a maximum field width as well as by
using snprintf with a fixed buffer length.  Also, drop using a static
buffer in favor of using a buffer in the caller.

Signed-off-by: Corinna Vinschen <corinna@vinschen.de>
2020-02-26 21:08:51 +01:00
Corinna Vinschen 0a37e9f0bc Cygwin: cygserver: drop useless packed attribute
...from structs used for data exchange between clients and cygserver.
All of the structs have the same size and member offsets, packed or
unpacked.  Keeping the packed attribute results in ominous warnings
from gcc-9.2.0:

  cygserver.cc:259:10: warning: taking address of packed member of
  'client_request_attach_tty::request_attach_tty' may result in an
  unaligned pointer value [-Waddress-of-packed-member]

Signed-off-by: Corinna Vinschen <corinna@vinschen.de>
2020-02-26 20:55:14 +01:00
Corinna Vinschen 5f66c2c756 Cygwin: Makefile.in: add -fno-builtin-execve CFLAG when building exec.o
gcc-9.2.0 has an execve builtin which uses the nothrow attribute.
This results in an error when aliasing execve to _execve for newlib:

exec.cc:88:23: error: 'int _execve(const char*, char* const*, char*
const*)' specifies less restrictive attribute than its target
'int execve(const char*, char* const*, char* const*)': 'nothrow'
[-Werror=missing-attributes]
   88 | EXPORT_ALIAS (execve, _execve) /* For newlib */

Add the -fno-builtin-execve CFLAGS when building exec.o to override
the gcc builtin.

Signed-off-by: Corinna Vinschen <corinna@vinschen.de>
2020-02-26 17:03:31 +01:00
Corinna Vinschen 28382c97a5 Cygwin: posix timers: fix uninitialized variable
The variable returning the overrun count from the tracker object after
disarming the overrun counter was not correctly initialized.  For some
reason this has only been noticed by gcc-9.2.0, not by the formerly used
gcc-7.4.0.

This problem should not have had any runtime impact.  The method
timer_tracker::disarm_overrun_event is supposed to be called in
lock-step with timer_tracker::arm_overrun_event, which in turn
results in the variable getting a valid value.

Signed-off-by: Corinna Vinschen <corinna@vinschen.de>
2020-02-26 16:59:56 +01:00
Brian Inglis 4653cc92ed cpuinfo:power management: add proc_feedback, acc_power
linux 4.6 x86/cpu: Add advanced power management bits
Bit 11 of CPUID 8000_0007 edx is processor feedback interface.
Bit 12 of CPUID 8000_0007 edx is accumulated power.

Print proper names in /proc/cpuinfo

[missed enabling this 2016 change during previous major cpuinfo update
as no power related changes were made to the Linux files since then]
2020-02-26 12:15:34 +01:00
Takashi Yano 17528b9d2c Cygwin: console: Fix segfault on shared_console_info access.
- Accessing shared_console_info before initialization causes access
  violation because it is a NULL pointer. The cause of the problem
  reported in https://cygwin.com/ml/cygwin/2020-02/msg00197.html is
  this NULL pointer access in request_xterm_mode_output() when it is
  called from close(). This patch makes sure that shared_console_info
  is not NULL before calling request_xterm_mode_output().
2020-02-24 19:41:16 +01:00
Brian Inglis 86f9ce97bc fhandler_proc/cpuinfo: support fast short REP MOVSB
Added in Linux 5.6:
Check FSRM and use REP MOVSB for short copies on systems that have it.

>From the Intel Optimization Reference Manual:

3.7.6.1 Fast Short REP MOVSB
Beginning with processors based on Ice Lake Client microarchitecture,
REP MOVSB performance is enhanced with string lengths up to 128 bytes.
Support for fast-short REP MOVSB is indicated by the CPUID feature flag:
CPUID [EAX=7H, ECX=0H).EDX.FAST_SHORT_REP_MOVSB[bit 4] = 1.
There is no change in the REP STOS performance.
2020-02-24 11:09:41 +01:00
Corinna Vinschen bf33f72d43 Cygwin: add release message for NUL character bugs
Signed-off-by: Corinna Vinschen <corinna@vinschen.de>
2020-02-21 10:57:21 +01:00
Corinna Vinschen db33f3499c Cygwin: don't move cursor on NUL char at all
Add a comment instead to explain that this behaviour contradicts
the terminfo entry.

Signed-off-by: Corinna Vinschen <corinna@vinschen.de>
2020-02-21 10:31:19 +01:00
Corinna Vinschen 4ec2e5e1c2 Cygwin: fhandler_console.cc: fix minor style issues
Signed-off-by: Corinna Vinschen <corinna@vinschen.de>
2020-02-20 14:58:20 +01:00
Corinna Vinschen c9f153580b Cygwin: console: ignore NUL byte on write in xterm emulation mode as well
A NUL byte in the output stream got accidentally not handled as IGN char
in xterm console mode.  The internal mbtowc conversion doesn't handle
embedded NUL values gracefully, it always stops converting at NUL bytes.
This broke the output of strings with embedded NUL bytes.

Fix this by always skipping IGN chars in the "normal char output loop"
and make sure not to move the cursor one position to the right, as in
legacy console mode.

Signed-off-by: Corinna Vinschen <corinna@vinschen.de>
2020-02-20 14:58:16 +01:00
Corinna Vinschen ac36c2ec90 Bump DLL version to 3.1.5
Signed-off-by: Corinna Vinschen <corinna@vinschen.de>
2020-02-19 13:38:42 +01:00
Takashi Yano 81b3440998 Cygwin: console: Add guard for set/unset xterm compatible mode.
- Setting / unsetting xterm compatible mode may cause race issue
  between multiple processes. This patch adds guard for that.
2020-02-18 11:35:42 +01:00
Takashi Yano 321d79abd3 Cygwin: console: Fix ioctl() FIONREAD.
- ioctl() FIONREAD for console does not return correct value since
  commit cfb517f39a. This patch fixes
  the issue.
2020-02-18 11:35:42 +01:00
Corinna Vinschen 592b03b3ba Cygwin: add @cjksingle to release docs
Signed-off-by: Corinna Vinschen <corinna@vinschen.de>
2020-02-18 11:35:42 +01:00
Thomas Wolff b7361d31fb Cygwin: describe new locale modifier @cjksingle for user guide 2020-02-18 11:35:42 +01:00
Corinna Vinschen 40245925ce Cygwin: rename NSIG to _NSIG, change visibility of NSIG to MISC
NSIG is a deprecated symbol only visible under MISC visibility.
_NSIG is used widely instead, and on most systems NSIG is
defined in terms of _NSIG.

Follow suit: Change NSIG to _NSIG throughout and change visiblity
of NSIG to be defined only in __MISC_VISIBLE case.

Signed-off-by: Corinna Vinschen <corinna@vinschen.de>
2020-02-18 11:25:12 +01:00
Corinna Vinschen f3793803a7 Cygwin: move 3.1.3 to 3.1.4 release document
Signed-off-by: Corinna Vinschen <corinna@vinschen.de>
2020-02-18 11:22:57 +01:00
Takashi Yano c16e73043e Cygwin: console: Fix code for restoring console mode.
- Commit 774b8996d1 has a bug that
  restores console output mode into console input. This patch fixes
  the issue.
2020-02-17 13:56:56 +01:00
Corinna Vinschen 6afb1ba504 Cygwin: Bump DLL version to 3.1.4
Signed-off-by: Corinna Vinschen <corinna@vinschen.de>
2020-02-17 13:56:44 +01:00
Takashi Yano 774b8996d1 Cygwin: console: Change timing of set/unset xterm compatible mode.
- If two cygwin programs are executed simultaneousley with pipes
  in cmd.exe, xterm compatible mode is accidentally disabled by
  the process which ends first. After that, escape sequences are
  not handled correctly in the other app. This is the problem 2
  reported in https://cygwin.com/ml/cygwin/2020-02/msg00116.html.
  This patch fixes the issue. This patch also fixes the problem 3.
  For these issues, the timing of setting and unsetting xterm
  compatible mode is changed. For read, xterm compatible mode is
  enabled only within read() or select() functions. For write, it
  is enabled every time write() is called, and restored on close().
2020-02-17 13:21:11 +01:00
Takashi Yano 8cb20fa5d3 Cygwin: pty: Add error handling in setup_pseudoconsole().
- In setup_pseudoconsole(), many error handling was omitted. This
  patch adds missing error handling.
2020-02-11 12:40:26 +01:00
Takashi Yano 2379142bc5 Cygwin: pty: Prevent potential errno overwriting.
- In push_to_pcon_screenbuffer(), open() and ioctl() are called.
  Since push_to_pcon_screenbuffer() is called in read() and write(),
  errno which is set in read() and write() code may be overwritten
  in open() or ioctl() call. This patch prevent this situation.
2020-02-10 15:31:29 +01:00
Takashi Yano 2de74af22b Cygwin: pty: Fix state mismatch caused in mintty.
- PTY has a bug reported in:
  https://cygwin.com/ml/cygwin/2020-02/msg00067.html.
  This is the result of state mismatch between real pseudo console
  attaching state and state variable. This patch fixes the issue.
2020-02-10 10:19:38 +01:00
Takashi Yano 29431fcb5b Cygwin: pty: Inherit typeahead data between two input pipes.
- PTY has a problem that the key input, which is typed during
  windows native app is running, disappear when it returns to shell.
  (Problem 3 in https://cygwin.com/ml/cygwin/2020-02/msg00007.html)
  This is beacuse pty has two input pipes, one is for cygwin apps
  and the other one is for native windows apps. The key input during
  windows native program is running is sent to the second input pipe
  while cygwin shell reads input from the first input pipe.
  This patch realize transfering input data between these two pipes.
2020-02-10 10:19:38 +01:00
Takashi Yano a4ca6c4861 Cygwin: pty: Add missing member initialization for struct pipe_reply.
- For pseudo console support, struct pipe_reply was changed in the
  past, however, the initialization was not fixed.
2020-02-10 10:19:38 +01:00
Takashi Yano d5985cc45d Cygwin: pty: Remove debug codes and organize related codes.
- Debug codes used in the early stage of pseudo console support are
  removed. (Regarding ALWAYS_USE_PCON and USE_API_HOOK) Along with
  this, the codes related to this change are organized.
2020-02-10 10:19:38 +01:00
Takashi Yano b0474b704a Cygwin: pty: Avoid screen distortion on slave read.
- Echo back print is distorted when the cygwin program which calls
  Win32 console API directly calls slave read(). This patch fixes
  the issue.
2020-02-10 10:19:38 +01:00
Takashi Yano 2bae159171 Cygwin: pty: Define mask_switch_to_pcon_in() in fhandler_tty.cc.
- This patch moves the definition of mask_switch_to_pcon() from
  fhandler.h to fhandler_tty.cc.
2020-02-10 10:19:38 +01:00
Takashi Yano 3a71c46380 Cygwin: pty: Use pinfo() rather than kill() with signal 0.
- PTY code has a problem that tcsh is terminated if the following
  command is executed.
    true; chcp &
  This seems to be caused by invalid pointer access which occurs
  when the process exits during the kill() code is execuetd. This
  patch avoids the issue by not using kill().
2020-02-06 19:58:31 +01:00
Takashi Yano 65ad1c0ab0 Cygwin: pty: Remove meaningless pointer increment.
- Since commit 73742508fc, a pointer
  increment in master write code which has no effect was remaining.
2020-02-04 17:26:15 +01:00
Takashi Yano ac1ccc29e1 Cygwin: console: Revise color setting codes in legacy console mode.
- With this patch, foreground color and background color are allowed
  to be set simultaneously by 24 bit color escape sequence such as
  ESC[38;2;0;0;255;48;2;128;128;0m in legacy console mode.
2020-02-04 11:49:20 +01:00
Ken Brown 279f230620 Cygwin: fhandler_fifo.cc: add commentary 2020-02-01 16:36:31 -05:00
Ken Brown 76dca77f04 Cygwin: fstat_helper: always use handle in call to get_file_attribute
When fhandler_base::fstat_helper is called, the handle h returned by
get_stat_handle() should be pc.handle() and should be safe to use for
getting the file information.  Previously, the call to
get_file_attribute() for FIFOs set the first argument to NULL instead
of h, thereby forcing the file to be opened for fetching the security
descriptor in get_file_sd().
2020-01-31 07:45:11 -05:00
Ken Brown 1cc07f3a3e Cygwin: document recent changes 2020-01-30 09:43:19 -05:00
Ken Brown 477121317d Cygwin: AF_LOCAL: fix fcntl and dup if O_PATH is set
Make fhandler_socket_local::dup and fhandler_socket_local::fcntl (a
new method) call fhandler_base::dup and fhandler_base::fcntl if O_PATH
is set.

We're viewing the socket as a disk file here, but there's no need to
implement the actions of fhandler_disk_file::dup and
fhandler_disk_file::fcntl, which do nothing useful in this case beyond
what the fhandler_base methods do.  (The extra actions are only useful
when I/O is going to be done on the file.)
2020-01-30 09:43:19 -05:00
Ken Brown 23cb58af62 Cygwin: AF_LOCAL::fstatvfs: use our handle if O_PATH is set
If O_PATH is set, then the fhandler_socket_local object has a handle
that can be used for getting the statvfs information.  Use it by
calling fhandler_base::fstatvfs_by_handle.  Without this change,
fhandler_disk_file::fstatfvs would be called on a new fhandler_disk
object, which would then have to be opened.
2020-01-30 09:43:19 -05:00
Ken Brown 141437d374 Cygwin: AF_LOCAL: set appropriate errno on system calls
If an AF_LOCAL socket is opened with O_PATH, all socket system calls
that take a file descriptor argument fail on the resulting descriptor.
Make sure that errno is set as on Linux for those calls that are
implemented on Linux.  In almost all cases it is ENOTSOCK.  There are
two exceptions:

- sockatatmark(3); errno is EBADF.

- bindresvport(3); errno is EAFNOSUPPORT if the second argument sin
  (of type struct sockaddr_in *) is non-NULL and satisfies
  sin->sin_family == AF_INET.

Finally, there are two BSD socket system calls implemented on Cygwin
but not Linux: getpeereid(3) and bindresvport_sa(3).  Set errno to
ENOTSOCK for these for consistency with the majority of the other
calls.
2020-01-30 09:43:19 -05:00
Ken Brown 3a2191653a Cygwin: AF_LOCAL: allow opening with the O_PATH flag
If that flag is not set, or if an attempt is made to open a different
type of socket, the errno is now EOPNOTSUPP instead of ENXIO.  This is
consistent with POSIX, starting with the 2016 edition.  Earlier
editions were silent on this issue.

Opening is done in a (new) fhandler_socket_local::open method by
calling fhandler_base::open_fs.

Also add a corresponding fhandler_socket_local::close method.
2020-01-30 09:43:19 -05:00
Keith Packard 9042d0ce65 Use remove-advertising-clause script to edit BSD licenses
This edits licenses held by Berkeley and NetBSD, both of which
have removed the advertising requirement from their licenses.

Signed-off-by: Keith Packard <keithp@keithp.com>
2020-01-29 19:03:31 +01:00
Corinna Vinschen f36262d56a Cygwin: stat: fix st_mode of fifos
Signed-off-by: Corinna Vinschen <corinna@vinschen.de>
2020-01-29 15:14:05 +01:00
Corinna Vinschen 13bfb3c63f Cygwin: remove CYGWIN=dos_file_warning option
This option has been disabled long ago and nobody missed it.
Removing drops a bit of unneeded code

Signed-off-by: Corinna Vinschen <corinna@vinschen.de>
2020-01-28 21:59:25 +01:00
Ken Brown 13d75fce48 Cygwin: FIFO: fstatvfs: use our handle if O_PATH is set
If O_PATH is set, then the fhandler_fifo object has a handle that can
be used for getting the statvfs information.  Use it by calling
fhandler_base::fstatvfs_by_handle.  Before this change,
fhandler_disk_file::fstatfvs was called on a new fhandler_disk_file
object, which would then have to be opened.
2020-01-28 14:05:13 -05:00
Ken Brown 68b7a457f7 Cygwin: fhandler_disk_file::fstatvfs: refactor
Define a new method fhandler_base::fstatvfs_by_handle, extracted from
fhandler_disk_file::fstatvfs, which gets the statvfs information when
a handle is available.

This will be used in future commits for special files that have been
opened with O_PATH.
2020-01-28 14:05:13 -05:00
Ken Brown 74e6e88143 Cygwin: fhandler_base::fstat_fs: accomodate the O_PATH flag
Treat a special file opened with O_PATH the same as a regular file,
i.e., use its handle to get the stat information.

Before this change, fstat_fs opened the file a second time, with the
wrong flags and without closing the existing handle.  A side effect
was to change the openflags of the file, possibly causing further
system calls to fail.

Currently this change only affects FIFOs, but it will affect
AF_LOCAL/AF_UNIX sockets too once they support O_PATH.
2020-01-28 14:05:13 -05:00
Corinna Vinschen 4bfa93f1a0 Cygwin: symlink/mknod: fix ACL handling
mknod32 actually creates a path_conv, just to call mknod_worker
with a win32 path.  This doesn't only require to create path_conv
twice, it also breaks permissions on filesystems supporting ACLs.

Fix this by passing the path_conv created in the caller down to
symlink_worker.  Also, while at it, simplify the handling of trailing
slashes and move it out of symlink_worker.  Especially use the
new PC_SYM_NOFOLLOW_DIR flag to avoid fiddeling with creating
a new path copy without the trailing slash.

Signed-off-by: Corinna Vinschen <corinna@vinschen.de>
2020-01-28 17:58:06 +01:00
Corinna Vinschen 26425142ce Cygwin: path_conv: add PC_SYM_NOFOLLOW_DIR flag
Usually a trailing slash requires to follow an existing symlink,
even with PC_SYM_NOFOLLOW.  The reason is that "foo/" is equivalent
to "foo/." so the symlink is in fact not the last path component,
"." is.  This is default for almost all scenarios.

PC_SYM_NOFOLLOW_DIR now allows the caller to request not to
follow the symlink even if a trailing slash is given.  This can
be used in callers to perform certain functions Linux-compatible.

Signed-off-by: Corinna Vinschen <corinna@vinschen.de>
2020-01-28 17:40:40 +01:00