You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
gentoo-overlay/www-servers/lighttpd/files/lighttpd-1.4.75-sparc.patch

75 lines
2.5 KiB

https://bugs.gentoo.org/931305
https://github.com/lighttpd/lighttpd1.4/commit/524614455554163ec78b27b89ff52bbf7fe96958
From 524614455554163ec78b27b89ff52bbf7fe96958 Mon Sep 17 00:00:00 2001
From: Glenn Strauss <gstrauss@gluelogic.com>
Date: Wed, 24 Apr 2024 03:07:37 -0400
Subject: [PATCH] [core] special value for Linux POLLRDHUP on SPARC (fixes
#3251)
x-ref:
"[1.4.76] buildroot compile error with bootlin-sparc{64-g,-uc}libc"
https://redmine.lighttpd.net/issues/3251
--- a/src/fdevent.h
+++ b/src/fdevent.h
@@ -40,6 +40,8 @@ struct fdnode_st {
#if (defined(__sun) && defined(__SVR4)) /* Solaris */ \
|| defined(__FreeBSD__)
#define FDEVENT_RDHUP 0x4000
+#elif (defined(__linux__) && (defined(__sparc__) || defined(__sparc)))
+#define FDEVENT_RDHUP 0x2800 /*(0x2000 EPOLLRDHUP | 0x0800 POLLRDHUP)*/
#else
#define FDEVENT_RDHUP 0x2000
#endif
--- a/src/fdevent_impl.c
+++ b/src/fdevent_impl.c
@@ -338,6 +338,11 @@ fdevent_linux_sysepoll_event_set (fdevents *ev, fdnode *fdn, int events)
struct epoll_event ep;
#ifndef EPOLLRDHUP
events &= ~FDEVENT_RDHUP;
+ #elif (defined(__linux__) && (defined(__sparc__) || defined(__sparc)))
+ if (events & FDEVENT_RDHUP) {
+ events &= ~FDEVENT_RDHUP;
+ events |= EPOLLRDHUP;
+ }
#endif
ep.events = events | EPOLLERR | EPOLLHUP;
ep.data.ptr = fdn;
@@ -376,7 +381,11 @@ fdevent_linux_sysepoll_init (fdevents *ev)
ck_static_assert(EPOLLERR == FDEVENT_ERR);
ck_static_assert(EPOLLHUP == FDEVENT_HUP);
#ifdef EPOLLRDHUP
+ #if (defined(__linux__) && (defined(__sparc__) || defined(__sparc)))
+ ck_static_assert(EPOLLRDHUP & FDEVENT_RDHUP);
+ #else
ck_static_assert(EPOLLRDHUP == FDEVENT_RDHUP);
+ #endif
#endif
ev->type = FDEVENT_HANDLER_LINUX_SYSEPOLL;
@@ -770,6 +779,11 @@ fdevent_poll_event_set (fdevents *ev, fdnode *fdn, int events)
#ifndef POLLRDHUP
events &= ~FDEVENT_RDHUP;
+ #elif (defined(__linux__) && (defined(__sparc__) || defined(__sparc)))
+ if (events & FDEVENT_RDHUP) {
+ events &= ~FDEVENT_RDHUP;
+ events |= POLLRDHUP;
+ }
#endif
if (k >= 0) {
@@ -854,7 +868,11 @@ fdevent_poll_init (fdevents *ev)
ck_static_assert(POLLHUP == FDEVENT_HUP);
ck_static_assert(POLLNVAL == FDEVENT_NVAL);
#ifdef POLLRDHUP
+ #if (defined(__linux__) && (defined(__sparc__) || defined(__sparc)))
+ ck_static_assert(POLLRDHUP & FDEVENT_RDHUP);
+ #else
ck_static_assert(POLLRDHUP == FDEVENT_RDHUP);
+ #endif
#endif
ev->type = FDEVENT_HANDLER_POLL;