4
0
mirror of git://sourceware.org/git/newlib-cygwin.git synced 2025-02-09 02:29:07 +08:00

9054 Commits

Author SHA1 Message Date
Jon Turney
67f6939275 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-29 12:28:59 -04:00
Ken Brown
a55b1a60c5 Cygwin: AF_UNIX: recvmsg: fix MSG_PEEK support for datagrams
Add a new HANDLE argument to peek_pipe and peek_pipe_poll so that the
caller can specify a pipe handle to use in lieu of get_handle().  Use
this in recvmsg to make the MSG_PEEK flag work for unbound datagram
sockets.

Untested.
2020-10-29 12:27:24 -04:00
Ken Brown
d68d091944 Cygwin: AF_UNIX: recvmsg: support the MSG_TRUNC flag
This is in Linux since Linux 3.4 but not in Posix.

Not tested.
2020-10-29 11:39:00 -04:00
Ken Brown
c69c850df4 Cygwin: AF_UNIX: sendmsg: always send credentials
If the caller doesn't specify ancillary data, add credentials to the
outgoing packet.

This enables us to satisfy the requirement
(https://man7.org/linux/man-pages/man7/unix.7.html) that a socket with
the SO_PASSCRED option enabled can get the credentials of its peer in
every message it receives.

FIXME: I'm not sure if this is the right way to satisfy that
requirement.  A possible alternative would be to arrange for a socket
to be notified when its peer enables SO_PASSCRED.
2020-10-29 10:14:34 -04:00
Ken Brown
20fd0db075 Cygwin: AF_UNIX: create_cmsg_data: fix credential checking
Require the pid specified by an administrator to be the pid of an
existing process.
2020-10-29 09:17:38 -04:00
Ken Brown
fab8f9b104 Cygwin: AF_UNIX: create_cmsg_data: check credentials
If the user is not an administrator, check that the specified
credentials match the user's credentials.
2020-10-28 12:10:54 -04:00
Ken Brown
e5f2a0b1c8 Cygwin: AF_UNIX: FIXME comments 2020-10-28 10:38:49 -04:00
Ken Brown
d662a977f9 Cygwin: AF_UNIX: socketpair: set blocking mode earlier
Call set_nonblocking before creating the pipe so that the pipe is
created with the correct blocking mode.

Also call set_pipe_non_blocking on the second socket so that the
client end of the pipe has the correct blocking mode.  This also makes
sure that the client end of the pipe is set to message mode for
reading.
2020-10-28 10:01:03 -04:00
Ken Brown
7563d755f4 Cygwin: AF_UNIX: recvmsg: various improvements
If the caller has requested the source address, try to get it on each
iteration of the main read loop, not just the first.  Set msg_namelen
to 0 if it is never received.

If a packet containing control message data is received, don't read
any more packets, even if MSG_WAITALL is set.
2020-10-28 09:25:16 -04:00
Ken Brown
b1593593f0 Cygwin: AF_UNIX: create_cmsg_data: improve error handling
Set an errno before returning false.
2020-10-28 09:06:13 -04:00
Ken Brown
3ef34ca308 Cygwin: AF_UNIX: evaluate_cmsg_data: improve error handling
Set msg_controllen to the number of bytes of ancillary data actually
copied to msg_control.

Set the MSG_CTRUNC flag when appropriate.
2020-10-28 09:06:13 -04:00
Ken Brown
82474332a6 Cygwin: AF_UNIX: recvmsg: set MSG_TRUNC for truncated datagrams
If a datagram is truncated because it is larger than the supplied
buffer, set MSG_TRUNC in the msg_flags field of the (msghdr *)
argument.  See https://man7.org/linux/man-pages/man2/recvmsg.2.html.
2020-10-28 09:06:12 -04:00
Ken Brown
785de1a08d Cygwin: AF_UNIX: recvmsg: fix indentation 2020-10-28 09:06:12 -04:00
Ken Brown
784b811131 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:50:46 -04:00
Takashi Yano via Cygwin-patches
c5bf5617c0 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:50:46 -04:00
Takashi Yano via Cygwin-patches
cef9a6cfb2 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-27 10:50:45 -04:00
Ken Brown
a4f00ed42f Cygwin: AF_UNIX: add winsup/cygwin/socket_tests 2020-10-26 17:43:43 -04:00
Ken Brown
7d9bb0b2bc Cygwin: AF_UNIX: modify some FIXME comments 2020-10-26 15:08:39 -04:00
Ken Brown
7c0d061ec8 Cygwin: AF_UNIX: minor tweak 2020-10-26 14:51:08 -04:00
Ken Brown
67da0f3087 Cygwin: AF_UNIX: peek_pipe: check for STATUS_BUFFER_OVERFLOW
Treat this the same as STATUS_SUCCESS.
2020-10-26 14:50:09 -04:00
Ken Brown
abb6475a3b Cygwin: AF_UNIX: grab_admin_pkt: check for unread data in pipe
If there's unread data in the pipe from a previous partial read of a
packet, just return.  There can't be an administrative packet waiting
to be read in that case.
2020-10-26 14:38:20 -04:00
Ken Brown
3a6137eb3a Cygwin: AF_UNIX: accept4: set O_RDWR on new file descriptor 2020-10-26 10:53:37 -04:00
Ken Brown
f4cfd55ee0 Cygwin: AF_UNIX: improve select_printf output
Don't call get_name, which is useless.
2020-10-26 10:22:21 -04:00
Ken Brown
6afbd9bf9a Cygwin: AF_UNIX: fix MAX_AF_PKT_LEN
Define it to be UINT16_MAX, since the pckt_len member of
af_unix_pkt_hdr_t is of type uint16_t.

Previously it was 65536 (== UINT16_MAX + 1), which is 0 when cast to
uint16_t.  So an attempt to write a packet of size MAX_AF_PKT_LEN
actually wrote 0 bytes.
2020-10-26 09:13:42 -04:00
Ken Brown
fc26f2932b Cygwin: AF_UNIX: select_read: fix thinko
Don't set read_ready true if the socket is not connected.  One of the
uses of select is for a listening socket to wait for a connection
request.
2020-10-25 17:05:37 -04:00
Ken Brown
b3cef213d8 Cygwin: AF_UNIX: evaluate_cmsg_data: more FIXMEs 2020-10-24 10:48:55 -04:00
Ken Brown
408636b186 Cygwin: AF_UNIX: sendmsg: add FIXME comment 2020-10-24 10:05:17 -04:00
Ken Brown
f85a03882e Cygwin: AF_UNIX: implement evaluate_cmsg_data
And use it in recvmsg.

I'm not sure this implementation is what was intended when the
evaluate_cmsg_data method was added.

For now, just support an ancillary data block consisting of a single
cmsghdr, containing SCM_CREDENTIALS.

For convenience, add a 'mshdr *' argument and make the 'cloexec'
argument false by default.  The 'cloexec' argument is not currently
used, and I want to avoid having to artificially specify a value for
it when recvmsg calls evaluate_cmsg_data.
2020-10-24 10:00:40 -04:00
Ken Brown
9cfea13054 Cygwin: AF_UNIX: implement create_cmsg_data
For now, just support an ancillary data block consisting of a single
cmsghdr, containing SCM_CREDENTIALS.

FIXME: We're supposed to check the credentials.
2020-10-24 09:56:58 -04:00
Ken Brown via Cygwin-patches
6940081505 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:25:29 -04:00
Ken Brown
324faf1e07 Cygwin: AF_UNIX: socketpair: fix connect state
Both sockets should have connect state 'connected', not just the
second.
2020-10-22 15:12:29 -04:00
Ken Brown
6b08c5e15d Cygwin: AF_UNIX: reopen_shmem: fix view size
Use sizeof (af_unix_shmem_t) as the view size, as when the shared
memory was created.  Previously PAGESIZE was used, causing
NtMapViewOfSection to fail with STATUS_INVALID_VIEW_SIZE.
2020-10-22 14:55:52 -04:00
Ken Brown
7992fc068d Cygwin: AF_UNIX: fill in the default constructor
Previously the default constructor did nothing.  In particular,
fixup_after_fork never got called because need_fork_fixup wasn't set.
2020-10-22 14:45:34 -04:00
Ken Brown
8d99c2f9e2 Cygwin: AF_UNIX: socketpair: set O_RDWR 2020-10-22 12:41:59 -04:00
Jon Turney
ddbcf815c0 Cygwin: Drop do-nothing install_target target 2020-10-22 07:30:51 -04:00
Jon Turney
fea254f1e3 Cygwin: Drop do-nothing install_host target
Drop do-nothing install_host target, which is only used when not
cross-compiling.
2020-10-22 07:30:51 -04:00
Jon Turney
2f44dea077 Cygwin: Remove nostdlib Makefile variable
It's used in one place, and it's value is unconditional.
2020-10-22 07:30:51 -04:00
Jon Turney
005b0a1e3e 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-22 07:30:51 -04:00
Ken Brown
db3edfaee9 Cygwin: AF_UNIX: tweak peek_socket_unix
If the socket is listening, then report it as readable (i.e., accept
would not block) if NtQueryInformationFile reports its state as
anything but FILE_PIPE_LISTENING_STATE.  Also report it as readable if
NtQueryInformationFile fails.
2020-10-22 07:30:42 -04:00
Ken Brown
7c04247105 Cygwin: AF_UNIX: select: first cut
Untested.

There are many FIXMEs that need attention.

I haven't thought much about datagram sockets.  Some of the code might
only work for stream sockets.
2020-10-21 19:51:02 -04:00
Ken Brown
84f97738a7 Cygwin: set_bits: extend socket code to all sockets
select.cc:set_bits sets the readfds entry on wsock sockets that have a
failed connect.  Tweak the code so that it applies to all sockets.

To help with this, add virtual connect_state methods to the
fhandler_socket class.  Versions of these methods for
fhandler_socket_wsock and fhandler_socket_unix already exist.
2020-10-21 19:46:49 -04:00
Ken Brown
721814a4cd Cygwin: AF_UNIX: make some methods public
Some previously protected methods are now public so that they can be
used in select.cc.
2020-10-21 19:46:48 -04:00
Ken Brown
58205dc374 Cygwin: AF_UNIX: move the definition of class af_unix_pkt_hdr_t
It is needed in select.cc, so move the definition from
fhandler_socket_unix.cc to fhandler.h.
2020-10-21 19:46:48 -04:00
Ken Brown
533c9b05b8 Cygwin: AF_UNIX: sendmsg: call grab_admin_pkt
Check to see if the peer has sent a shutdown packet before calling
saw_shutdown.
2020-10-21 08:44:06 -04:00
Jon Turney
90e3a93741 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-19 17:54:56 -04:00
Jon Turney
0f6a76a835 Cygwin: Remove --with-windows-{libs,headers} 2020-10-19 17:54:56 -04:00
Jon Turney
d37c87d889 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-19 17:54:55 -04:00
Torbjörn SVENSSON via Newlib
73e7ca5c80 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-19 17:54:54 -04:00
Ken Brown
0ee48565f0 Cygwin: AF_UNIX: recvmsg: check for shutdown
Call grab_admin_pkt at appropriate times to check whether we've been
shut down for reading.  Also, update our shutdown state whenever we
read a packet.

Untested.

FIXME: I'm not sure whether I've treated datagram sockets properly.
2020-10-19 17:23:40 -04:00
Ken Brown
99490d2825 Cygwin: AF_UNIX: grab_admin_pkg: refactor
Extract from grab_admin_pkg two new methods, record_shut_info and
process_admin_pkg.  Also add a new 'peek' argument to grab_admin_pkg.
If this is true, peek to see if the next packet in the pipe is an
administrative packet.  Otherwise, assume we already know it is.
2020-10-19 17:22:34 -04:00