Finish library, switch to GPLv3.
This commit is contained in:
parent
60b9d9cc48
commit
de6e661982
25 changed files with 771 additions and 290 deletions
|
|
@ -1,7 +1,7 @@
|
|||
# liblwevent/src/docs/Doxyfile.in
|
||||
#
|
||||
# (c)2007, Laurence Withers, <l@lwithers.me.uk>.
|
||||
# Released under the GNU GPLv2. See file COPYING or
|
||||
# Released under the GNU GPLv3. See file COPYING or
|
||||
# http://www.gnu.org/copyleft/gpl.html for details.
|
||||
#
|
||||
|
||||
|
|
|
|||
|
|
@ -1,7 +1,7 @@
|
|||
/* liblwevent/src/docs/MainPage.dox
|
||||
*
|
||||
* (c)2007, Laurence Withers, <l@lwithers.me.uk>.
|
||||
* Released under the GNU GPLv2. See file COPYING or
|
||||
* Released under the GNU GPLv3. See file COPYING or
|
||||
* http://www.gnu.org/copyleft/gpl.html for details.
|
||||
*/
|
||||
|
||||
|
|
@ -15,7 +15,7 @@ machine (or other object-based) paradigm.
|
|||
Its features are as follows:
|
||||
\li simple event loop interface (see section \ref eventloop)
|
||||
\li wrapper functions for adding and removing file descriptors (see section \ref fdevent)
|
||||
\li signal functions (TODO)
|
||||
\li signal delivery through file descriptor (see section \ref signalfd)
|
||||
\li timer functions (TODO)
|
||||
\li safe inter-object actions (one object may free another at any time)
|
||||
\li O(1) design to match that of \c epoll(7)
|
||||
|
|
|
|||
|
|
@ -1,7 +1,7 @@
|
|||
/* liblwevent/src/docs/libdesign.dox
|
||||
*
|
||||
* (c)2007, Laurence Withers, <l@lwithers.me.uk>.
|
||||
* Released under the GNU GPLv2. See file COPYING or
|
||||
* Released under the GNU GPLv3. See file COPYING or
|
||||
* http://www.gnu.org/copyleft/gpl.html for details.
|
||||
*/
|
||||
|
||||
|
|
|
|||
|
|
@ -1,7 +1,7 @@
|
|||
/* liblwevent/src/liblwevent/000_TopHeader.h
|
||||
*
|
||||
* (c)2007, Laurence Withers, <l@lwithers.me.uk>.
|
||||
* Released under the GNU GPLv2. See file COPYING or
|
||||
* Released under the GNU GPLv3. See file COPYING or
|
||||
* http://www.gnu.org/copyleft/gpl.html for details.
|
||||
*/
|
||||
|
||||
|
|
|
|||
|
|
@ -1,7 +1,7 @@
|
|||
/* liblwevent/src/liblwevent/000_TopSource.c
|
||||
*
|
||||
* (c)2007, Laurence Withers, <l@lwithers.me.uk>.
|
||||
* Released under the GNU GPLv2. See file COPYING or
|
||||
* Released under the GNU GPLv3. See file COPYING or
|
||||
* http://www.gnu.org/copyleft/gpl.html for details.
|
||||
*/
|
||||
|
||||
|
|
@ -9,6 +9,7 @@
|
|||
|
||||
/* Below are all the includes used throughout the library. */
|
||||
#include <errno.h>
|
||||
#include <fcntl.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
#include <unistd.h>
|
||||
|
|
|
|||
|
|
@ -1,7 +1,7 @@
|
|||
/* liblwevent/src/liblwevent/100_struct_lwevent.c
|
||||
*
|
||||
* (c)2007, Laurence Withers, <l@lwithers.me.uk>.
|
||||
* Released under the GNU GPLv2. See file COPYING or
|
||||
* Released under the GNU GPLv3. See file COPYING or
|
||||
* http://www.gnu.org/copyleft/gpl.html for details.
|
||||
*/
|
||||
|
||||
|
|
|
|||
|
|
@ -1,7 +1,7 @@
|
|||
/* liblwevent/src/liblwevent/200_eventloop.c
|
||||
*
|
||||
* (c)2007, Laurence Withers, <l@lwithers.me.uk>.
|
||||
* Released under the GNU GPLv2. See file COPYING or
|
||||
* Released under the GNU GPLv3. See file COPYING or
|
||||
* http://www.gnu.org/copyleft/gpl.html for details.
|
||||
*/
|
||||
|
||||
|
|
|
|||
|
|
@ -1,7 +1,7 @@
|
|||
/* liblwevent/src/liblwevent/200_eventloop.h
|
||||
*
|
||||
* (c)2007, Laurence Withers, <l@lwithers.me.uk>.
|
||||
* Released under the GNU GPLv2. See file COPYING or
|
||||
* Released under the GNU GPLv3. See file COPYING or
|
||||
* http://www.gnu.org/copyleft/gpl.html for details.
|
||||
*/
|
||||
|
||||
|
|
|
|||
|
|
@ -1,7 +1,7 @@
|
|||
/* liblwevent/src/liblwevent/300_fdevent.c
|
||||
*
|
||||
* (c)2007, Laurence Withers, <l@lwithers.me.uk>.
|
||||
* Released under the GNU GPLv2. See file COPYING or
|
||||
* Released under the GNU GPLv3. See file COPYING or
|
||||
* http://www.gnu.org/copyleft/gpl.html for details.
|
||||
*/
|
||||
|
||||
|
|
@ -59,7 +59,7 @@ void lwevent_free(struct lwevent* ev)
|
|||
|
||||
/* call destructor, close file descriptor, mark as invalid */
|
||||
if(ev->dtor) ev->dtor(ev);
|
||||
close(ev->fd);
|
||||
TEMP_FAILURE_RETRY( close(ev->fd) );
|
||||
_lwevent_invalid(ev);
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -1,7 +1,7 @@
|
|||
/* liblwevent/src/liblwevent/300_fdevent.h
|
||||
*
|
||||
* (c)2007, Laurence Withers, <l@lwithers.me.uk>.
|
||||
* Released under the GNU GPLv2. See file COPYING or
|
||||
* Released under the GNU GPLv3. See file COPYING or
|
||||
* http://www.gnu.org/copyleft/gpl.html for details.
|
||||
*/
|
||||
|
||||
|
|
|
|||
|
|
@ -1,7 +1,7 @@
|
|||
/* liblwevent/src/liblwevent/300_fdparams.c
|
||||
*
|
||||
* (c)2007, Laurence Withers, <l@lwithers.me.uk>.
|
||||
* Released under the GNU GPLv2. See file COPYING or
|
||||
* Released under the GNU GPLv3. See file COPYING or
|
||||
* http://www.gnu.org/copyleft/gpl.html for details.
|
||||
*/
|
||||
|
||||
|
|
|
|||
|
|
@ -1,7 +1,7 @@
|
|||
/* liblwevent/src/liblwevent/300_fdparams.h
|
||||
*
|
||||
* (c)2007, Laurence Withers, <l@lwithers.me.uk>.
|
||||
* Released under the GNU GPLv2. See file COPYING or
|
||||
* Released under the GNU GPLv3. See file COPYING or
|
||||
* http://www.gnu.org/copyleft/gpl.html for details.
|
||||
*/
|
||||
|
||||
|
|
|
|||
|
|
@ -1,7 +1,7 @@
|
|||
/* liblwevent/src/liblwevent/400_signalfd.c
|
||||
*
|
||||
* (c)2007, Laurence Withers, <l@lwithers.me.uk>.
|
||||
* Released under the GNU GPLv2. See file COPYING or
|
||||
* Released under the GNU GPLv3. See file COPYING or
|
||||
* http://www.gnu.org/copyleft/gpl.html for details.
|
||||
*/
|
||||
|
||||
|
|
@ -33,11 +33,7 @@ static void _lwevent_signalfd_callback(struct lwevent* ev, int revents)
|
|||
si = lwevent_get_user(ev);
|
||||
|
||||
while(1) {
|
||||
if(TEMP_FAILURE_RETRY( read(lwevent_get_fd(ev), &ssi, sizeof(ssi)) ) == -1) {
|
||||
if(errno == EAGAIN) return;
|
||||
/* TODO: now what??? */
|
||||
}
|
||||
|
||||
if(TEMP_FAILURE_RETRY( read(lwevent_get_fd(ev), &ssi, sizeof(ssi)) ) == -1) return;
|
||||
si->callback(&ssi);
|
||||
}
|
||||
}
|
||||
|
|
@ -58,17 +54,21 @@ struct lwevent_signal* lwevent_signalfd(const sigset_t* mask, lwevent_signalcb c
|
|||
sigdelset(&si->mask, SIGSEGV);
|
||||
si->callback = callback;
|
||||
|
||||
fd = signalfd(-1, &si->mask);
|
||||
fd = TEMP_FAILURE_RETRY( signalfd(-1, &si->mask) );
|
||||
if(fd == -1) {
|
||||
free(si);
|
||||
return 0;
|
||||
}
|
||||
|
||||
/* TODO: make non-blocking */
|
||||
if(lwevent_nonblock(fd)) {
|
||||
TEMP_FAILURE_RETRY( close(fd) );
|
||||
free(si);
|
||||
return 0;
|
||||
}
|
||||
|
||||
si->ev = lwevent_new(fd, EPOLLIN, _lwevent_signalfd_callback);
|
||||
if(!si->ev) {
|
||||
close(fd);
|
||||
TEMP_FAILURE_RETRY( close(fd) );
|
||||
free(si);
|
||||
return 0;
|
||||
}
|
||||
|
|
@ -105,7 +105,7 @@ int lwevent_signalfd_setsigs(struct lwevent_signal* si, const sigset_t* mask, si
|
|||
sigdelset(&mnew, SIGILL);
|
||||
sigdelset(&mnew, SIGSEGV);
|
||||
|
||||
if(signalfd(lwevent_get_fd(si->ev), &mnew)) return -1;
|
||||
if(TEMP_FAILURE_RETRY( signalfd(lwevent_get_fd(si->ev), &mnew) )) return -1;
|
||||
si->mask = mnew;
|
||||
return 0;
|
||||
}
|
||||
|
|
@ -131,10 +131,23 @@ void lwevent_signalfd_close(struct lwevent_signal* si)
|
|||
|
||||
|
||||
|
||||
static void _lwevent_signalfd_default_callback(const struct signalfd_siginfo* ssi)
|
||||
{
|
||||
(void)ssi;
|
||||
lwevent_loop_exit = 1;
|
||||
}
|
||||
|
||||
|
||||
|
||||
struct lwevent_signal* lwevent_signalfd_default(void)
|
||||
{
|
||||
/* TODO */
|
||||
return lwevent_signalfd(...);
|
||||
sigset_t mask;
|
||||
|
||||
sigemptyset(&mask);
|
||||
sigaddset(&mask, SIGINT);
|
||||
sigaddset(&mask, SIGTERM);
|
||||
|
||||
return lwevent_signalfd(&mask, _lwevent_signalfd_default_callback);
|
||||
}
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -1,7 +1,7 @@
|
|||
/* liblwevent/src/liblwevent/400_signalfd.h
|
||||
*
|
||||
* (c)2007, Laurence Withers, <l@lwithers.me.uk>.
|
||||
* Released under the GNU GPLv2. See file COPYING or
|
||||
* Released under the GNU GPLv3. See file COPYING or
|
||||
* http://www.gnu.org/copyleft/gpl.html for details.
|
||||
*/
|
||||
|
||||
|
|
|
|||
32
src/liblwevent/900_util.c
Normal file
32
src/liblwevent/900_util.c
Normal file
|
|
@ -0,0 +1,32 @@
|
|||
/* liblwevent/src/liblwevent/900_util.c
|
||||
*
|
||||
* (c)2007, Laurence Withers, <l@lwithers.me.uk>.
|
||||
* Released under the GNU GPLv3. See file COPYING or
|
||||
* http://www.gnu.org/copyleft/gpl.html for details.
|
||||
*/
|
||||
|
||||
|
||||
|
||||
/* lwevent_nonblock()
|
||||
* Uses fcntl(2) to set O_NONBLOCK for `fd'. No-op if it is already set. Does not affect any other
|
||||
* file status flags.
|
||||
*/
|
||||
int lwevent_nonblock(int fd)
|
||||
{
|
||||
long flags;
|
||||
|
||||
flags = TEMP_FAILURE_RETRY( fcntl(fd, F_GETFL) );
|
||||
if(flags == -1) return -1;
|
||||
|
||||
if(flags & O_NONBLOCK) return 0;
|
||||
|
||||
flags |= O_NONBLOCK;
|
||||
return TEMP_FAILURE_RETRY( fcntl(fd, F_SETFL, flags) );
|
||||
}
|
||||
|
||||
|
||||
|
||||
/* options for text editors
|
||||
kate: replace-trailing-space-save true; space-indent true; tab-width 4;
|
||||
vim: expandtab:ts=4:sw=4
|
||||
*/
|
||||
37
src/liblwevent/900_util.h
Normal file
37
src/liblwevent/900_util.h
Normal file
|
|
@ -0,0 +1,37 @@
|
|||
/* liblwevent/src/liblwevent/900_util.h
|
||||
*
|
||||
* (c)2007, Laurence Withers, <l@lwithers.me.uk>.
|
||||
* Released under the GNU GPLv3. See file COPYING or
|
||||
* http://www.gnu.org/copyleft/gpl.html for details.
|
||||
*/
|
||||
|
||||
|
||||
|
||||
/*! \defgroup util Miscellaneous utilities
|
||||
|
||||
This set of functions provide useful utilities for often-performed tasks.
|
||||
|
||||
*/
|
||||
/*!@{*/
|
||||
|
||||
|
||||
|
||||
/*! \brief Set file descriptor into non-blocking mode.
|
||||
|
||||
\param fd File descriptor.
|
||||
\retval 0 on success.
|
||||
\retval -1 on error (and see \a errno).
|
||||
|
||||
This function is provided to switch the file descriptor \a fd into non-blocking mode using
|
||||
\c fcntl(2).
|
||||
|
||||
*/
|
||||
int lwevent_nonblock(int fd) __attribute__((warn_unused_result));
|
||||
|
||||
|
||||
|
||||
/*!@}*/
|
||||
/* options for text editors
|
||||
kate: replace-trailing-space-save true; space-indent true; tab-width 4;
|
||||
vim: expandtab:ts=4:sw=4:syntax=c.doxygen
|
||||
*/
|
||||
|
|
@ -1,7 +1,7 @@
|
|||
/* liblwevent/src/liblwevent/999_BottomHeader.h
|
||||
*
|
||||
* (c)2007, Laurence Withers, <l@lwithers.me.uk>.
|
||||
* Released under the GNU GPLv2. See file COPYING or
|
||||
* Released under the GNU GPLv3. See file COPYING or
|
||||
* http://www.gnu.org/copyleft/gpl.html for details.
|
||||
*/
|
||||
|
||||
|
|
|
|||
|
|
@ -1,7 +1,7 @@
|
|||
# liblwevent/src/liblwevent/soversion
|
||||
#
|
||||
# (c)2007, Laurence Withers, <l@lwithers.me.uk>.
|
||||
# Released under the GNU GPLv2. See file COPYING or
|
||||
# Released under the GNU GPLv3. See file COPYING or
|
||||
# http://www.gnu.org/copyleft/gpl.html for details.
|
||||
#
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue