Fix compilation on OpenBSD - quark - quark web server | |
git clone git://git.suckless.org/quark | |
Log | |
Files | |
Refs | |
LICENSE | |
--- | |
commit 959c855734e3af12f35532d76deb1ab85474f8f4 | |
parent a9164839e6f091ff66b6684c65d55ed7f5a09ebb | |
Author: Laslo Hunhold <[email protected]> | |
Date: Sun, 17 Jan 2021 13:22:53 +0100 | |
Fix compilation on OpenBSD | |
The OpenBSD-code was written "blindly" only with the manuals. The | |
errors that occured are now fixed. It shows how well-written the | |
OpenBSD manuals are that you can write such a nontrivial state-machine | |
and it just works (once the syntax-errors are fixed). | |
Signed-off-by: Laslo Hunhold <[email protected]> | |
Diffstat: | |
M main.c | 2 +- | |
M queue.c | 24 +++++++++++++++++------- | |
M queue.h | 2 ++ | |
3 files changed, 20 insertions(+), 8 deletions(-) | |
--- | |
diff --git a/main.c b/main.c | |
@@ -243,7 +243,7 @@ thread_method(void *data) | |
/* handle events */ | |
for (i = 0; i < (size_t)nready; i++) { | |
- if (event[i].events & (EPOLLERR | EPOLLHUP)) { | |
+ if (queue_event_is_dropped(&event[i])) { | |
fd = queue_event_get_fd(&event[i]); | |
if (fd != d->insock) { | |
diff --git a/queue.c b/queue.c | |
@@ -80,11 +80,11 @@ queue_add_fd(int qfd, int fd, enum queue_event_type t, int … | |
return 1; | |
} | |
#else | |
- kevent e; | |
+ struct kevent e; | |
int events; | |
/* prepare event flag */ | |
- event = (shared) ? 0 : EV_CLEAR; | |
+ events = (shared) ? 0 : EV_CLEAR; | |
switch (t) { | |
case QUEUE_EVENT_IN: | |
@@ -95,7 +95,7 @@ queue_add_fd(int qfd, int fd, enum queue_event_type t, int sh… | |
break; | |
} | |
- EV_SET(&e, fd, events, EV_ADD, 0, 0, 0); | |
+ EV_SET(&e, fd, events, EV_ADD, 0, 0, (void *)data); | |
if (kevent(qfd, &e, 1, NULL, 0, NULL) < 0) { | |
warn("kevent:"); | |
@@ -139,7 +139,7 @@ queue_mod_fd(int qfd, int fd, enum queue_event_type t, cons… | |
return 1; | |
} | |
#else | |
- kevent e; | |
+ struct kevent e; | |
int events; | |
events = EV_CLEAR; | |
@@ -153,7 +153,7 @@ queue_mod_fd(int qfd, int fd, enum queue_event_type t, cons… | |
break; | |
} | |
- EV_SET(&e, fd, events, EV_ADD, 0, 0, 0); | |
+ EV_SET(&e, fd, events, EV_ADD, 0, 0, (void *)data); | |
if (kevent(qfd, &e, 1, NULL, 0, NULL) < 0) { | |
warn("kevent:"); | |
@@ -175,7 +175,7 @@ queue_rem_fd(int qfd, int fd) | |
return 1; | |
} | |
#else | |
- kevent e; | |
+ struct kevent e; | |
EV_SET(&e, fd, 0, EV_DELETE, 0, 0, 0); | |
@@ -199,7 +199,7 @@ queue_wait(int qfd, queue_event *e, size_t elen) | |
return -1; | |
} | |
#else | |
- if ((nready = kevent(qfd, NULL, 0, e, elen, NULL) < 0) { | |
+ if ((nready = kevent(qfd, NULL, 0, e, elen, NULL)) < 0) { | |
warn("kevent:"); | |
return 1; | |
} | |
@@ -227,3 +227,13 @@ queue_event_get_ptr(const queue_event *e) | |
return e->udata; | |
#endif | |
} | |
+ | |
+int | |
+queue_event_is_dropped(const queue_event *e) | |
+{ | |
+ #ifdef __linux__ | |
+ return (e->events & (EPOLLERR | EPOLLHUP)) ? 1 : 0; | |
+ #else | |
+ return (e->flags & EV_EOF) ? 1 : 0; | |
+ #endif | |
+} | |
diff --git a/queue.h b/queue.h | |
@@ -29,4 +29,6 @@ ssize_t queue_wait(int, queue_event *, size_t); | |
int queue_event_get_fd(const queue_event *); | |
void *queue_event_get_ptr(const queue_event *); | |
+int queue_event_is_dropped(const queue_event *e); | |
+ | |
#endif /* QUEUE_H */ |