aboutsummaryrefslogtreecommitdiff
path: root/gcc/ada/socket.c
diff options
context:
space:
mode:
authorGiuliano Belinassi <giuliano.belinassi@usp.br>2020-08-22 17:43:43 -0300
committerGiuliano Belinassi <giuliano.belinassi@usp.br>2020-08-22 17:43:43 -0300
commita926878ddbd5a98b272c22171ce58663fc04c3e0 (patch)
tree86af256e5d9a9c06263c00adc90e5fe348008c43 /gcc/ada/socket.c
parent542730f087133690b47e036dfd43eb0db8a650ce (diff)
parent07cbaed8ba7d1b6e4ab3a9f44175502a4e1ecdb1 (diff)
downloadgcc-devel/autopar_devel.zip
gcc-devel/autopar_devel.tar.gz
gcc-devel/autopar_devel.tar.bz2
Merge branch 'autopar_rebase2' into autopar_develdevel/autopar_devel
Quickly commit changes in the rebase branch.
Diffstat (limited to 'gcc/ada/socket.c')
-rw-r--r--gcc/ada/socket.c46
1 files changed, 29 insertions, 17 deletions
diff --git a/gcc/ada/socket.c b/gcc/ada/socket.c
index 6ca9d50..8333b6b 100644
--- a/gcc/ada/socket.c
+++ b/gcc/ada/socket.c
@@ -6,7 +6,7 @@
* *
* C Implementation File *
* *
- * Copyright (C) 2003-2019, Free Software Foundation, Inc. *
+ * Copyright (C) 2003-2020, Free Software Foundation, Inc. *
* *
* GNAT is free software; you can redistribute it and/or modify it under *
* terms of the GNU General Public License as published by the Free Soft- *
@@ -333,8 +333,8 @@ __gnat_getservbyport (int port, const char *proto,
}
#else
int
-__gnat_gethostbyname (const char *name,
- struct hostent *ret, char *buf, size_t buflen,
+__gnat_gethostbyname (const char *name, struct hostent *ret,
+ char *buf ATTRIBUTE_UNUSED, size_t buflen ATTRIBUTE_UNUSED,
int *h_errnop)
{
struct hostent *rh;
@@ -349,8 +349,8 @@ __gnat_gethostbyname (const char *name,
}
int
-__gnat_gethostbyaddr (const char *addr, int len, int type,
- struct hostent *ret, char *buf, size_t buflen,
+__gnat_gethostbyaddr (const char *addr, int len, int type, struct hostent *ret,
+ char *buf ATTRIBUTE_UNUSED, size_t buflen ATTRIBUTE_UNUSED,
int *h_errnop)
{
struct hostent *rh;
@@ -365,8 +365,8 @@ __gnat_gethostbyaddr (const char *addr, int len, int type,
}
int
-__gnat_getservbyname (const char *name, const char *proto,
- struct servent *ret, char *buf, size_t buflen)
+__gnat_getservbyname (const char *name, const char *proto, struct servent *ret,
+ char *buf ATTRIBUTE_UNUSED, size_t buflen ATTRIBUTE_UNUSED)
{
struct servent *rh;
rh = getservbyname (name, proto);
@@ -377,8 +377,8 @@ __gnat_getservbyname (const char *name, const char *proto,
}
int
-__gnat_getservbyport (int port, const char *proto,
- struct servent *ret, char *buf, size_t buflen)
+__gnat_getservbyport (int port, const char *proto, struct servent *ret,
+ char *buf ATTRIBUTE_UNUSED, size_t buflen ATTRIBUTE_UNUSED)
{
struct servent *rh;
rh = getservbyport (port, proto);
@@ -397,19 +397,18 @@ __gnat_getservbyport (int port, const char *proto,
void
__gnat_last_socket_in_set (fd_set *set, int *last)
{
- int s;
int l;
l = -1;
#ifdef _WIN32
/* More efficient method for NT. */
- for (s = 0; s < set->fd_count; s++)
+ for (unsigned int s = 0; s < set->fd_count; s++)
if ((int) set->fd_array[s] > l)
l = set->fd_array[s];
#else
- for (s = *last; s != -1; s--)
+ for (int s = *last; s != -1; s--)
if (FD_ISSET (s, set))
{
l = s;
@@ -517,7 +516,7 @@ __gnat_get_h_errno (void) {
int
__gnat_socket_ioctl (int fd, IOCTL_Req_T req, int *arg) {
#if defined (_WIN32)
- return ioctlsocket (fd, req, arg);
+ return ioctlsocket (fd, req, (unsigned long *)arg);
#elif defined (__APPLE__)
/*
* On Darwin, req is an unsigned long, and we want to convert without sign
@@ -553,7 +552,8 @@ __gnat_inet_pton (int af, const char *src, void *dst) {
int rc;
ss.ss_family = af;
- rc = WSAStringToAddressA (src, af, NULL, (struct sockaddr *)&ss, &sslen);
+ rc = WSAStringToAddressA ((char *)src, af, NULL, (struct sockaddr *)&ss,
+ &sslen);
if (rc == 0) {
switch (af) {
case AF_INET:
@@ -803,10 +803,22 @@ int __gnat_minus_500ms() {
#if defined (_WIN32)
// Windows Server 2019 and Windows 8.0 do not need 500 millisecond socket
// timeout correction.
- return !(IsWindows8OrGreater() && !IsWindowsServer()
- || IsWindowsVersionOrGreater(10, 0, 17763));
+ if (IsWindowsServer()) {
+ OSVERSIONINFO osvi;
+ ZeroMemory(&osvi, sizeof(OSVERSIONINFO));
+ osvi.dwOSVersionInfoSize = sizeof(OSVERSIONINFO);
+ // Documentation proposes to use IsWindowsVersionOrGreater(10, 0, 17763)
+ // but it does not compare by the build number (last parameter).
+ GetVersionEx(&osvi);
+ return osvi.dwMajorVersion < 10
+ || (osvi.dwMajorVersion == 10
+ && osvi.dwMinorVersion == 0
+ && osvi.dwBuildNumber < 17763);
+ } else {
+ return !IsWindows8OrGreater();
+ }
#else
- return 0;
+ return 0;
#endif
}