Finish library, switch to GPLv3.

This commit is contained in:
Laurence Withers 2007-10-14 10:24:28 +00:00
commit de6e661982
25 changed files with 771 additions and 290 deletions

View file

@ -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.
#

View file

@ -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)

View file

@ -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.
*/

View file

@ -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.
*/

View file

@ -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>

View file

@ -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.
*/

View file

@ -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.
*/

View file

@ -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.
*/

View file

@ -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);
}

View file

@ -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.
*/

View file

@ -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.
*/

View file

@ -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.
*/

View file

@ -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);
}

View file

@ -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
View 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
View 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
*/

View file

@ -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.
*/

View file

@ -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.
#