Takashi Yano [Thu, 6 Feb 2020 10:48:17 +0000 (19:48 +0900)]
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().
libgloss: Fix lseek semihosting bug on nios2 and m68k
When off_t is 32 bits, the value needs to be sign-extended to 64 bits
before shifting right to extract the high-order word. Previously
negative offsets were incorrectly encoded.
Takashi Yano [Sat, 1 Feb 2020 04:28:39 +0000 (13:28 +0900)]
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.
Ken Brown [Thu, 30 Jan 2020 15:08:21 +0000 (10:08 -0500)]
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().
Jim Wilson [Wed, 29 Jan 2020 22:46:17 +0000 (14:46 -0800)]
RISC-V: Use newlib nano specific libm.
The libm gamma functions use the _gamma_signgam field of the reentrant
structure, which changes offset with the --enable-newlib-reent-small
configure option, which means we need to use a newlib nano specific
version of libm in addition to libc in the nano.specs file. Reported
by Keith Packard. There is a riscv-gnu-toolchain patch that goes
along with this to create the new libm_nano.a file.
Ken Brown [Sat, 25 Jan 2020 18:08:00 +0000 (13:08 -0500)]
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.)
Ken Brown [Sat, 25 Jan 2020 12:45:10 +0000 (07:45 -0500)]
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.
Ken Brown [Thu, 23 Jan 2020 20:11:15 +0000 (15:11 -0500)]
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.
Ken Brown [Thu, 23 Jan 2020 19:39:15 +0000 (14:39 -0500)]
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.
This breaks gnulib's autoconf test for POSIX compatibility of
fflush/fseek. After fflush/fseek, ftello and lseek are out of
sync, with lseek having the wrong offset. This breaks backward
compatibility with Cygwin applications.
Ken Brown [Fri, 24 Jan 2020 20:09:03 +0000 (15:09 -0500)]
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.
Ken Brown [Fri, 24 Jan 2020 21:02:57 +0000 (16:02 -0500)]
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.
Ken Brown [Fri, 24 Jan 2020 19:54:47 +0000 (14:54 -0500)]
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.
Corinna Vinschen [Tue, 28 Jan 2020 16:57:50 +0000 (17:57 +0100)]
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.
Corinna Vinschen [Tue, 28 Jan 2020 16:40:40 +0000 (17:40 +0100)]
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.
Takashi Yano [Mon, 27 Jan 2020 11:22:24 +0000 (20:22 +0900)]
Cygwin: pty: Revise code waiting for forwarding again.
- After commit 6cc299f0e20e4b76f7dbab5ea8c296ffa4859b62, outputs of
cygwin programs which call both printf() and WriteConsole() are
frequently distorted. This patch fixes the issue.
Takashi Yano [Mon, 27 Jan 2020 12:14:32 +0000 (21:14 +0900)]
Cygwin: console: Share readahead buffer within the same process.
- The cause of the problem reported in
https://www.cygwin.com/ml/cygwin/2020-01/msg00220.html is that the
chars input before dup() cannot be read from the new file descriptor.
This is because the readahead buffer (rabuf) in the console is newly
created by dup(), and does not inherit from the parent. This patch
fixes the issue.
Ken Brown [Thu, 23 Jan 2020 16:31:04 +0000 (16:31 +0000)]
Cygwin: re-implement fhandler_fifo::open with O_PATH
If the O_PATH flag is set, fhandler_fifo::open now simply calls
fhandler_base::open_fs.
The previous attempt to handle O_PATH in commit aa55d22c, "Cygwin:
honor the O_PATH flag when opening a FIFO", fixed a hang but otherwise
didn't do anything useful.
Ken Brown [Thu, 23 Jan 2020 16:31:04 +0000 (16:31 +0000)]
Cygwin: device_access_denied: return false if O_PATH is set
If O_PATH is set in the flags argument of
fhandler_base::device_access_denied, return false. No
read/write/execute access should be required in this case.
Previously, the call to device_access_denied in open(2) would lead to
an attempt to open the file with read access even if the O_PATH flag
was set.
Brian Inglis [Thu, 23 Jan 2020 09:06:27 +0000 (02:06 -0700)]
fhandler_proc.cc:format_proc_cpuinfo add rdpru flag
rdpru flag is cpuid xfn 80000008 ebx bit 4 added in linux 5.5;
see AMD64 Architecture Programmer's Manual Volume 3:
General-Purpose and System Instructions
https://www.amd.com/system/files/TechDocs/24594.pdf#page=329
and elsewhere in that document
Takashi Yano [Thu, 23 Jan 2020 11:34:25 +0000 (20:34 +0900)]
Cygwin: pty: Remove close() call just before reopening slave.
- After commit da4ee7d60b9ff0bcdc081609a4467adb428d58e6, the issue
reported in https://www.cygwin.com/ml/cygwin/2020-01/msg00209.html
occurs. This patch fixes the issue.
Takashi Yano [Tue, 21 Jan 2020 13:25:13 +0000 (22:25 +0900)]
Cygwin: pty: Introduce disable_pcon in environment CYGWIN.
- For programs which does not work properly with pseudo console,
disable_pcon in environment CYGWIN is introduced. If disable_pcon
is set, pseudo console support is disabled.
Takashi Yano [Tue, 21 Jan 2020 14:41:44 +0000 (23:41 +0900)]
Cygwin: pty: Fix reopening slave in push_to_pcon_screenbuffer().
- For programs compiled with -mwindows option, reopening slave is
needed in push_to_pcon_screenbuffer(), however, it was not at
appropriate place. This causes the problem reported in
https://www.cygwin.com/ml/cygwin/2020-01/msg00161.html. This
patch fixes the issue.
Jeff Johnston [Tue, 21 Jan 2020 20:12:34 +0000 (15:12 -0500)]
Change the reent verify check option to document disabling it
- also change the handling of default_newlib_reent_check_verify to
be the same as other default variables in configure.host
- regenerate newlib/configure
Takashi Yano [Tue, 21 Jan 2020 02:22:02 +0000 (11:22 +0900)]
Cygwin: pty: Revise code waiting for forwarding by master_fwd_thread.
- Though this rarely happens, sometimes the first printing of non-
cygwin process does not displayed correctly. To fix this issue,
the code for waiting for forwarding by master_fwd_thread is revised.
Keith Packard [Tue, 21 Jan 2020 06:46:36 +0000 (22:46 -0800)]
riscv: Map between ieeefp.h exception bits and RISC-V FCSR bits
If we had architecture-specific exception bits, we could just set them
to match the processor, but instead ieeefp.h is shared by all targets
so we need to map between the public values and the register contents.
Keith Packard [Tue, 21 Jan 2020 06:46:35 +0000 (22:46 -0800)]
riscv: Add 'break' statements to fpsetround switch
This makes the fpsetround function actually do something rather than
just return -1 due to the default 'fall-through' behavior of the switch
statement.
Ken Brown [Fri, 27 Dec 2019 22:38:32 +0000 (17:38 -0500)]
Cygwin: fstatat, fchownat: support the AT_EMPTY_PATH flag
Following Linux, allow the pathname argument to be an empty string if
the AT_EMPTY_PATH flag is specified. In this case the dirfd argument
can refer to any type of file, not just a directory, and the call
operates on that file. In particular, dirfd can refer to a symlink
that was opened with O_PATH | O_NOFOLLOW.
Ken Brown [Fri, 27 Dec 2019 22:17:35 +0000 (17:17 -0500)]
Cygwin: readlinkat: allow pathname to be empty
Following Linux, allow the pathname argument to be an empty string,
provided the dirfd argument refers to a symlink opened with
O_PATH | O_NOFOLLOW. The readlinkat call then operates on that
symlink.
Ken Brown [Wed, 15 Jan 2020 15:49:21 +0000 (10:49 -0500)]
Cygwin: normalize_win32_path: allow drive without trailing backslash
Commit 283cb372, "Cygwin: normalize_win32_path: improve error
checking", required a prefix '\\?\' or '\??\' in the source path to be
followed by 'UNC\' or 'X:\', where X is a drive letter. That was too
restrictive, since it disallowed the paths '\\?\X: and '\??\X:'. This
caused problems when a user tried to use the root of a drive as the
Cygwin installation root, as reported here:
Takashi Yano [Thu, 16 Jan 2020 11:04:47 +0000 (20:04 +0900)]
Cygwin: pty: Fix state mismatch caused in octave gui.
- In octave gui, sometimes state mismatch between real pty state
and state variable occurs. For example, this occurs when 'ls'
command is executed in octave gui. This patch fixes the issue.
Takashi Yano [Fri, 10 Jan 2020 11:46:26 +0000 (20:46 +0900)]
Cygwin: pty: Disable FreeConsole() on close for non cygwin process.
- After commit e1a0775dc0545b5f9c81b09a327fc110c538b7b4, the problem
reported in https://www.cygwin.com/ml/cygwin/2020-01/msg00093.html
occurs. For Gnu scren and tmux, calling FreeConsole() on pty close
is necessary. However, if FreeConsole() is called, cygwin setup
with '-h' option does not work. Therefore, the commit e1a0775dc0545b5f9c81b09a327fc110c538b7b4 delayed closing pty.
This is the cause of the problem above. Now, instead of delaying
pty close, FreeConsole() is not called if the process is non cygwin
processes such as cygwin setup.
Takashi Yano [Thu, 2 Jan 2020 13:17:16 +0000 (22:17 +0900)]
Cygwin: console: Add code to restore console mode on close.
- The console with 24bit color support has a problem that console
mode is changed if cygwin process is executed in cmd.exe which
started in cygwin shell. For example, cursor keys become not
working if bash -> cmd -> true are executed in this order.
This patch fixes the issue.
Takashi Yano [Tue, 14 Jan 2020 01:53:59 +0000 (10:53 +0900)]
Cygwin: console: Add workaround for broken CSI3J in Win10 1809.
- In Win10 1809, the cursor position sometimes goes out of screen
by clear command in console. This seems to be caused by escape
sequence CSI3J (ESC[3J). This happens only for 1809. This patch
is a workaround for the issue.
Takashi Yano [Tue, 14 Jan 2020 02:09:42 +0000 (11:09 +0900)]
Cygwin: console: Disable xterm mode for non cygwin process only.
- Special function keys such as arrow keys or function keys do not
work in ConEmu with cygwin-connector after commit 6a06c6bc8f8492ea09aa3ae180fe94e4ac265611. This patch fixes the
issue.
Takashi Yano [Tue, 14 Jan 2020 02:50:04 +0000 (11:50 +0900)]
Cygwin: pty: Add missing CloseHandle() calls.
- PTY code which support pseudo console has a problem that causes
handle leaks. Four of these are bug in pty code, and the other
one seems to be a bug of Windows10. ClosePseudoConsole() fails
to close one internal handle. This patch fixes the issue.
Takashi Yano [Tue, 14 Jan 2020 04:10:54 +0000 (13:10 +0900)]
Cygwin: pty: Fix the issue regarding open and close multiple PTYs.
- If two PTYs are opened in the same process and the first one
is closed, the helper process for the first PTY remains running.
This patch fixes the issue.
Takashi Yano [Mon, 6 Jan 2020 14:38:34 +0000 (23:38 +0900)]
Cygwin: select: Speed up select() call for pty, pipe and fifo.
- The slowing down issue of X11 forwarding using ssh -Y, reported
in https://www.cygwin.com/ml/cygwin/2019-12/msg00295.html,
is due to the change of select() code for pty in the commit 915fcd0ae8d83546ce135131cd25bf6795d97966. cygthread::detach()
takes at most about 10msec because Sleep() is used in the thread.
For this issue, this patch uses cygwait() instead of Sleep() and
introduces an event to abort the wait. For not only pty, but pipe
and fifo also have the same problem potentially, so this patch
applies same strategy to them as well.
Takashi Yano [Sun, 5 Jan 2020 13:25:55 +0000 (22:25 +0900)]
Cygwin: console: Make suspending process work properly.
- After commit f4b47827cf87f055687a0c52a3485d42b3e2b941, suspending
process by Ctrl-Z does not work in console and results in hang up.
This patch fixes the issue.
Mark Geisert [Mon, 23 Dec 2019 06:45:54 +0000 (22:45 -0800)]
Cygwin: Add missing Linux #define of CPU_SETSIZE
Though our implementation of cpu sets doesn't need it, software from
Linux environments expects this definition to be present. It's
documented on the Linux CPU_SET(3) man page but was left out due to
oversight.
Ken Brown [Sat, 21 Dec 2019 22:53:52 +0000 (17:53 -0500)]
Cygwin: FIFO: use FILE_PIPE_REJECT_REMOTE_CLIENTS flag
Add that flag to the pipe type argument when creating the Windows
named pipe. And add a definition of that flag to ntdll.h (copied from
/usr/include/w32api/ddk/ntifs.h).
Takashi Yano [Thu, 19 Dec 2019 11:03:30 +0000 (20:03 +0900)]
Cygwin: pty: Fix ESC[?3h and ESC[?3l handling again.
- Even with commit fe512b2b12a2cea8393d14f038dc3914b1bf3f60, pty
still has a problem in ESC[?3h and ESC[?3l handling if invalid
sequence such as ESC[?$ is sent. This patch fixes the issue.
Takashi Yano [Wed, 18 Dec 2019 16:07:33 +0000 (01:07 +0900)]
Cygwin: pty: Fix a bug regarding ESC[?3h and ESC[?3l handling.
- Midnight commander (mc) does not work after the commit 1626569222066ee601f6c41b29efcc95202674b7 as reported in
https://www.cygwin.com/ml/cygwin/2019-12/msg00173.html.
This patch fixes the issue.
On certain error conditions there is a code snippet that checks
whether the last component of the path has a trailing dot or space or
a leading space. Skip this check if the last component is empty,
i.e., if the path ends with a backslash. This avoids an assertion
failure if the trailing backslash is the only backslash in the path,
as is the case for a DOS drive 'X:\'.
Keith Packard [Fri, 29 Nov 2019 19:23:20 +0000 (11:23 -0800)]
libm: switch sf_log1p from double error routines to float
sf_log1p was using __math_divzero and __math_invalid, which
drag in a pile of double-precision code. Switch to using the
single-precision variants. This also required making those
available in __OBSOLETE_MATH mode.
newlib wide char conversion functions were updated to
Unicode 11 on 2019-01-12
update standard symbol __STDC_ISO_10646__ to
Unicode 11 release date 2018-06-05 for Cygwin
Bastien Bouclet [Sat, 9 Nov 2019 16:28:04 +0000 (17:28 +0100)]
newlib: fix fseek optimization with SEEK_CUR
The call to fflush was invalidating the read buffer, preventing relative
seeks to positions that would have been inside the read buffer from
being optimized. The call to srefill would then re-read mostly the same
data that was initially in the read buffer.
Takashi Yano [Wed, 13 Nov 2019 10:49:29 +0000 (19:49 +0900)]
Cygwin: pty: Trigger redraw screen if ESC[?3h or ESC[?3l is sent.
- Pseudo console clears console screen buffer if ESC[?3h or ESC[?3l
is sent. However, xterm/vt100 does not clear screen. This cause
mismatch between real screen and console screen buffer. Therefore,
this patch triggers redraw screen in that situation so that the
synchronization is done on the next execution of native app.
This solves the problem reported in:
https://www.cygwin.com/ml/cygwin-patches/2019-q4/msg00116.html
Takashi Yano [Tue, 12 Nov 2019 18:04:59 +0000 (03:04 +0900)]
Cygwin: console: Revise the code checking if the console is legacy.
- Accessing shared_console_info before initializing causes access
violation in checking if the console is legacy mode. This patch
fixes this issue. This solves the problem reported in:
https://www.cygwin.com/ml/cygwin-patches/2019-q4/msg00099.html
Takashi Yano [Tue, 12 Nov 2019 13:00:23 +0000 (22:00 +0900)]
Cygwin: pty: Use redraw screen instead of clear screen.
- Previously, pty cleared screen at startup for synchronization
between the real screen and console screen buffer for pseudo
console. With this patch, instead of clearing screen, the screen
is redrawn when the first native program is executed after pty
is created. In other words, synchronization is deferred until
the native app is executed. Moreover, this realizes excluding
$TERM dependent code.
s[0:3] contain a descriptor used to set up the initial value of the
stack, but only the lower 48 bits of s[0:1] are currently used.
The reent marker is currently set in s3, but by stashing it in the
upper 16 bits of s[0:1] instead, s3 can be freed up for other purposes.