Commit Graph

19153 Commits

Author SHA1 Message Date
Takashi Yano 4153954a8b Cygwin: pty: Remove meaningless pointer increment.
- Since commit 73742508fc, a pointer
  increment in master write code which has no effect was remaining.
2020-10-14 10:54:11 -04:00
Takashi Yano d94a0fd92d 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-10-14 10:54:11 -04:00
Ken Brown c67c9e11a0 Cygwin: fhandler_fifo.cc: add commentary 2020-10-14 10:54:11 -04:00
Ken Brown 63db80ce37 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-10-14 10:54:11 -04:00
Jim Wilson 57f1f6c879 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.

Signed-off-by: Jim Wilson <jimw@sifive.com>
2020-10-14 10:54:11 -04:00
Ken Brown 4d6eb9dcd6 Cygwin: document recent changes 2020-10-14 10:54:10 -04:00
Ken Brown 58505a8791 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-10-14 10:54:10 -04:00
Ken Brown 90c190c7a8 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-10-14 10:54:10 -04:00
Ken Brown ac00451b30 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-10-14 10:54:10 -04:00
Ken Brown b1b4639b12 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-10-14 10:54:10 -04:00
Keith Packard 3ed0086d15 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-10-14 10:54:10 -04:00
Corinna Vinschen d1e2082ca4 Revert "newlib: fix fseek optimization with SEEK_CUR"
This reverts commit 59362c80e3.

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.

Signed-off-by: Corinna Vinschen <corinna@vinschen.de>
2020-10-14 10:54:10 -04:00
Corinna Vinschen 0c78404e7e Cygwin: stat: fix st_mode of fifos
Signed-off-by: Corinna Vinschen <corinna@vinschen.de>
2020-10-14 10:54:09 -04:00
Corinna Vinschen 23dc62ef6c 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-10-14 10:54:09 -04:00
Ken Brown a772f98861 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-10-14 10:54:09 -04:00
Ken Brown 4f6aab37b6 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-10-14 10:54:09 -04:00
Ken Brown 82d38aa51a 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-10-14 10:54:09 -04:00
Corinna Vinschen cd1559b02c 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-10-14 10:54:09 -04:00
Corinna Vinschen 61f3dd6d2d 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-10-14 10:54:09 -04:00
Corinna Vinschen 6d9cfcc578 Cygwin: add short comments to path_conv options
Signed-off-by: Corinna Vinschen <corinna@vinschen.de>
2020-10-14 10:54:09 -04:00
Corinna Vinschen e20c0f2ca7 Cygwin: drop __stdcall from close_all_files
Signed-off-by: Corinna Vinschen <corinna@vinschen.de>
2020-10-14 10:54:09 -04:00
Corinna Vinschen b2cb7c090e Cygwin: move chmod_device declaration to winsup.h
Signed-off-by: Corinna Vinschen <corinna@vinschen.de>
2020-10-14 10:54:09 -04:00
Takashi Yano f7d01f111d Cygwin: pty: Revise code waiting for forwarding again.
- After commit 6cc299f0e2, outputs of
  cygwin programs which call both printf() and WriteConsole() are
  frequently distorted. This patch fixes the issue.
2020-10-14 10:54:09 -04:00
Takashi Yano 433f2b91b4 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.
2020-10-14 10:54:09 -04:00
Ken Brown 88b80975bb Cygwin: FIFO: tweak fcntl and dup when O_PATH is set
fhandler_fifo::fcntl and fhandler_fifo::dup now call the corresponding
fhandler_base methods if the FIFO was opened with the O_PATH flag.
2020-10-14 10:54:09 -04:00
Ken Brown 4866aed39a 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.
2020-10-14 10:54:09 -04:00
Ken Brown 92cd230f87 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.
2020-10-14 10:54:09 -04:00
Corinna Vinschen f4330772ea Cygwin: Bump DLL version to 3.1.3
Signed-off-by: Corinna Vinschen <corinna@vinschen.de>
2020-10-14 10:54:09 -04:00
Brian Inglis b3f27d3170 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
2020-10-14 10:54:09 -04:00
Takashi Yano a56c2d0497 Cygwin: pty: Remove close() call just before reopening slave.
- After commit da4ee7d60b, the issue
  reported in https://www.cygwin.com/ml/cygwin/2020-01/msg00209.html
  occurs. This patch fixes the issue.
2020-10-14 10:54:08 -04:00
Corinna Vinschen d15e19a914 add pseudo console fixes to release text
Signed-off-by: Corinna Vinschen <corinna@vinschen.de>
2020-10-14 10:54:08 -04:00
Takashi Yano efbb1e43ee 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.
2020-10-14 10:54:08 -04:00
Takashi Yano 16c798ac0d 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.
2020-10-14 10:54:08 -04:00
Jeff Johnston 094b3f00ca Bump up newlib release to 3.3.0 2020-10-14 10:54:08 -04:00
Jeff Johnston ed086d82be 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
2020-10-14 10:54:08 -04:00
Jeff Johnston 3d4d7f4832 Default newlib_reent_check_verify to yes in configure.host 2020-10-14 10:54:08 -04:00
Takashi Yano ded6930e22 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.
2020-10-14 10:54:08 -04:00
Keith Packard c1e9248039 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.

Signed-off-by: Keith Packard <keithp@keithp.com>
2020-10-14 10:54:08 -04:00
Keith Packard d2071e4d38 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.

Signed-off-by: Keith Packard <keithp@keithp.com>
2020-10-14 10:54:07 -04:00
Keith Packard c0397bd7ff riscv: Use current pseudo-instructions to access the FCSR register
Use fscsr and frcsr to store and read the FCSR register instead of
fssr and frsr.

Signed-off-by: Keith Packard <keithp@keithp.com>
2020-10-14 10:54:07 -04:00
Ken Brown b300e8dc04 Cygwin: document recent changes 2020-10-14 10:54:07 -04:00
Ken Brown 842529460f 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.
2020-10-14 10:54:07 -04:00
Ken Brown 804add3cec 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.
2020-10-14 10:54:07 -04:00
Ken Brown db56586b2f Cygwin: allow opening a symlink with O_PATH | O_NOFOLLOW
Up to now, opening a symlink with O_NOFOLLOW fails with ELOOP.
Following Linux, allow this to succeed if O_PATH is also specified.
2020-10-14 10:54:07 -04:00
Ken Brown c46dacee36 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:

  https://cygwin.com/ml/cygwin/2020-01/msg00111.html

Modify the requirement so that '\??\X:' and '\\?\X:' are now allowed
as source paths, without a trailing backslash.
2020-10-14 10:54:07 -04:00
Takashi Yano 680720e58a 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.
2020-10-14 10:54:07 -04:00
Takashi Yano 0ac792dfad Cygwin: pty: Set console code page only if pseudo console is enabled.
- Input UTF-8 chars are garbled in ConEmu with cygwin connector if
  the environment does not support pseudo console. This patch fixes
  the issue.
2020-10-14 10:54:07 -04:00
Takashi Yano 145c1db7f8 Cygwin: pty: Disable FreeConsole() on close for non cygwin process.
- After commit e1a0775dc0, 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
  e1a0775dc0 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.
2020-10-14 10:54:07 -04:00
Takashi Yano 9e28f50097 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.
2020-10-14 10:54:07 -04:00
Takashi Yano 525eb06a98 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.
2020-10-14 10:54:07 -04:00