Script 'mail_helper' called by obssrc Hello community, here is the log from the commit of package libimobiledevice-glue for openSUSE:Factory checked in at 2025-03-07 16:38:53 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/libimobiledevice-glue (Old) and /work/SRC/openSUSE:Factory/.libimobiledevice-glue.new.19136 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "libimobiledevice-glue" Fri Mar 7 16:38:53 2025 rev:5 rq:1250583 version:1.3.1+git18.20250213 Changes: -------- --- /work/SRC/openSUSE:Factory/libimobiledevice-glue/libimobiledevice-glue.changes 2025-01-21 21:09:42.561081625 +0100 +++ /work/SRC/openSUSE:Factory/.libimobiledevice-glue.new.19136/libimobiledevice-glue.changes 2025-03-07 16:39:58.527850211 +0100 @@ -1,0 +2,17 @@ +Tue Feb 25 20:35:37 UTC 2025 - sbra...@suse.com + +- Update to version 1.3.1+git18.20250213: + * socket: Fix error output + * socket: Allow setting debug level via environment variable + * socket: Update inline attributes for gcc/clang + * Fix compiler warning + * socket: Improve error message output/verbose logging +- Add patch to fix build with gcc14 in Leap 15.x + (libimobiledevice-glue-gcc14.patch). + +------------------------------------------------------------------- +Sun Feb 23 23:36:16 UTC 2025 - Stanislav Brabec <sbra...@suse.com> + +- - Set URL to a working address. + +------------------------------------------------------------------- Old: ---- libimobiledevice-glue-1.3.1+git11.20241227.obscpio New: ---- libimobiledevice-glue-1.3.1+git18.20250213.obscpio libimobiledevice-glue-gcc14.patch BETA DEBUG BEGIN: New:- Add patch to fix build with gcc14 in Leap 15.x (libimobiledevice-glue-gcc14.patch). BETA DEBUG END: ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ libimobiledevice-glue.spec ++++++ --- /var/tmp/diff_new_pack.6ajtZz/_old 2025-03-07 16:39:59.075873143 +0100 +++ /var/tmp/diff_new_pack.6ajtZz/_new 2025-03-07 16:39:59.079873311 +0100 @@ -21,13 +21,15 @@ %define clamp_mtime_to_source_date_epoch 1 %define use_source_date_epoch_as_buildtime 1 Name: libimobiledevice-glue -Version: 1.3.1+git11.20241227 +Version: 1.3.1+git18.20250213 Release: 0 Summary: Native protocols library for iOS devices License: LGPL-2.1-or-later -URL: https://www.libimobiledevice.org +URL: https://github.com/libimobiledevice/libimobiledevice-glue Source: %{name}-%{version}.tar.gz Source1: baselibs.conf +# PATCH-FIX-BUILD libimobiledevice-glue-gcc14.patch sbra...@suse.com -- Fix build with gcc14 that does not understand __VA_OPT__(,). +Patch0: libimobiledevice-glue-gcc14.patch BuildRequires: fdupes BuildRequires: gcc-c++ BuildRequires: libtool @@ -56,8 +58,9 @@ %prep %setup -q -sed -i -e '/Requires:/d' src/%{name}-1.0.pc.in -sed -i -e 's/-L${libdir}//' src/%{name}-1.0.pc.in +%if 0%{?suse_version} < 1600 +%patch -P 0 -p1 +%endif %build autoreconf -fvi ++++++ _servicedata ++++++ --- /var/tmp/diff_new_pack.6ajtZz/_old 2025-03-07 16:39:59.123875152 +0100 +++ /var/tmp/diff_new_pack.6ajtZz/_new 2025-03-07 16:39:59.123875152 +0100 @@ -3,6 +3,6 @@ <param name="url">g...@github.com:libimobiledevice/libimobiledevice.git</param> <param name="changesrevision">b3d35fbcf7a1ac669c2e80fbd58920941a5d4c0c</param></service><service name="tar_scm"> <param name="url">g...@github.com:libimobiledevice/libimobiledevice-glue.git</param> - <param name="changesrevision">440dbbbf615de11acdd8216df0e3676e8efb9ba1</param></service></servicedata> + <param name="changesrevision">fe28a576b65f6fdcccb0f85721d79b9d3965faa9</param></service></servicedata> (No newline at EOF) ++++++ libimobiledevice-glue-1.3.1+git11.20241227.obscpio -> libimobiledevice-glue-1.3.1+git18.20250213.obscpio ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libimobiledevice-glue-1.3.1+git11.20241227/src/common.h new/libimobiledevice-glue-1.3.1+git18.20250213/src/common.h --- old/libimobiledevice-glue-1.3.1+git11.20241227/src/common.h 2024-12-27 01:55:34.000000000 +0100 +++ new/libimobiledevice-glue-1.3.1+git18.20250213/src/common.h 2025-02-13 03:50:17.000000000 +0100 @@ -39,4 +39,6 @@ #include "libimobiledevice-glue/glue.h" +void socket_init(); + #endif diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libimobiledevice-glue-1.3.1+git11.20241227/src/glue.c new/libimobiledevice-glue-1.3.1+git18.20250213/src/glue.c --- old/libimobiledevice-glue-1.3.1+git11.20241227/src/glue.c 2024-12-27 01:55:34.000000000 +0100 +++ new/libimobiledevice-glue-1.3.1+git18.20250213/src/glue.c 2025-02-13 03:50:17.000000000 +0100 @@ -60,6 +60,7 @@ INITIALIZER(internal_glue_init) { + socket_init(); term_colors_init(); } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libimobiledevice-glue-1.3.1+git11.20241227/src/socket.c new/libimobiledevice-glue-1.3.1+git18.20250213/src/socket.c --- old/libimobiledevice-glue-1.3.1+git11.20241227/src/socket.c 2024-12-27 01:55:34.000000000 +0100 +++ new/libimobiledevice-glue-1.3.1+git18.20250213/src/socket.c 2025-02-13 03:50:17.000000000 +0100 @@ -39,7 +39,6 @@ #ifndef HAVE_GETIFADDRS #include <iphlpapi.h> #endif -static int wsa_init = 0; #ifndef IFF_RUNNING #define IFF_RUNNING IFF_UP #endif @@ -91,6 +90,26 @@ static int verbose = 0; +#define SOCKET_ERR(level, msg, ...) \ + if (verbose >= level) { \ + fprintf(stderr, "[socket] " msg __VA_OPT__(,) __VA_ARGS__); \ + } + +void socket_init(void) +{ +#ifdef _WIN32 + WSADATA wsa_data; + if (WSAStartup(MAKEWORD(2,2), &wsa_data) != ERROR_SUCCESS) { + SOCKET_ERR(0, "WSAStartup failed!\n"); + ExitProcess(1); + } +#endif + char *env_debug = getenv("SOCKET_DEBUG"); + if (env_debug) { + verbose = (int)strtol(env_debug, NULL, 10); + } +} + void socket_set_verbose(int level) { verbose = level; @@ -99,14 +118,6 @@ const char *socket_addr_to_string(struct sockaddr *addr, char *addr_out, size_t addr_out_size) { #ifdef _WIN32 - WSADATA wsa_data; - if (!wsa_init) { - if (WSAStartup(MAKEWORD(2,2), &wsa_data) != ERROR_SUCCESS) { - fprintf(stderr, "WSAStartup failed!\n"); - ExitProcess(-1); - } - wsa_init = 1; - } DWORD addr_out_len = addr_out_size; DWORD addrlen = 0; @@ -159,7 +170,7 @@ #ifdef _MSC_VER #define ALWAYS_INLINE __forceinline #else -#define ALWAYS_INLINE __attribute__((always_inline)) +#define ALWAYS_INLINE __inline__ __attribute__((__always_inline__)) #endif #ifdef _WIN32 @@ -234,8 +245,7 @@ events = POLLPRI; break; default: - if (verbose >= 2) - fprintf(stderr, "%s: fd_mode %d unsupported\n", __func__, mode); + SOCKET_ERR(2, "%s: fd_mode %d unsupported\n", __func__, mode); return poll_status_error; } while (1) { @@ -247,8 +257,7 @@ case 1: if((pfd.revents & (POLLNVAL | POLLERR)) != 0) { - if (verbose >= 2) - fprintf(stderr, "%s: poll unexpected events: %d\n", __func__, (int)pfd.revents); + SOCKET_ERR(2, "%s: poll unexpected events: %d\n", __func__, (int)pfd.revents); return poll_status_error; } return poll_status_success; @@ -257,14 +266,12 @@ case -1: if(errno == EINTR) { - if (verbose >= 2) - fprintf(stderr, "%s: EINTR\n", __func__); + SOCKET_ERR(2, "%s: EINTR\n", __func__); continue; } // fallthrough default: - if (verbose >= 2) - fprintf(stderr, "%s: poll failed: %s\n", __func__, strerror(errno)); + SOCKET_ERR(2, "%s: poll failed: %s\n", __func__, strerror(errno)); return poll_status_error; } } @@ -300,8 +307,7 @@ sret = select(fd + 1, NULL, NULL, &fds, pto); break; default: - if (verbose >= 2) - fprintf(stderr, "%s: fd_mode %d unsupported\n", __func__, mode); + SOCKET_ERR(2, "%s: fd_mode %d unsupported\n", __func__, mode); return poll_status_error; } @@ -310,20 +316,20 @@ } else if (sret == 0) { return poll_status_timeout; } else { +#ifdef _WIN32 + errno = WSAError_to_errno(WSAGetLastError()); +#endif switch (errno) { case EINTR: // interrupt signal in select - if (verbose >= 2) - fprintf(stderr, "%s: EINTR\n", __func__); + SOCKET_ERR(2, "%s: EINTR\n", __func__); eagain = 1; break; case EAGAIN: - if (verbose >= 2) - fprintf(stderr, "%s: EAGAIN\n", __func__); + SOCKET_ERR(2, "%s: EAGAIN\n", __func__); break; default: - if (verbose >= 2) - fprintf(stderr, "%s: select failed: %s\n", __func__, strerror(errno)); + SOCKET_ERR(2, "%s: select failed: %s\n", __func__, strerror(errno)); return poll_status_error; } } @@ -348,14 +354,13 @@ /* Create the socket. */ sock = socket(PF_UNIX, SOCK_STREAM, 0); if (sock < 0) { - perror("socket"); + SOCKET_ERR(1, "socket(): %s\n", strerror(errno)); return -1; } #ifdef SO_NOSIGPIPE if (setsockopt(sock, SOL_SOCKET, SO_NOSIGPIPE, (void*)&yes, sizeof(int)) == -1) { - perror("setsockopt()"); - socket_close(sock); + SOCKET_ERR(1, "setsockopt(): %s\n", strerror(errno)); return -1; } #endif @@ -366,13 +371,13 @@ name.sun_path[sizeof(name.sun_path) - 1] = '\0'; if (bind(sock, (struct sockaddr*)&name, sizeof(name)) < 0) { - perror("bind"); + SOCKET_ERR(1, "bind(): %s\n", strerror(errno)); socket_close(sock); return -1; } if (listen(sock, 100) < 0) { - perror("listen"); + SOCKET_ERR(1, "listen(): %s\n", strerror(errno)); socket_close(sock); return -1; } @@ -392,36 +397,31 @@ // check if socket file exists... if (stat(filename, &fst) != 0) { - if (verbose >= 2) - fprintf(stderr, "%s: stat '%s': %s\n", __func__, filename, - strerror(errno)); + SOCKET_ERR(2, "%s: stat '%s': %s\n", __func__, filename, strerror(errno)); return -1; } // ... and if it is a unix domain socket if (!S_ISSOCK(fst.st_mode)) { - if (verbose >= 2) - fprintf(stderr, "%s: File '%s' is not a socket!\n", __func__, - filename); + SOCKET_ERR(2, "%s: File '%s' is not a socket!\n", __func__, filename); return -1; } // make a new socket if ((sfd = socket(PF_UNIX, SOCK_STREAM, 0)) < 0) { - if (verbose >= 2) - fprintf(stderr, "%s: socket: %s\n", __func__, strerror(errno)); + SOCKET_ERR(2, "%s: socket: %s\n", __func__, strerror(errno)); return -1; } if (setsockopt(sfd, SOL_SOCKET, SO_SNDBUF, (void*)&bufsize, sizeof(int)) == -1) { - perror("Could not set send buffer for socket"); + SOCKET_ERR(1, "Could not set send buffer for socket: %s\n", strerror(errno)); } if (setsockopt(sfd, SOL_SOCKET, SO_RCVBUF, (void*)&bufsize, sizeof(int)) == -1) { - perror("Could not set receive buffer for socket"); + SOCKET_ERR(1, "Could not set receive buffer for socket: %s\n", strerror(errno)); } #ifdef SO_NOSIGPIPE if (setsockopt(sfd, SOL_SOCKET, SO_NOSIGPIPE, (void*)&yes, sizeof(int)) == -1) { - perror("setsockopt()"); + SOCKET_ERR(1, "setsockopt(): %s\n", strerror(errno)); socket_close(sfd); return -1; } @@ -462,8 +462,7 @@ } while (0); if (sfd < 0) { - if (verbose >= 2) - fprintf(stderr, "%s: connect: %s\n", __func__, strerror(errno)); + SOCKET_ERR(2, "%s: connect: %s\n", __func__, strerror(errno)); return -1; } @@ -480,16 +479,6 @@ struct addrinfo *result, *rp; char portstr[8]; int res; -#ifdef _WIN32 - WSADATA wsa_data; - if (!wsa_init) { - if (WSAStartup(MAKEWORD(2,2), &wsa_data) != ERROR_SUCCESS) { - fprintf(stderr, "WSAStartup failed!\n"); - ExitProcess(-1); - } - wsa_init = 1; - } -#endif memset(&hints, '\0', sizeof(struct addrinfo)); hints.ai_family = AF_UNSPEC; @@ -497,11 +486,11 @@ hints.ai_flags = AI_PASSIVE | AI_NUMERICSERV; hints.ai_protocol = IPPROTO_TCP; - sprintf(portstr, "%d", port); + snprintf(portstr, 8, "%d", port); res = getaddrinfo(addr, portstr, &hints, &result); if (res != 0) { - fprintf(stderr, "%s: getaddrinfo: %s\n", __func__, gai_strerror(res)); + SOCKET_ERR(1, "%s: getaddrinfo: %s\n", __func__, gai_strerror(res)); return -1; } @@ -512,14 +501,17 @@ } if (setsockopt(sfd, SOL_SOCKET, SO_REUSEADDR, (void*)&yes, sizeof(int)) == -1) { - perror("setsockopt()"); +#ifdef _WIN32 + errno = WSAError_to_errno(WSAGetLastError()); +#endif + SOCKET_ERR(1, "setsockopt() SO_REUSEADDR: %s\n", strerror(errno)); socket_close(sfd); continue; } #ifdef SO_NOSIGPIPE if (setsockopt(sfd, SOL_SOCKET, SO_NOSIGPIPE, (void*)&yes, sizeof(int)) == -1) { - perror("setsockopt()"); + SOCKET_ERR(1, "setsockopt() SO_NOSIGPIPE: %s\n", strerror(errno)); socket_close(sfd); continue; } @@ -528,19 +520,28 @@ #if defined(AF_INET6) && defined(IPV6_V6ONLY) if (rp->ai_family == AF_INET6) { if (setsockopt(sfd, IPPROTO_IPV6, IPV6_V6ONLY, (addr) ? (void*)&yes : (void*)&no, sizeof(int)) == -1) { - perror("setsockopt() IPV6_V6ONLY"); +#ifdef _WIN32 + errno = WSAError_to_errno(WSAGetLastError()); +#endif + SOCKET_ERR(1, "setsockopt() IPV6_V6ONLY: %s\n", strerror(errno)); } } #endif if (bind(sfd, rp->ai_addr, rp->ai_addrlen) < 0) { - perror("bind()"); +#ifdef _WIN32 + errno = WSAError_to_errno(WSAGetLastError()); +#endif + SOCKET_ERR(1, "bind(): %s\n", strerror(errno)); socket_close(sfd); continue; } if (listen(sfd, 100) < 0) { - perror("listen()"); +#ifdef _WIN32 + errno = WSAError_to_errno(WSAGetLastError()); +#endif + SOCKET_ERR(1, "listen(): %s\n", strerror(errno)); socket_close(sfd); continue; } @@ -654,7 +655,7 @@ do { pAddresses = (IP_ADAPTER_ADDRESSES*)malloc(outBufLen); if (pAddresses == NULL) { - printf("Memory allocation failed for IP_ADAPTER_ADDRESSES struct\n"); + SOCKET_ERR(1, "Memory allocation failed for IP_ADAPTER_ADDRESSES struct\n"); return -1; } dwRetVal = GetAdaptersAddresses(AF_UNSPEC, flags, NULL, pAddresses, &outBufLen); @@ -834,12 +835,12 @@ /* Assume unicast address for first prefix of operational adapter */ if (AF_INET == lpSockaddr->sa_family) if (IN_MULTICAST( ntohl (((struct sockaddr_in*)(lpSockaddr))->sin_addr.s_addr))) { - fprintf(stderr, "FATAL: first prefix is non a unicast address\n"); + SOCKET_ERR(1, "FATAL: first prefix is non a unicast address\n"); break; } if (AF_INET6 == lpSockaddr->sa_family) if (IN6_IS_ADDR_MULTICAST( &((struct sockaddr_in6*)(lpSockaddr))->sin6_addr)) { - fprintf(stderr, "FATAL: first prefix is not a unicast address\n"); + SOCKET_ERR(1, "FATAL: first prefix is not a unicast address\n"); break; } /* Assume subnet or host IP address for XP backward compatibility */ @@ -964,7 +965,10 @@ /* get interfaces */ if (getifaddrs(&ifaddr) == -1) { - perror("getifaddrs"); +#ifdef _WIN32 + errno = WSAError_to_errno(WSAGetLastError()); +#endif + SOCKET_ERR(1, "getifaddrs(): %s\n", strerror(errno)); return res; } @@ -1038,14 +1042,6 @@ int addrlen = 0; #ifdef _WIN32 u_long l_yes = 1; - WSADATA wsa_data; - if (!wsa_init) { - if (WSAStartup(MAKEWORD(2,2), &wsa_data) != ERROR_SUCCESS) { - fprintf(stderr, "WSAStartup failed!\n"); - ExitProcess(-1); - } - wsa_init = 1; - } #endif if (addr->sa_family == AF_INET) { @@ -1073,26 +1069,32 @@ } #endif else { - fprintf(stderr, "ERROR: Unsupported address family"); + SOCKET_ERR(1, "ERROR: Unsupported address family\n"); return -1; } sfd = socket(addr->sa_family, SOCK_STREAM, IPPROTO_TCP); if (sfd == -1) { - perror("socket()"); +#ifdef _WIN32 + errno = WSAError_to_errno(WSAGetLastError()); +#endif + SOCKET_ERR(1, "socket(): %s\n", strerror(errno)); return -1; } #ifdef SO_NOSIGPIPE if (setsockopt(sfd, SOL_SOCKET, SO_NOSIGPIPE, (void*)&yes, sizeof(int)) == -1) { - perror("setsockopt()"); + SOCKET_ERR(1, "setsockopt() SO_NOSIGPIPE: %s\n", strerror(errno)); socket_close(sfd); return -1; } #endif if (setsockopt(sfd, SOL_SOCKET, SO_REUSEADDR, (void*)&yes, sizeof(int)) == -1) { - perror("setsockopt()"); +#ifdef _WIN32 + errno = WSAError_to_errno(WSAGetLastError()); +#endif + SOCKET_ERR(1, "setsockopt() SO_REUSEADDR: %s\n", strerror(errno)); socket_close(sfd); return -1; } @@ -1146,21 +1148,30 @@ if (verbose >= 2) { char addrtxt[48]; socket_addr_to_string(addr, addrtxt, sizeof(addrtxt)); - fprintf(stderr, "%s: Could not connect to %s port %d\n", __func__, addrtxt, port); + SOCKET_ERR(2, "%s: Could not connect to %s port %d\n", __func__, addrtxt, port); } return -1; } if (setsockopt(sfd, IPPROTO_TCP, TCP_NODELAY, (void*)&yes, sizeof(int)) == -1) { - perror("Could not set TCP_NODELAY on socket"); +#ifdef _WIN32 + errno = WSAError_to_errno(WSAGetLastError()); +#endif + SOCKET_ERR(1, "Could not set TCP_NODELAY on socket: %s\n", strerror(errno)); } if (setsockopt(sfd, SOL_SOCKET, SO_SNDBUF, (void*)&bufsize, sizeof(int)) == -1) { - perror("Could not set send buffer for socket"); +#ifdef _WIN32 + errno = WSAError_to_errno(WSAGetLastError()); +#endif + SOCKET_ERR(1, "Could not set send buffer for socket: %s\n", strerror(errno)); } if (setsockopt(sfd, SOL_SOCKET, SO_RCVBUF, (void*)&bufsize, sizeof(int)) == -1) { - perror("Could not set receive buffer for socket"); +#ifdef _WIN32 + errno = WSAError_to_errno(WSAGetLastError()); +#endif + SOCKET_ERR(1, "Could not set receive buffer for socket: %s\n", strerror(errno)); } return sfd; @@ -1177,14 +1188,6 @@ int res; #ifdef _WIN32 u_long l_yes = 1; - WSADATA wsa_data; - if (!wsa_init) { - if (WSAStartup(MAKEWORD(2,2), &wsa_data) != ERROR_SUCCESS) { - fprintf(stderr, "WSAStartup failed!\n"); - ExitProcess(-1); - } - wsa_init = 1; - } #else int flags = 0; #endif @@ -1195,11 +1198,11 @@ hints.ai_flags = AI_NUMERICSERV; hints.ai_protocol = IPPROTO_TCP; - sprintf(portstr, "%d", port); + snprintf(portstr, 8, "%d", port); res = getaddrinfo(addr, portstr, &hints, &result); if (res != 0) { - fprintf(stderr, "%s: getaddrinfo: %s\n", __func__, gai_strerror(res)); + SOCKET_ERR(1, "%s: getaddrinfo: %s\n", __func__, gai_strerror(res)); return -1; } @@ -1211,14 +1214,17 @@ #ifdef SO_NOSIGPIPE if (setsockopt(sfd, SOL_SOCKET, SO_NOSIGPIPE, (void*)&yes, sizeof(int)) == -1) { - perror("setsockopt()"); + SOCKET_ERR(1, "setsockopt() SO_NOSIGPIPE: %s\n", strerror(errno)); socket_close(sfd); return -1; } #endif if (setsockopt(sfd, SOL_SOCKET, SO_REUSEADDR, (void*)&yes, sizeof(int)) == -1) { - perror("setsockopt()"); +#ifdef _WIN32 + errno = WSAError_to_errno(WSAGetLastError()); +#endif + SOCKET_ERR(1, "setsockopt() SO_REUSEADDR: %s\n", strerror(errno)); socket_close(sfd); continue; } @@ -1269,21 +1275,29 @@ freeaddrinfo(result); if (rp == NULL) { - if (verbose >= 2) - fprintf(stderr, "%s: Could not connect to %s:%d\n", __func__, addr, port); + SOCKET_ERR(2, "%s: Could not connect to %s:%d\n", __func__, addr, port); return -1; } if (setsockopt(sfd, IPPROTO_TCP, TCP_NODELAY, (void*)&yes, sizeof(int)) == -1) { - perror("Could not set TCP_NODELAY on socket"); +#ifdef _WIN32 + errno = WSAError_to_errno(WSAGetLastError()); +#endif + SOCKET_ERR(1, "Could not set TCP_NODELAY on socket: %s\n", strerror(errno)); } if (setsockopt(sfd, SOL_SOCKET, SO_SNDBUF, (void*)&bufsize, sizeof(int)) == -1) { - perror("Could not set send buffer for socket"); +#ifdef _WIN32 + errno = WSAError_to_errno(WSAGetLastError()); +#endif + SOCKET_ERR(1, "Could not set send buffer for socket: %s\n", strerror(errno)); } if (setsockopt(sfd, SOL_SOCKET, SO_RCVBUF, (void*)&bufsize, sizeof(int)) == -1) { - perror("Could not set receive buffer for socket"); +#ifdef _WIN32 + errno = WSAError_to_errno(WSAGetLastError()); +#endif + SOCKET_ERR(1, "Could not set receive buffer for socket: %s\n", strerror(errno)); } return sfd; @@ -1292,8 +1306,7 @@ int socket_check_fd(int fd, fd_mode fdm, unsigned int timeout) { if (fd < 0) { - if (verbose >= 2) - fprintf(stderr, "ERROR: invalid fd in check_fd %d\n", fd); + SOCKET_ERR(2, "ERROR: invalid fd in check_fd %d\n", fd); return -EINVAL; } @@ -1313,8 +1326,7 @@ return -ETIMEDOUT; case poll_status_error: default: - if (verbose >= 2) - fprintf(stderr, "%s: poll_wrapper failed\n", __func__); + SOCKET_ERR(2, "%s: poll_wrapper failed\n", __func__); return -ECONNRESET; } @@ -1333,18 +1345,33 @@ addr_len = sizeof(addr); result = accept(fd, (struct sockaddr*)&addr, &addr_len); - +#ifdef _WIN32 + if (result < 0) { + errno = WSAError_to_errno(WSAGetLastError()); + } +#endif return result; } int socket_shutdown(int fd, int how) { - return shutdown(fd, how); + int result = shutdown(fd, how); +#ifdef _WIN32 + if (result < 0) { + errno = WSAError_to_errno(WSAGetLastError()); + } +#endif + return result; } -int socket_close(int fd) { +int socket_close(int fd) +{ #ifdef _WIN32 - return closesocket(fd); + int result = closesocket(fd); + if (result < 0) { + errno = WSAError_to_errno(WSAGetLastError()); + } + return result; #else return close(fd); #endif @@ -1374,8 +1401,7 @@ result = recv(fd, data, length, flags); if (result == 0) { // but this is an error condition - if (verbose >= 3) - fprintf(stderr, "%s: fd=%d recv returned 0\n", __func__, fd); + SOCKET_ERR(3, "%s: fd=%d recv returned 0\n", __func__, fd); return -ECONNRESET; } if (result < 0) { @@ -1420,7 +1446,9 @@ addr_len = sizeof(addr); if (0 > getsockname(fd, (struct sockaddr*)&addr, &addr_len)) { - perror("getsockname()"); +#ifdef _WIN32 + errno = WSAError_to_errno(WSAGetLastError()); +#endif return -1; } ++++++ libimobiledevice-glue-gcc14.patch ++++++ diff -ur libimobiledevice-glue.orig/src/socket.c libimobiledevice-glue/src/socket.c --- libimobiledevice-glue.orig/src/socket.c 2025-02-25 21:35:37.200042020 +0100 +++ libimobiledevice-glue/src/socket.c 2025-02-25 22:07:25.649820135 +0100 @@ -90,9 +90,9 @@ static int verbose = 0; -#define SOCKET_ERR(level, msg, ...) \ +#define SOCKET_ERR(level, ...) \ if (verbose >= level) { \ - fprintf(stderr, "[socket] " msg __VA_OPT__(,) __VA_ARGS__); \ + fprintf(stderr, "[socket] " __VA_ARGS__); \ } void socket_init(void) ++++++ libimobiledevice-glue.obsinfo ++++++ --- /var/tmp/diff_new_pack.6ajtZz/_old 2025-03-07 16:39:59.251880508 +0100 +++ /var/tmp/diff_new_pack.6ajtZz/_new 2025-03-07 16:39:59.255880675 +0100 @@ -1,5 +1,5 @@ name: libimobiledevice-glue -version: 1.3.1+git11.20241227 -mtime: 1735260934 -commit: 440dbbbf615de11acdd8216df0e3676e8efb9ba1 +version: 1.3.1+git18.20250213 +mtime: 1739415017 +commit: fe28a576b65f6fdcccb0f85721d79b9d3965faa9