summaryrefslogtreecommitdiff
path: root/user/libcddb/connect-ppc64.patch
diff options
context:
space:
mode:
Diffstat (limited to 'user/libcddb/connect-ppc64.patch')
-rw-r--r--user/libcddb/connect-ppc64.patch41
1 files changed, 41 insertions, 0 deletions
diff --git a/user/libcddb/connect-ppc64.patch b/user/libcddb/connect-ppc64.patch
new file mode 100644
index 000000000..0c79fdc4d
--- /dev/null
+++ b/user/libcddb/connect-ppc64.patch
@@ -0,0 +1,41 @@
+--- libcddb-1.3.2/lib/cddb_net.c.old 2009-03-01 03:28:07.000000000 +0000
++++ libcddb-1.3.2/lib/cddb_net.c 2019-01-03 06:43:42.480000000 +0000
+@@ -273,7 +273,7 @@
+ int timeout_connect(int sockfd, const struct sockaddr *addr,
+ size_t len, int timeout)
+ {
+- int got_error = 0;
++ int got_error = 0, conn_result;
+
+ /* set socket to non-blocking */
+ #ifdef BEOS
+@@ -299,7 +299,7 @@
+ #endif /* BEOS */
+
+ /* try connecting */
+- if (connect(sockfd, addr, len) == -1) {
++ if ((conn_result = connect(sockfd, addr, len)) == -1) {
+ /* check whether we can continue */
+ if (errno == EINPROGRESS) {
+ int rv;
+@@ -333,6 +333,9 @@
+ }
+ }
+ }
++ } else if (conn_result == 0) {
++ /* it worked without needing timeout */
++ got_error = 0;
+ } else {
+ /* connect failed */
+ got_error = -1;
+--- libcddb-1.3.2/lib/cddb_net.c.old 2009-03-01 03:28:07.000000000 +0000
++++ libcddb-1.3.2/lib/cddb_net.c 2019-01-03 07:30:27.050000000 +0000
+@@ -325,6 +325,8 @@
+ default:
+ /* we got connected, check error condition */
+ l = sizeof(rv);
++ /* Work around Linux/ppc64 bug */
++ rv = 0;
+ getsockopt(sockfd, SOL_SOCKET, SO_ERROR, &rv, &l);
+ if (rv) {
+ /* something went wrong, simulate normal connect behaviour */