Commit Graph

12902 Commits

Author SHA1 Message Date
Ken Brown 5b8358e6ed Cygwin: remove the OPEN_MAX_MAX macro
Replace all occurrences of OPEN_MAX_MAX by OPEN_MAX, and define the
latter to be 3200, which was the value of the former.  In view of the
recent change to getdtablesize, there is no longer a need to
distinguish between these two macros.
2021-02-01 09:55:08 -05:00
Ken Brown b9cbc49b70 Cygwin: sysconf, getrlimit: don't call getdtablesize
Now that getdtablesize always returns OPEN_MAX_MAX, we can simplify
sysconf(_SC_OPEN_MAX) and getrlimit(RLIMIT_NOFILE) to just use that
same constant instead of calling getdtablesize.
2021-02-01 09:55:07 -05:00
Ken Brown 3d256e22e2 Cygwin: getdtablesize: always return OPEN_MAX_MAX
According to the Linux man page for getdtablesize(3), the latter is
supposed to return "the maximum number of files a process can have
open, one more than the largest possible value for a file descriptor."
The constant OPEN_MAX_MAX is the only limit enforced by Cygwin, so we
now return that.

Previously getdtablesize returned the current size of cygheap->fdtab,
Cygwin's internal file descriptor table.  But this is a dynamically
growing table, and its current size does not reflect an actual limit
on the number of open files.

With this change, gnulib now reports that getdtablesize and
fcntl(F_DUPFD) work on Cygwin.  Packages like GNU tar that use the
corresponding gnulib modules will no longer use gnulib replacements on
Cygwin.
2021-02-01 09:55:07 -05:00
Takashi Yano via Cygwin-patches 6c1552b0da Cygwin: exceptions.cc: Suspend all threads in sig_handle_tty_stop().
- Currently, thread created by pthread_create() is not suspended by
  the signal SIGTSTP. For example, even if a process with a thread
  is suspended by Ctrl-Z, the thread continues running. This patch
  fixes the issue.
2021-02-01 10:54:04 +01:00
Takashi Yano via Cygwin-patches 6ab2d284e5 Cygwin: console: Align the behaviour against signal with pty.
- Currently, read() returns -1 with EINTR if the process is suspended
  by Ctrl-Z and resumed by fg command, while pty continues to read.
  For example, xxd command stops with error "Interrupted system call"
  after Ctrl-Z and fg. This patch aligns the behaviour with pty (and
  Linux).
2021-02-01 10:54:04 +01:00
Takashi Yano via Cygwin-patches f186f61d60 Cygwin: pty: Make slave read() thread-safe.
- Currently slave read() is somehow not thread-safe. This patch
  fixes the issue.
2021-02-01 10:54:04 +01:00
Takashi Yano via Cygwin-patches 0b64cc6812 Cygwin: console: Make read() thread-safe.
- Currently read() is somehow not thread-safe. This patch fixes
  the issue.
2021-02-01 10:54:04 +01:00
Ken Brown 883abd9d7d Cygwin: fchmodat: add limited support for AT_SYMLINK_NOFOLLOW
Allow fchmodat with the AT_SYMLINK_NOFOLLOW flag to succeed on
non-symlinks.  Previously it always failed, as it does on Linux.  But
POSIX permits it to succeed on non-symlinks even if it fails on
symlinks.

The reason for following POSIX rather than Linux is to make gnulib
report that fchmodat works on Cygwin.  This improves the efficiency of
packages like GNU tar that use gnulib's fchmodat module.  Previously
such packages would use a gnulib replacement for fchmodat on Cygwin.
2021-01-29 11:50:53 -05:00
Takashi Yano via Cygwin-patches 253352e796 Cygwin: pty: Allow multiple apps to enable pseudo console simultaneously.
- After commit bb428520, there has been the disadvantage:
  7) Pseudo console cannot be activated if it is already activated for
     another process on same pty.
  This patch clears this disadvantage.
2021-01-28 11:21:12 +01:00
Takashi Yano via Cygwin-patches 8aeb3f3e50 Cygwin: pty: Make apps using console APIs be able to debug with gdb.
- After commit bb428520, there has been the disadvantage:
  2) The apps which use console API cannot be debugged with gdb. This
     is because pseudo console is not activated since gdb uses
     CreateProcess() rather than exec(). Even with this limitation,
     attaching gdb to native app, in which pseudo console is already
     activated, works.
  This patch clears this disadvantage.
2021-01-28 11:21:12 +01:00
Takashi Yano via Cygwin-patches 442093214d Cygwin: pty: Keep code page between non-cygwin apps.
- After commit bb428520, there has been the disadvantage:
  4) Code page cannot be changed by chcp.com. Acctually, chcp works
     itself and changes code page of its own pseudo console.  However,
     since pseudo console is recreated for another process, it cannot
     inherit the code page.
  This patch clears this disadvantage.
2021-01-28 11:21:12 +01:00
Takashi Yano via Cygwin-patches 10d083c745 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, disappears when it returns to shell. 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 issue had been
  fixed once by commit 29431fcb, however, the new implementation of
  pseudo console support by commit bb428520 could not inherit this
  feature. This patch realize transfering input data between these
  two pipes bidirectionally by utilizing cygwin-console-helper process.
  The helper process is launched prior to starting the non-cygwin app,
  however, exits immediately unlike previous implementation.
2021-01-28 11:21:12 +01:00
Corinna Vinschen 5b941f21b5 Cygwin: Align *utime*() with POSIX/glibc
Followup to previous patch, this time matching definitions in Cygwin

Signed-off-by: Corinna Vinschen <corinna@vinschen.de>
2021-01-26 17:27:35 +01:00
Ken Brown b32f6dd40a Cygwin: chown: make sure ctime gets updated when necessary
Following POSIX, ensure that ctime is updated if chown succeeds,
unless the new owner is specified as (uid_t)-1 and the new group is
specified as (gid_t)-1.  Previously, ctime was unchanged whenever the
owner and group were both unchanged.

Aside from POSIX compliance, this fix makes gnulib report that chown
works on Cygwin.  This improves the efficiency of packages like GNU
tar that use gnulib's chown module.  Previously such packages would
use a gnulib replacement for chown on Cygwin.
2021-01-25 21:07:53 -05:00
Ben Wijen f4cac1217e syscalls.cc: Deduplicate remove
The remove code is already in the _remove_r function.
So, just call the _remove_r function.
2021-01-25 19:57:46 +01:00
Takashi Yano via Cygwin-patches 460eb128cb Cygwin: console: Add missing guard regarding attach_mutex.
- The commit a5333345 did not fix the problem enough. This patch
  provides additional guard for the issue.
2021-01-25 19:54:21 +01:00
Ben Wijen cb41c375a6 syscalls.cc: unlink_nt: Try FILE_DISPOSITION_IGNORE_READONLY_ATTRIBUTE
I think we don't need an extra flag as we can utilize: access & FILE_WRITE_ATTRIBUTES
What do you think?

Ben Wijen (1):
  syscalls.cc: unlink_nt: Try FILE_DISPOSITION_IGNORE_READONLY_ATTRIBUTE

 winsup/cygwin/ntdll.h     |  3 ++-
 winsup/cygwin/syscalls.cc | 22 +++++++--------
 winsup/cygwin/wincap.cc   | 11 ++++++++
 winsup/cygwin/wincap.h    | 56 ++++++++++++++++++++-------------------
 4 files changed, 53 insertions(+), 39 deletions(-)

--
2.30.0

>From 2d0ff6fec10d03c24d11c747852018b7bc1136ac Mon Sep 17 00:00:00 2001
In-Reply-To: <20210122105201.GD810271@calimero.vinschen.de>
References: <20210122105201.GD810271@calimero.vinschen.de>
From: Ben Wijen <ben@wijen.net>
Date: Tue, 17 Dec 2019 15:15:25 +0100
Subject: [PATCH v3 1/8] syscalls.cc: unlink_nt: Try
 FILE_DISPOSITION_IGNORE_READONLY_ATTRIBUTE

Implement wincap.has_posix_unlink_semantics_with_ignore_readonly and when set
skip setting/clearing of READONLY attribute and instead use
FILE_DISPOSITION_IGNORE_READONLY_ATTRIBUTE
2021-01-25 10:50:13 +01:00
Ken Brown a60a4501b7 Cygwin: ptsname_r: always return an error number on failure
Return EBADF on a bad file descriptor.  Previously 0 was returned, in
violation of the requirement in
https://man7.org/linux/man-pages/man3/ptsname_r.3.html that an error
number should be returned on failure.

We are intentionally deviating from Linux, on which ENOTTY is
returned.

Addresses: https://lists.gnu.org/archive/html/bug-gnulib/2021-01/msg00245.html
2021-01-22 10:36:43 -05:00
Ken Brown 4aefad2bb8 Cygwin: normalize_posix_path: fix error handling when .. is encountered
When .. is in the source path and the path prefix exists but is not a
directory, return ENOTDIR instead of ENOENT.  This fixes a POSIX
compliance issue for realpath(3):

  https://pubs.opengroup.org/onlinepubs/9699919799/functions/realpath.html

Addresses: https://lists.gnu.org/archive/html/bug-gnulib/2021-01/msg00214.html
2021-01-22 10:31:09 -05:00
Ben Wijen 0c0ff5dc21 Cygwin: Move post-dir unlink check
Move post-dir unlink check from fhandler_disk_file::rmdir to
_unlink_nt_post_dir_check

If a directory is not removed through fhandler_disk_file::rmdir
we can now make sure the post dir check is performed.
2021-01-22 13:35:11 +01:00
Takashi Yano via Cygwin-patches a533334581 Cygwin: console: Fix "Bad file descriptor" error in script command.
- After the commit 72770148, script command exits occasionally with
  the error "Bad file descriptor" if it is started in console on Win7
  and non-cygwin process is executed. This patch fixes the issue.
2021-01-20 10:19:39 +01:00
Takashi Yano via Cygwin-patches 5755870f7c Cygwin: pty: Reduce buffer size in get_console_process_id().
- The buffer used in get_console_process_id(), introduced by commit
  72770148, is too large and ERROR_NOT_ENOUGH_MEMORY occurs in Win7.
  Therefore, the buffer size has been reduced.
2021-01-20 10:19:39 +01:00
Takashi Yano via Cygwin-patches 62e739b51b Cygwin: pty: Lessen the side effect of workaround for rlwarp.
- This patch lessens the side effect of the workaround for rlwrap
  introduced by commit 4e16b033.
2021-01-19 10:56:43 +01:00
Takashi Yano via Cygwin-patches 59ccb3a008 Cygwin: spawn.cc: Fix typo in comment by commit 974e6d76. 2021-01-19 10:56:18 +01:00
Corinna Vinschen 877f0d13f0 Cygwin: rmdir: handle /dev in fhandler_dev::rmdir
The isdev_dev check in rmdir is unclean.  Create a virtual method
fhandler_dev::rmdir to handle this transparently.

Signed-off-by: Corinna Vinschen <corinna@vinschen.de>
2021-01-19 10:54:35 +01:00
Ken Brown 31ccf40583 Cygwin: document a recent bug fix
This documents commit aec64798, "Cygwin: add flag to indicate reparse
points unknown to WinAPI".
2021-01-18 11:11:45 -05:00
Takashi Yano via Cygwin-patches a776a0ce26 Cygwin: pty: Set input_available_event only for cygwin pipe.
- cat exits immediately in the following senario.
    1) Execute env CYGWIN=disable_pcon script
    2) Execute cmd.exe
    3) Execute cat in cmd.exe.
  This is caused by setting input_available_event for the pipe for
  non-cygwin app. This patch fixes the issue.
2021-01-18 16:26:28 +01:00
Takashi Yano via Cygwin-patches 25ce7a6245 Cygwin: pty: Make master thread functions be static.
- The functions pty_master_thread() and pty_master_fwd_thread()
  should be static (i.e. should not access class member) because
  the instance is deleted if the master is dup()'ed and the first
  master is closed. In this case, because the dup()'ed instance
  still exists, these master threads are also still alive even
  though the instance has been deleted. As a result, accesing
  class members in these functions causes accessi violation.

  Addresses:
  https://cygwin.com/pipermail/cygwin-developers/2021-January/012030.html
2021-01-18 14:18:43 +01:00
Takashi Yano via Cygwin-patches 72770148ad Cygwin: pty: Prevent pty from changing code page of parent console.
- After commit 232fde0e, pty changes console code page when the first
  non-cygwin app is executed. If pty is started in real console device,
  pty changes the code page of root console. This causes very annoying
  result because changing code page changes the font of command prompt
  if console is in legacy mode. This patch avoids this by creating a
  new invisible console for the first pty started in console device.
2021-01-18 14:18:43 +01:00
Ben Wijen 9e88e840c2 cxx.cc: Fix dynamic initialization for static local variables
The old implementation for __cxa_guard_acquire did not return 1,
therefore dynamic initialization was never performed.

If concurrent-safe dynamic initialisation is ever needed, CXX ABI
must be followed when re-implementing __cxa_guard_acquire (et al.)
2021-01-18 12:22:53 +01:00
Ben Wijen cbeb1009a9 syscalls.cc: Use EISDIR
This is the non-POSIX value returned by Linux since 2.1.132.
2021-01-18 12:04:42 +01:00
Ben Wijen 17ede0eae5 syscalls.cc: Fix num_links
NtQueryInformationFile on fh_ro needs FILE_READ_ATTRIBUTES
to succeed.
2021-01-18 12:01:19 +01:00
Corinna Vinschen 226ed24f2b Cygwin: Add Ben Wijen to list of contributors
Signed-off-by: Corinna Vinschen <corinna@vinschen.de>
2021-01-18 12:01:19 +01:00
Takashi Yano via Cygwin-patches 85ea2614f5 Cygwin: pty: Make close_pseudoconsole() be a static member function.
- The function close_pseudoconsole() should be static so that it
  can be safely called in spawn.cc even after the fhandler_pty_slave
  instance has been deleted. That is, there is a problem with the
  current code. This patch fixes the issue.
2021-01-18 11:02:46 +01:00
Takashi Yano via Cygwin-patches 974e6d76d8 Cygwin: console: Revise the code to switch xterm mode.
- If application changes the console mode, mode management introduced
  by commit 10d8c278 will be corrupted. For example, stdout of jansi
  v2.0.1 or later is piped to less, jansi resets the xterm mode flag
  ENABLE_VIRTUAL_TERMINA_PROCESSING when jansi is terminated. This
  causes garbled output in less because less needs this flag enabled.
  This patch fixes the issue.
2021-01-18 11:02:46 +01:00
Takashi Yano via Cygwin-patches fa22eea29d Cygwin: pty: Add workaround for rlwrap 0.40 or later.
- The workaround for rlwrap introduced by commit 8199b0cc does not
  take effect for rlwrap 0.40 or later. This patch add a workaround
  for rlwrap 0.40 or later as well.
2021-01-18 11:02:46 +01:00
Ken Brown 9ad86f619c Cygwin: fstatat: call fstat64 instead of fstat
This fixes a bug on 32-bit Cygwin that was introduced in commit
84252946, "Cygwin: fstatat, fchownat: support the AT_EMPTY_PATH flag".

Add a comment explaining why fstat should not be called.

Addresses: https://cygwin.com/pipermail/cygwin/2021-January/247399.html
2021-01-12 14:41:53 -05:00
Brian Inglis 1dd3f69db5 fhandler_proc.cc(format_proc_cpuinfo): report Intel SGX bits
Update to Linux next 5.10 cpuinfo flags for Intel SDM 36.7.1 Software
Guard Extensions, and 38.1.4 SGX Launch Control Configuration.
Launch control restricts what software can run with enclave protections,
which helps protect the system from bad enclaves.
2020-12-17 16:03:50 +01:00
Takashi Yano via Cygwin-patches 4e16b0330a Cygwin: pty: Revise the workaround for rlwrap.
- Previous workaround has a problem that screen is distorted if up
  arrow key is pressed at the first line after running "rlwrap cmd".
  This patch fixes the issue.
2020-12-16 10:31:09 +01:00
Takashi Yano via Cygwin-patches da8cebcded Cygwin: pty: Check response for CSI6n more strictly.
- Previous code to read response for CSI6n allows invalid response
  such as "CSI Pl; Pc H" other than correct response "CSI Pl; Pc R".
  With this patch, the response is checked more strictly.
2020-12-16 10:31:09 +01:00
Corinna Vinschen 532b91d24e Cygwin: Make sure newer apps get uname_x even when loading uname dynamically
if an application built after API version 334 loads uname dynamically,
it actually gets the old uname, rather than the new uname_x.  Fix this by
checking the apps API version in uname and call uname_x instead, if it's
a newer app.

Signed-off-by: Corinna Vinschen <corinna@vinschen.de>
2020-12-15 13:05:13 +01:00
Takashi Yano via Cygwin-patches 8199b0cc38 Cygwin: pty: Add a workaround for rlwrap.
- If rlwrap is used with non-cygwin apps, it fails to setup pseudo
  console. This patch adds a workaround for this issue.
2020-12-14 11:02:23 +01:00
Takashi Yano via Cygwin-patches 55eff668b8 Cygwin: pty: Revise the code for timeout in term_has_pcon_cap().
- Sometimes timeout period in term_has_pcon_cap() may not be enough
  when the machine slows down for some reason. This patch eases the
  issue. In the new code, effective timeout period is expected to be
  extended as a result due to slowing-down the wait loop as well when
  the machine gets into busy.
2020-12-14 11:02:23 +01:00
Takashi Yano via Cygwin-patches c2c33e4d67 Cygwin: pty: Skip term_has_pcon_cap() if pseudo console is disabled.
- This patch skips unnecessary term_has_pcon_cap() call if pseudo
  console is disabled.
2020-12-14 11:02:23 +01:00
Jeremy Drake via Cygwin-patches 21ec498d7f cygwin: use CREATE_DEFAULT_ERROR_MODE in spawn
This allows native processes to get Windows-default error handling
behavior (such as invoking the registered JIT debugger).
2020-12-10 10:57:40 +01:00
Ken Brown b6624e23e1 Cygwin: dtable::dup_worker: update comment and debug output
The comment and debug output became obsolete in commit 23771fa1f7 when
dup_worker started calling fhandler_base::clone instead of build_fh_pc
and fhandler_base::operator=.
2020-12-07 16:19:57 -05:00
Mark Geisert 9e573ba50f Cygwin: Allow to set SO_PEERCRED zero (v2)
The existing code errors as EINVAL any attempt to set a value for
SO_PEERCRED via setsockopt() on an AF_UNIX/AF_LOCAL socket.  But to
enable the workaround set_no_getpeereid behavior for Python one has
to be able to set SO_PEERCRED to zero.  Ergo, this patch.  Python has
no way to specify a NULL pointer for 'optval'.

This v2 of patch allows the original working (i.e., allow NULL,0 for
optval,optlen to mean turn off SO_PEERCRED) in addition to the new
working described above.  The sense of the 'if' stmt is reversed for
readability.
2020-12-07 16:29:11 +01:00
Mark Geisert 58ac5f985c Cygwin: Launch cygmagic with bash, not sh
On some systems /bin/sh is not /bin/bash and cygmagic has bash-isms in
it.  So even though cygmagic has a /bin/bash shebang, it also needs to be
launched with bash from within Makefile.in.
2020-12-07 10:37:32 +01:00
Anton Lavrentiev via Cygwin-patches 6c9c37d0a9 Fix trace output for getdomainname() 2020-12-07 10:20:45 +01:00
Brian Inglis 31a69bf1d9 winsup/doc/Makefile.in: create man5 dir and install proc.5 2020-12-04 12:40:58 +01:00
Brian Inglis 4157cae5f8 specialnames.xml: add proc(5) Cygwin man page 2020-12-04 12:40:58 +01:00
Corinna Vinschen 604bb7126e
Cygwin: Fix remaining warnings building path testsuite 2020-12-02 15:31:58 +00:00
Jon Turney 0d0f06416a
Cygwin: Fix building of utils testsuite
Avoid referencing undefined max_mount_entry.
2020-12-02 15:31:57 +00:00
Corinna Vinschen aec6479820 Cygwin: add flag to indicate reparse points unknown to WinAPI
https://cygwin.com/pipermail/cygwin/2020-December/246938.html
reports a problem where, when adding a Cygwin default symlink
to $PATH since Cygwin 3.1.5, $PATH handling appears to be broken.

3.1.5 switched to WSL symlinks as Cygwin default symlinks.

A piece of code in path handling skips resolving reparse points
if they are the last component in the path.  Thus a reparse point
in $PATH is not resolved but converted to Windows path syntax
verbatim.

If you do this with a WSL symlink, certain WinAPI functions fail.
The underlying $PATH handling fails to recognize the reparse
point in $PATH and returns with STATUS_IO_REPARSE_TAG_NOT_HANDLED.
As a result, the calling WinAPI function fails, most prominently
so CreateProcess.

Fix this problem by adding a PATH_REP_NOAPI bit to path_types
and a matching method path_conv::is_winapi_reparse_point().

Right now this flag is set for WSL symlinks and Cygwin AF_UNIX
sockets (new type implemented as reparse points).

The aforementioned code skipping repare point path resolution calls
is_winapi_reparse_point() rather than is_known_reparse_point(),
so now path resolution is only skipped for reparse points known
to WinAPI.

Signed-off-by: Corinna Vinschen <corinna@vinschen.de>
2020-12-02 16:14:41 +01:00
Corinna Vinschen e9bc4cccef Cygwin: path.h: add comments to briefly explain path_types
Signed-off-by: Corinna Vinschen <corinna@vinschen.de>
2020-12-02 16:14:41 +01:00
Corinna Vinschen 702bec7bc9 Cygwin: testsuite: libltp: fix warnings showing up with -Wall
This libltp is old as old dirt and still using K&R style.
If it's really to be used again at all, it needs a serious
refresh.

Signed-off-by: Corinna Vinschen <corinna@vinschen.de>
2020-12-02 14:12:56 +01:00
Corinna Vinschen 80e35a211f Cygwin: /proc/sys FS: don't export NFS and DFS as block devices
Network filesystems are not block devices.  Apparently this code
hasn't been executed anyway, given how network filesystems are
hidden behind \Device\Mup.

Signed-off-by: Corinna Vinschen <corinna@vinschen.de>
2020-12-01 09:37:10 +01:00
Christian Franke 3434d35a64 Cygwin: Fix access to block devices below /proc/sys.
Use fhandler_dev_floppy instead of fhandler_procsys for such devices.
The read()/write() functions from fhandler_procsys do not ensure
sector aligned transfers and lseek() fails always.

Signed-off-by: Christian Franke <franke@computer.org>
2020-11-30 11:53:00 +01:00
Jon Turney 7fa8405d3f
Cygwin: Have cygmagic not create output if an error occurs
Improve the 'cygmagic' script, so it doesn't create the output file if
an error occurs, even in one of the backtick-enclosed pipelines it runs.
2020-11-25 13:34:18 +00:00
Jon Turney 47e698cc04
Cygwin: Use standard CXXFLAGS when compiling localtime_wrapper.c
This has an separate, explicit compilation rule which omits CXXFLAGS, so
expected flags like '-g -O2' aren't being used.
2020-11-25 13:34:07 +00:00
Jon Turney 6fbe3254a7
Cygwin: Drop libgmon.a build dependency on gcrt0.o
libgmon.a depends on gcrt0.o, but doesn't include it.
2020-11-25 13:34:00 +00:00
Takashi Yano via Cygwin-patches 796044ddcf Cygwin: pty: Fix minor style issue. 2020-11-23 16:23:27 +01:00
Takashi Yano via Cygwin-patches 2eee095928 Cygwin: pty: Discard "OSC Ps; ? BEL/ST" in pseudo console output.
- If vim is executed in WSL in mintty, some garbage string caused
  by "OSC Ps;? BEL/ST" will be shown in some situations. This patch
  fixes the issue by removing "OSC Ps;? BEL/ST" from pseudo console
  output.
2020-11-23 16:23:27 +01:00
Takashi Yano via Cygwin-patches 65ee05d326 Cygwin: pty: Fix a bug in the code removing "CSI > Pm m".
- The code added by 8121b606e8 has a
  bug which fails to remove multiple "CSI > Pm m" sequences. This
  patch fixes the bug.
2020-11-23 16:23:27 +01:00
Jon Turney fccb9d7239
Cygwin: Remove surplus autoconf auxiliary files
Since we are now only configuring once, in winsup, with
AC_CONFIG_AUX_DIR(..), the auxiliary files are taken from the top-level.

(Previously we had a random assorment of AC_CONFIG_AUX_DIR(..) and
AC_CONFIG_AUX_DIR(../..) in winsup subdirectories, so auxiliary files
would be taken from winsup or the top-level.)
2020-11-20 15:56:21 +00:00
Jon Turney dc93f7ef2d
Cygwin: Remove recursive configure
There's doesn't seem to be much use in independently distributing these
subdirectories, so allowing them to be independently configured seems
pointless and overcomplicated.

The order in which the subdirectories are built is still a little odd,
as cygwin is linked with libcygserver, and cygserver is then linked with
cygwin. So, we build the cygwin directory first, which invokes a build
of libcygserver in the cygserver directory, and then build in the
cygserver directory to build the cygserver executable.

Drop AC_CONFIGURE_ARGS, since we don't need to recursively call
configure with the same arguments anymore.

Slightly refine when we build utils: Previously we didn't build any
utils if MinGW compiler use was avoided, now we just avoid building
those utils which require that compiler.

Greatly simplify how winsup_srcdir and target_builddir are set, since
we're only configuring from one directory.  (These are still kept
absolute, since we don't adjust them where used for being used in a
subdirectory).

Remove configure.cygwin and put it's (greatly reduced) contents inline
in the one place it's used now.

Remove generated configure and aclocal.m4 in subdirectories.
2020-11-20 15:56:11 +00:00
Ken Brown 11c5fd6abd Cygwin: fhandler_fifo::cleanup_handlers: improve efficiency
Traverse the fifo_client_handler list from the top down to try to
avoid copying.
2020-11-19 15:22:56 -05:00
Jon Turney 9ea6f38dea
Cygwin: Testsuite Makefile cleanup
Drop unused variables CC_FOR_TARGET, GCC_INCLUDE, ALL_CFLAGS
Stop exporting CC, CFLAGS
Drop unused, empty targets force, dll_ofiles, all_target
2020-11-18 16:26:37 +00:00
Jon Turney cbf8fe6dca
Cygwin: Fix 'make check' in utils
This has a test of the path translation code used in various utilities
(mount, cygpath, strace).

MOUNT_BINARY is replaced with the absence of MOUNT_TEXT since 26e0b37e.
The issys member of mnt_t struct was removed in b677a99b.

> $ make check
[...]
> total tests: 63
> pass       : 63 (100.0%)
> fail       : 0 (0.0%)
2020-11-18 16:26:36 +00:00
Jon Turney 7d5efba796
Cygwin: Drop duplicate C++ flags used to build utils
'-fno-exceptions -fno-rtti' are already present in the compile command
COMPILE.cc set by Makefile.common, so we don't need to add them to
CXXFLAGS as well.
2020-11-18 16:26:35 +00:00
Jon Turney ff315bd18f
Cygwin: Use grep in text mode to look for version strings
Invoke grep in text mode when looking for version strings inside the
cygwin DLL, so it outputs something more informative than:

  Binary file ../cygwin/cygwin0.dll matches
2020-11-18 16:26:23 +00:00
Corinna Vinschen aa106b29a6 malloc/nano-malloc: correctly check for out-of-bounds allocation reqs
The overflow check in mEMALIGn erroneously checks for INT_MAX,
albeit the input parameter is size_t.  Fix this to check for
__SIZE_MAX__ instead.  Also, it misses to check the req against
adding the alignment before calling mALLOc.

While at it, add out-of-bounds checks to pvALLOc, nano_memalign,
nano_valloc, and Cygwin's (unused) dlpvalloc.

Signed-off-by: Corinna Vinschen <corinna@vinschen.de>
2020-11-17 10:52:34 +01:00
Corinna Vinschen 3b80191f33 Cygwin: testsuite: fix insecure usage of printf in libltp
Signed-off-by: Corinna Vinschen <corinna@vinschen.de>
2020-11-16 15:57:31 +01:00
Ken Brown 22d1ebacfc Cygwin: path_conv::eq_worker: add NULL pointer checks
Don't call cstrdup on NULL pointers.

This fixes a crash that was observed when cloning an fhandler whose
path_conv member had freed its strings.
2020-11-16 08:15:31 -05:00
Jon Turney 140b0a6484
Cygwin: Fix testsuite tmpdir creation with non-default cygdrive prefix 2020-11-12 15:30:35 +00:00
Ken Brown f505e7a032 Cygwin: fhandler_fifo: reduce size
Replace the 'WCHAR pipe_name_buf[48]' class member by 'PWCHAR
pipe_name_buf', and allocate space for the latter as needed.

Change the default constructor to accommodate this change, and add a
destructor that frees the allocated space.

Also change get_pipe_name and clone to accommodate this change.
2020-11-09 08:47:29 -05:00
Jon Turney f3ed5f2fe0
Cygwin: Ensure temporary directory used by tests exists
By default, libltp tests will create temporary files in a subdirectory
of /tmp, which will (nowadays) be located relative to the test DLL (by
assuming that it is in /bin).  This will evaluate to the directory
$target_builddir/winsup/tmp, which doesn't exist.

The location used for these temporary files can be explicitly controlled
by setting the TDIRECTORY env var.  Arrange to set that env var to the
/cygdrive path of a tmp subdirectory of the build directory.

Unfortunately, libltp doesn't clean the temporary directory if
TDIRECTORY is set, and some tests assume they are started in a clean
directory, so we need to do that in tcl.
2020-11-08 14:42:02 +00:00
Jon Turney 9cdb799806
Cygwin: Set PATH for tests to pick up cygwin0.dll
Set the PATH so that tests can pick up cygwin0.dll.  Looks like this was
dropped by accident in 2e488e95 ("Don't rely on in-build tools"), so
restore it as it was prior to 9d89f634.
2020-11-08 14:41:55 +00:00
Jon Turney 0c448d53e1
Cygwin: Check exit code of a test, rather than stdout
In winsup.exp, don't consider a command failed if it produced any output
(e.g. if the compiler produced warnings).  Instead check the exit code.
2020-11-08 14:41:46 +00:00
Jon Turney fb967562b0
Cygwin: Use absolute path to libltp includes
Use an absolute path to libltp includes, to allow for the fact that
we'll be compiling tests in a subdirectory.
2020-11-08 14:41:38 +00:00
Jon Turney e6248c2fd0
Cygiwn: Detect and use MinGW compilers for testsuite wrappers
Drop MINGW_FE, which I can't find any trace of, and instead detect and
use MinGW compilers.

This requires adding AC_CANONICAL_TARGET, to set $target_cpu.
2020-11-08 14:41:28 +00:00
Jon Turney 20b5e6375c
Cygwin: Define target_builddir autoconf and Makefile variables
This is now required as cygwin_build is defined in terms of
target_builddir.

(Note that in other subdirectories, the autoconf variable
target_builddir is AC_SUBST-ed as a side-effect of using a macro from
winsup/acinclude.m4, which is perhaps less than ideal)
2020-11-08 14:41:08 +00:00
Jon Turney 551df57fa0
Cygwin: Move adding libltp to VPATH after Makefile.common
Move adding libltp to the VPATH after Makefile.common, which sets VPATH.
2020-11-08 14:40:59 +00:00
Jon Turney 187281b711
Cygwin: Avoid 'Makefile.in seems to ignore the --datarootdir setting' warning
Avoid a 'Makefile.in seems to ignore the --datarootdir setting' warning
when configuring in testsuite directory.
2020-11-08 14:40:47 +00:00
Jon Turney 7b65f83c22
Cygwin: Add rule to testsuite Makefile to regenerate it when needed 2020-11-08 14:40:41 +00:00
Jon Turney a7cb126b14
Cygwin: Always configure in testsuite subdirectory
Doing this properly using AC_CONFIG_SUBDIRS is necessary to get the
correct paths in flags given to the compiler specified in CC/CXX.
2020-11-08 14:40:34 +00:00
Jon Turney 58ca21cf78
Cygwin: Add testsuite directory to autogen.sh
Also remove unneeded aclocal.m4 for an old aclocal version.
2020-11-08 14:40:26 +00:00
Ken Brown 26a5aff2a9 Cygwin: FIFO: update_my_handlers: fix handle leak 2020-11-06 08:16:45 -05:00
Jon Turney 5f3a301fd5
Cygwin: Drop passing '-c' compiler flag into gentls_offsets
That script appends a '-E', since we only use $(CC) to preprocess, and
thus adding '-c' is having no effect.
2020-11-02 16:49:03 +00:00
Jon Turney 22d79c79b5
Cygwin: Remove rules for building libcygwin_s.a
Untouched since added in 66a83f3e, and described as 'non-working'.
2020-11-02 16:49:02 +00:00
Jon Turney a5398eaecb
Cygwin: Remove Makefile contents conditional on PREPROCESS, which is never defined 2020-11-02 16:49:01 +00:00
Jon Turney f4bfaddb3c
Cygwin: Drop autoconf variable all_host
The autoconf variable all_host is used to make building of the stub
library used by the testsuite conditional on not cross-compiling.

Make it unconditional, so we will notice if it's broken when
cross-compiling.
2020-11-02 16:49:00 +00:00
Jon Turney 29817cc41e
Cygwin: Remove autoconf variable DLL_NAME
Remove autoconf variable DLL_NAME, which has a constant value which is
only used in one place.
2020-11-02 16:48:59 +00:00
Jon Turney d555072c94
Cygwin: Drop AC_SUBST(build_exeext)
The autoconf variable build_exeext isn't defined, and (since the doc
subdirectory doesn't build any executables) it's value isn't used.
2020-11-02 16:48:58 +00:00
Jon Turney 174268f4bb
Cygwin: Remove intro2man.stamp on clean 2020-11-02 16:48:57 +00:00
Jon Turney 9517e5f503
Revert "Cygwin: gendef generates sigfe.s and cygwin.def"
This reverts commit 74a164f1c1.

Shame we can't use '&:' for a grouped target here, since that requires
GNU make 4.3
2020-10-30 16:31:08 +00:00
Jon Turney 7fa743ca94
Cygwin: Restore setting CC and CXX Makefile variables
b55e3f19 was a bit too aggressive in dropping, rather than just
un-exporting these Makefile variables.  We need to set these to the
configured host compiler if we are cross-compiling, otherwise they
default to the build compiler.

Also export CC to the mkvers.sh script (which requires it since
4eca5e6a).  It's unclear why we can't just cause windres to use the
build 'cpp' as the pre-processor there.
2020-10-28 15:23:56 +00:00
Ken Brown 262de3ecf0 Cygwin: fix return value of sqrtl on negative infinity
The return value is now -NaN.

This fixes a bug in the mingw-w64 code that was imported into Cygwin.
The fix is consistent with Posix and Linux.  It is also consistent
with the current mingw-w64 code, with one exception: The mingw-w64
code sets errno to EDOM if the input is -NaN, but this appears to
differ from Posix and Linux.

Addresses: https://cygwin.com/pipermail/cygwin/2020-October/246606.html
2020-10-27 10:23:27 -04:00
Takashi Yano via Cygwin-patches 490d4862df Cygwin: pty: Disable ResizePseudoConsole() if stdout is redirected.
- Calling ResizePseudoConsole() generates some escape sequences.
  Due to this behaviour, if the output of non-cygwin app is piped
  to less, screen is sometimes distorted when the screen is resized.
  With this patch, ResizePseudoConsole() is not called if stdout is
  redirected.
2020-10-27 10:03:42 +01:00
Takashi Yano via Cygwin-patches 7b996f807e Cygwin: pty: Fix race condition in initialization of pseudo console.
- If output of non-cygwin process is piped to cygwin process, such
  as less, the non-cygwin process sometimes fails to start and hangs.
  This patch fixes the issue.
2020-10-26 10:04:12 +01:00
Ken Brown via Cygwin-patches 3752ab804b Cygwin: AF_INET and AF_LOCAL: recv_internal: fix MSG_WAITALL support
If MSG_WAITALL is set, recv_internal calls WSARecv or WSARecvFrom in a
loop, in an effort to fill all the scatter-gather buffers.  The test
for whether all the buffers are full was previously incorrect.
2020-10-23 08:23:27 -04:00
Jon Turney 0c3c451ae3
Cygwin: Drop do-nothing install_target target 2020-10-21 17:11:15 +01:00
Jon Turney c50e0d8ba4
Cygwin: Drop do-nothing install_host target
Drop do-nothing install_host target, which is only used when not
cross-compiling.
2020-10-21 17:11:09 +01:00
Jon Turney 08f5cc2ef4
Cygwin: Remove nostdlib Makefile variable
It's used in one place, and it's value is unconditional.
2020-10-21 17:11:02 +01:00
Jon Turney 74a164f1c1
Cygwin: gendef generates sigfe.s and cygwin.def
Express that gendef generates sigfe.s and cygwin.def in a slightly less
nutty way.
2020-10-21 17:10:56 +01:00
Jon Turney b5bc608b32
Cygwin: Drop cygwin version.o from cygserver
The data it contains isn't referenced since 9e9bc3a4.
2020-10-21 17:10:50 +01:00
Jon Turney 161cd505e5
Cygwin: Remove lsaauth
Remove lsaauth, not built since 2741dd05.
2020-10-21 17:10:44 +01:00
Jon Turney 3662877f31
Cygwin: Use aclocal option --system-acdir rather than --acdir
In autogen.sh, use 'aclocal --system-acdir' rather than 'aclocal --acdir'.

'--acdir' was deprecated in automake 1.11 and removed in automake 1.13.
2020-10-18 14:55:15 +01:00
Jon Turney 78bfd7dbb9
Cygwin: Remove --with-windows-{libs,headers} 2020-10-18 14:55:14 +01:00
Jon Turney b55e3f1916
Cygwin: Remove ccwrap
ccwrap massages the compiler's standard include directories to remove
'/usr/include/w32api', with the intent of allowing it to be overriden by
'--with-windows-headers' (See 4c36016b).

I'm not 100% convinced that this is always working as desired, since in
some places w32api includes are done using <w32api/something.h>, which
will find them via the path /usr/include.

If this does turn out to be needed, this could also be implemented by
constructing the appropriate compiler flags once, rather than on every
compiler invocation.
2020-10-18 14:55:13 +01:00
Jon Turney 5601d53640
Cygwin: Stop using c++wrap for MinGW-compiled utilities
Stop using c++wrap for MinGW-compiled utilities.

(Partially reverts 96079146)
2020-10-18 14:55:11 +01:00
Torbjörn SVENSSON via Newlib 7ed952000c libc/time: Move internal newlib tz-structs into own header
As discussed in GCC bug 97088
(https://gcc.gnu.org/bugzilla/show_bug.cgi?id=97088), parameters in
prototypes of library functions should use reserved names, or no name
at all.

This patch moves the internal struct __tzrule_struct to its own
internal header sys/_tz_structs.h.  This is included from newlib's
time code as well as from Cygwin's localtime wrapper.

Signed-off-by: Torbjörn SVENSSON <torbjorn.svensson@st.com>
Signed-off-by: Corinna Vinschen <corinna@vinschen.de>
2020-10-15 16:59:51 +02:00
Jon Turney 93216e2791
Cygwin: Remove unused doc/ug-info.xml
Remove doc/ug-info.xml, not used in any document.
2020-10-14 15:04:24 +01:00
Jon Turney e78a7f8f6e
Cygwin: Remove empty MT_SAFE and MT_SAFE_OBJECTS 2020-10-14 15:04:23 +01:00
Jon Turney 1996cb7e84
Cygwin: Remove autoconf variable INSTALL_LICENSE
Remove autoconf variable INSTALL_LICENSE, which has a constant value
which is only used once.
2020-10-14 15:04:22 +01:00
Jon Turney 66c76e8aff
Cygwin: Drop AC_SUBST(LIBSERVER)
The autoconf variable LIBSERVER isn't defined, and it's value isn't
used. (The Makefile.in contains a literal value for the name of this
library instead).
2020-10-14 15:04:21 +01:00
Jon Turney 177d15686d
Cygwin: Remove AC_ARG_PROGRAM/program_transform_name
Not done consistently, and probably never used.
2020-10-14 15:04:20 +01:00
Jon Turney b21158bc4e
Cygwin: Remove AC_PROG_MAKE_SET
This is only needed if we are using an ancient make which doesn't set
${MAKE}, but we say "This makefile requires GNU make." everywhere.

It only has an effect if @SET_MAKE@ is used, which we aren't doing
consistently.
2020-10-14 15:04:19 +01:00
Jon Turney ad0f139c74
Cygwin: Drop STDINCFLAGS overrides
This used to turn off -nostdinc on a per-file basis, but has no effect
since 4c36016b57.
2020-10-14 15:04:18 +01:00
Jon Turney 08e7ee1912
Cygwin: Drop looking for w32api in winsup/w32api
Stop looking for w32api headers in the (no longer existent)
winsup/w32api directory (removed in commit 61746d6ae8).
2020-10-14 15:04:17 +01:00
Brian Inglis 3fd14da2c3 format_proc_cpuinfo: add enqcmd cpuinfo flag
Add linux-next 5.9 cpuinfo flag for Intel enqcmd/s instructions:
x86/cpufeatures: Enumerate ENQCMD and ENQCMDS instructions:
Work submission instruction comes in two flavors. ENQCMD can be called
both in ring 3 and ring 0 and always uses the contents of a PASID MSR
when shipping the command to the device. ENQCMDS allows a kernel driver
to submit commands on behalf of a user process. The driver supplies the
PASID value in ENQCMDS. There isn't any usage of ENQCMD in the kernel as
of now.
The CPU feature flag is shown as "enqcmd" in /proc/cpuinfo.
2020-10-13 18:14:02 +02:00
Ken Brown 2031b48c93 Cygwin: AF_UNIX: open_pipe: call recv_peer_info
If open_pipe is called with xchg_sock_info true, call recv_peer_info
in addition to send_sock_info.
2020-10-04 12:53:05 -04:00
Ken Brown 6748c6ecf8 Cygwin: AF_UNIX: listen_pipe: check for STATUS_SUCCESS
A successful connection can be indicated by STATUS_SUCCESS or
STATUS_PIPE_CONNECTED.  Previously we were checking only for the
latter.
2020-10-04 12:53:05 -04:00
Ken Brown 5930dca459 Cygwin: AF_UNIX: socket: set the O_RDWR flag 2020-10-04 12:53:05 -04:00
Ken Brown 0e29048956 Cygwin: always recognize AF_UNIX sockets as reparse points
If __WITH_AF_UNIX is defined when Cygwin is built, then a named
AF_UNIX socket is represented by a reparse point with a
Cygwin-specific tag and GUID.  Make such files recognizable as reparse
points (but not as sockets) even if __WITH_AF_UNIX is not defined.
That way utilities such as 'ls' and 'rm' still behave reasonably.

This requires two changes:

- Define the GUID __cygwin_socket_guid unconditionally.

- Make check_reparse_point_target return PATH_REP on a reparse point
  of this type if __WITH_AF_UNIX is not defined.
2020-10-04 12:53:05 -04:00
Ken Brown 0b4beaf46f Cygwin: fix handling of known reparse points that are not symlinks
Commit aa467e6e, "Cygwin: add AF_UNIX reparse points to path
handling", changed check_reparse_point_target so that it could return
a positive value on a known reparse point that is not a symlink.  But
some of the code in check_reparse_point that handles this positive
return value was executed unconditionally, when it should have been
executed only for symlinks.

As a result, posixify could be called on a buffer containing garbage,
and check_reparse_point could erroneously return a positive value on a
non-symlink.  This is now fixed so that posixify is only called if the
reparse point is a symlink, and check_reparse_point returns 0 if the
reparse point is not a symlink.

Also fix symlink_info::check to handle this last case, in which
check_reparse_point returns 0 on a known reparse point.
2020-10-04 12:53:05 -04:00
Ken Brown 4b4fffe0f2 Cygwin: AF_UNIX: use FILE_OPEN_REPARSE_POINT when needed
The following Windows system calls currently fail with
STATUS_IO_REPARSE_TAG_NOT_HANDLED when called on an AF_UNIX socket:

- NtOpenFile in get_file_sd

- NtOpenFile in set_file_sd

- NtCreateFile in fhandler_base::open

Fix this by adding the FILE_OPEN_REPARSE_POINT flag to those calls
when the file is a known reparse point.
2020-10-04 12:53:04 -04:00
Jon Turney c5bdf60ac4
Cygwin: avoid GCC 10 error with -Werror=narrowing
../../../../src/winsup/cygwin/pinfo.cc: In member function 'DWORD pinfo::status_exit(DWORD)':
../../../../src/winsup/cygwin/ntdll.h:21:68: error: narrowing conversion of '-536870295' from 'NTSTATUS' {aka 'int'} to 'unsigned int' [-Wnarrowing]
../../../../src/winsup/cygwin/pinfo.cc:136:10: note: in expansion of macro 'STATUS_ILLEGAL_DLL_PSEUDO_RELOCATION'

../../../../src/winsup/cygwin/sigproc.cc: In member function 'DWORD child_info::proc_retry(HANDLE)':
../../../../src/winsup/cygwin/ntdll.h:21:68: error: narrowing conversion of '-536870295' from 'NTSTATUS' {aka 'int'} to 'unsigned int' [-Wnarrowing]
../../../../src/winsup/cygwin/sigproc.cc:1120:10: note: in expansion of macro 'STATUS_ILLEGAL_DLL_PSEUDO_RELOCATION'

NT error statuses seem to be variously DWORD (unsigned) or NTSTATUS
(signed)?  So use the one which doesn't cause problems here.
2020-09-28 14:11:27 +01:00
Jon Turney 129c9844a6
Cygwin: avoid GCC 10 error with -Werror=narrowing
../../../../src/winsup/cygwin/fhandler_console.cc: In member function 'const unsigned char* fhandler_console::write_normal(const unsigned char*, const unsigned char*)':
../../../../src/winsup/cygwin/fhandler_console.cc:2782:8: error: narrowing conversion of '-2' from 'int' to 'long unsigned int' [-Wnarrowing]
../../../../src/winsup/cygwin/fhandler_console.cc:2786:8: error: narrowing conversion of '-1' from 'int' to 'long unsigned int' [-Wnarrowing]
../../../../src/winsup/cygwin/fhandler_console.cc:2836:8: error: narrowing conversion of '-2' from 'int' to 'long unsigned int' [-Wnarrowing]
../../../../src/winsup/cygwin/fhandler_console.cc:2840:8: error: narrowing conversion of '-1' from 'int' to 'long unsigned int' [-Wnarrowing]

A mbtowc_p function returns an int, so that seems the correct type to use here.
2020-09-28 14:11:26 +01:00
Jon Turney 3bb579a43c
Cygwin: avoid GCC 10 error with -Werror=parentheses
../../../../src/winsup/cygwin/fhandler_socket_inet.cc: In member function 'ssize_t fhandler_socket_wsock::send_internal(_WSAMSG*, int)':
../../../../src/winsup/cygwin/fhandler_socket_inet.cc:1381:69: error: suggest parentheses around assignment used as truth value [-Werror=parentheses]
2020-09-28 14:11:25 +01:00
Ken Brown 6b6dd5fede Cygwin: check_reparse_point_target: update comment
Commit aa467e6e, "Cygwin: add AF_UNIX reparse points to path
handling", changed the return values of check_reparse_point_target.
Update the comment accordingly.
2020-09-26 16:44:44 -04:00
Ken Brown c1f7c4d1b6 Cygwin: winlean.h: remove most of the extended memory API
This was added as a temporary measure in commit e18f7f99 because it
wasn't yet in the mingw-w64 headers.  With one exception, it is now in
the current release of the headers (version 8.0.0), so we don't need
it in winlean.h.

The exception is that VirtualAlloc2 is declared conditionally in
<w32api/memoryapi.h>, but the compilation of Cygwin requires it to
always be declared, even though it will only be executed on systems
that support it.  So retain the declaration in winlean.h.  And add
"WINAPI" to the declaration, as in memoryapi.h.

Add a check that version >= 8 of the mingw-w64 headers is intalled.

Also revert commit 3d136011, which was a related temporary workaround.
2020-09-24 12:28:03 -04:00
Brian Inglis 749cbccc55 winsup/doc/faq-what.xml: FAQ 1.2 Windows versions supported
enumerate Vista, 7, 8, 10 progression to be clear, and earliest server 2008;
add 8.1, exclude S mode, add Cygwin32 on ARM, specify 64 bit only AMD/Intel
2020-09-18 07:52:24 -04:00
Brian Inglis 1732249529 fhandler_proc.cc(format_proc_cpuinfo): add tsxldtrk, sev_es flags
Add linux-next cpuinfo flags for Intel TSX suspend load address tracking
instructions and AMD Secure Encrypted Virtualization with Encrypted State.
2020-09-17 18:31:50 -04:00
Takashi Yano 2ed80d04f4 Cygwin: pty: Drop handling for UTF-7 in convert_mb_str().
- Charset conversion for UTF-7, ISO-2022 and ISCII, which are not
  supported in cygwin, does not work properly as a result. At the
  expense of the above, the code has been simplified a bit.
2020-09-11 20:14:33 +02:00
Jon Turney f4a1b6ae18
Cygwin: ldd: Also look for not found DLLs when exit status is non-zero
If the process exited with e.g. STATUS_DLL_NOT_FOUND, also process the
file to look for not found DLLs.

(We currently only do this when a STATUS_DLL_NOT_FOUND exception occurs,
which I haven't managed to observe)

This still isn't 100% correct, as it only examines the specified file
for missing DLLs, not recursively on the DLLs it depends upon.
2020-09-11 13:27:03 +01:00
Takashi Yano via Cygwin-patches 232fde0e76 Cygwin: pty: Prevent garbled output for existing non-cygwin apps.
- If pseudo console is disabled, non-cygwin apps do not detect
  console device. In this case, some apps output UTF-8 regardless
  of the locale setting. At least git-for-windows, rust-based apps
  and node.js do that. This patch provides backward compatibility
  as default behaviour by setting console codepage to the charset of
  the locale. Even in the cases above, garbled output is prevented
  with this patch in most cases because mintty uses UTF-8 by default.

  I beleave this is not really a problem in cygwin side but that in
  app side, however, some users complain about garbled output with
  existing apps in MSYS2 (which is based on cygwin) in which pseudo
  console is disabled by default.
2020-09-11 14:09:10 +02:00
Corinna Vinschen 09738c3062 Cygwin: pty: setup new pty on opening the master, not in constructor
Setting up the pty in the master constructor ends up creating a new pty
on every stat(2) call on /dev/ptmx.  Only do this when actually opening
the device, not when using the device class in another, non-opening
context.

Signed-off-by: Corinna Vinschen <corinna@vinschen.de>
2020-09-09 22:57:09 +02:00
Takashi Yano via Cygwin-patches fd3ad92f9e Cygwin: pty: Fix input charset for non-cygwin apps with disable_pcon.
- If the non-cygwin apps is executed under pseudo console disabled,
  multibyte input for the apps are garbled. This patch fixes the
  issue.
2020-09-09 21:35:46 +02:00
Takashi Yano via Cygwin-patches 91908fe000 Cygwin: pty: Revise convert_mb_str() function.
- Use tmp_pathbuf instead of HeapAlloc()/HeapFree().
- Remove mb_str_free() function.
- Consider the case where the multibyte string stops in the middle
  of a multibyte char.
2020-09-09 21:35:46 +02:00
Ken Brown 7de33047ec Cygwin: document last bug fix 2020-09-08 15:01:07 -04:00
Ken Brown 6775ac8cb5 Cygwin: path_conv::check: handle error from fhandler_process::exists
fhandler_process::exists is called when we are checking a path
starting with "/proc/<pid>/fd".  If it returns virt_none and sets an
errno, there is no need for further checking.  Just set 'error' and
return.
2020-09-08 15:00:55 -04:00
Ken Brown 58cc67d653 Cygwin: format_process_fd: add directory check
The incoming path is allowed to have the form "$PID/fd/[0-9]*/.*"
provided the descriptor symlink points to a directory.  Check that
this is indeed the case.
2020-09-08 14:58:18 -04:00
Corinna Vinschen eaed594d73 Cygwin: pty: move codepage evaluation to nlsfuncs.cc
The new function __eval_codepage_from_internal_charset
is a simplified version of the former code in
fhandler_tty.cc.  It probably needs some extension,
but the gist is to use knowledge of internals to
be as quick as possible.

Signed-off-by: Corinna Vinschen <corinna@vinschen.de>
2020-09-08 10:36:04 +02:00
Corinna Vinschen 8d0ff0768f Cygwin: drop internal O_NOSYMLINK and O_DIROPEN flags
Both flags are outdated and collide with official flags in
sys/_default_fcntl.h, which may result in weird misbehaviour
of file functions.

O_NOSYMLINK is not used anyway.

O_DIROPEN is used in fhandler_virtual and derived classes.
The collision with O_NOFOLLOW results in spurious EISDIR
errors when, e. g., reading files in the registry.
fhandler_base::open_fs uses O_DIROPEN in the call to
fhandler_base::open, but it's not used in this context
further down the road.

Drop both flags and create an alternative "diropen" bool
flag in fhandler_virtual.

Signed-off-by: Corinna Vinschen <corinna@vinschen.de>
2020-09-07 22:45:56 +02:00
David McFarland via Cygwin-patches 5d962bc718 Cygwin: create install dir for libs
This fixes a race in parallel installs.
2020-09-04 14:53:47 +02:00
Corinna Vinschen 7c4719f548 Cygwin: libpthread: Export C11 thread symbols from libpthread.a as well
...as on glibc right now.  This is supposed to support autoconf scripts
checking for existence of these symbols in libpthread.

Signed-off-by: Corinna Vinschen <corinna@vinschen.de>
2020-09-01 12:52:08 +02:00
Corinna Vinschen fc352c07ad Cygwin: mtx_init: drop glibc workaround
GLibc will change this code in the forseeable future to align more
with FreeBSD, so this hack is not actually desired.

Signed-off-by: Corinna Vinschen <corinna@vinschen.de>
2020-09-01 12:46:15 +02:00
Takashi Yano via Cygwin-patches 6871c8418d Cygwin: pty: Fix a bug in the code removing set window title sequence.
- Commit 4e08fe42c9 has a bug which
  may cause infinite loop in pty_master_fwd_thread(). This patch
  fixes the issue.
2020-08-31 16:25:11 +02:00
Takashi Yano via Cygwin-patches 4e08fe42c9 Cygwin: pty: Disable pseudo console if TERM does not have CSI6n.
- Pseudo console internally sends escape sequence CSI6n (query cursor
  position) on startup of non-cygwin apps. If the terminal does not
  support CSI6n, CreateProcess() hangs waiting for response. To prevent
  hang, this patch disables pseudo console if the terminal does not
  have CSI6n. This is checked on the first execution of non-cygwin
  app using the following steps.
    1) Check if the terminal support ANSI escape sequences by looking
       into terminfo database. If terminfo has cursor_home (ESC [H),
       the terminal is supposed to support ANSI escape sequences.
    2) If the terminal supports ANSI escape sequneces, send CSI6n for
       a test and wait for a responce for 40ms.
    3) If there is a responce within 40ms, CSI6n is supposed to be
       supported.
  Also set-title capability is checked, and removes escape sequence
  for setting window title if the terminal does not have the set-
  title capability.
2020-08-31 12:07:09 +02:00