50 Commits
Author SHA1 Message Date
Joachim Nilsson 35d3a0f185 Update ChangeLog for v1.4.1 bug fix release
Signed-off-by: Joachim Nilsson <troglobit@gmail.com>
2016-04-22 14:54:53 +02:00
Joachim Nilsson 441d53e46e Bump ABI revision, v1.0.1, slight semantic change (CLOEXEC)
Signed-off-by: Joachim Nilsson <troglobit@gmail.com>
2016-04-22 14:53:29 +02:00
Joachim Nilsson 0b19880f80 Bump version to v1.4.1 for CLOEXEC fix
Signed-off-by: Joachim Nilsson <troglobit@gmail.com>
2016-04-22 14:37:48 +02:00
Joachim Nilsson 852bd506e8 Fix Markdown syntax in older releases
Signed-off-by: Joachim Nilsson <troglobit@gmail.com>
2016-04-22 14:34:46 +02:00
Joachim Nilsson 98c8e9f8b1 Fix leaking descriptors, use CLOEXEC
The signal and timer fd's used in libuEv were not created properly with
the CLOEXEC flag.  Hence, all forked off children calling exec*() could
access all file descriptor, sockets, etc., used by the parent process.

Signed-off-by: Joachim Nilsson <troglobit@gmail.com>
2016-04-22 14:31:51 +02:00
Joachim Nilsson 9fc5227343 Update copyright years
Signed-off-by: Joachim Nilsson <troglobit@gmail.com>
2016-04-22 14:30:56 +02:00
Joachim Nilsson e613248392 Minor style changes and whitespace fixes
Signed-off-by: Joachim Nilsson <troglobit@gmail.com>
2016-04-22 14:30:07 +02:00
Joachim Nilsson ac5f01ea22 Remove Emacs version-control handling
Signed-off-by: Joachim Nilsson <troglobit@gmail.com>
2016-04-22 14:29:19 +02:00
Joachim Nilsson a0ddb4eae3 Simplify configure script
Signed-off-by: Joachim Nilsson <troglobit@gmail.com>
2016-04-17 00:42:43 +02:00
Joachim Nilsson 1e7720735f Remove bogus autoconf version requirement
Signed-off-by: Joachim Nilsson <troglobit@gmail.com>
2016-04-17 00:42:25 +02:00
Joachim Nilsson 8010d76133 Remove superfluous space
Signed-off-by: Joachim Nilsson <troglobit@gmail.com>
2016-04-17 00:41:32 +02:00
Joachim Nilsson 73459ca609 Add some integration tips when using GNU autotools
Signed-off-by: Joachim Nilsson <troglobit@gmail.com>
2016-04-17 00:27:54 +02:00
Joachim Nilsson bd6d519315 Update ChangeLog and bump version for v1.4.0 release
Signed-off-by: Joachim Nilsson <troglobit@gmail.com>
2016-03-22 20:26:28 +01:00
Joachim Nilsson ece9788f5a Merge pull request #7 from villains/master
Add support for EPOLLPRI events for i/o watchers

Signed-off-by: Joachim Nilsson <troglobit@gmail.com>
2016-03-16 16:28:36 +01:00
Markus Svilans a9a78e8bf0 Add support for EPOLLPRI events for i/o watchers 2016-03-16 09:21:07 -04:00
Joachim Nilsson 71697266ed Simplify and clean up joystick example
Signed-off-by: Joachim Nilsson <troglobit@gmail.com>
2016-03-13 22:36:46 +01:00
Joachim Nilsson d5d6f9d844 README: Explicitly link to Summary section about caveat on signalfd
Signed-off-by: Joachim Nilsson <troglobit@gmail.com>
2016-03-13 02:22:14 +01:00
Joachim Nilsson 57a7bbe1b0 README: Minor polish and clarifications
Signed-off-by: Joachim Nilsson <troglobit@gmail.com>
2016-03-13 02:14:58 +01:00
Joachim Nilsson acb6d82ccf Minor update, mention when namespacing was silently introduced
Signed-off-by: Joachim Nilsson <troglobit@gmail.com>
2016-03-13 01:55:59 +01:00
Joachim Nilsson 7de9dafacc Bump version to v1.4.0-dev and update ChangeLog
Signed-off-by: Joachim Nilsson <troglobit@gmail.com>
2016-03-13 01:32:07 +01:00
Joachim Nilsson 2a1561b449 Update README with new header namespace and some basic housekeeping
Signed-off-by: Joachim Nilsson <troglobit@gmail.com>
2016-03-13 01:30:36 +01:00
Joachim Nilsson 7704e46b48 Change namespace for header files libuev/uev.h --> uev/uev.h
The `libuev/` namespace for header files was introduced in v1.2.1.  This
patch changes it to the less surprising `uev/`.  Hopefully there aren't
that many users of this library out there yet, apart from myself.

Apologies if you are affected!

Signed-off-by: Joachim Nilsson <troglobit@gmail.com>
2016-03-13 01:20:40 +01:00
Joachim Nilsson 8e3225999c Add pkg-config support
Signed-off-by: Joachim Nilsson <troglobit@gmail.com>
2016-03-13 01:10:38 +01:00
Joachim Nilsson f856f299e4 Update ChangeLog and bump version for v1.3.1 release
Signed-off-by: Joachim Nilsson <troglobit@gmail.com>
2016-02-02 09:41:10 +01:00
Joachim Nilsson 7012ab4779 Update ChangeLog in preparation for v1.3.1 release
Signed-off-by: Joachim Nilsson <troglobit@gmail.com>
2016-02-02 08:21:02 +01:00
Joachim Nilsson 23a7773f5c Makefile.am: Update to install and distribute README.md, LICENSE, etc.
Signed-off-by: Joachim Nilsson <troglobit@gmail.com>
2016-02-02 08:15:31 +01:00
Joachim Nilsson 232e476429 Remove confusing symlinks, it's a brave Markdown world
Signed-off-by: Joachim Nilsson <troglobit@gmail.com>
2016-02-02 08:11:47 +01:00
Joachim Nilsson 33ad2f5e87 Bump version for 1.3.1-dev cycle
Signed-off-by: Joachim Nilsson <troglobit@gmail.com>
2016-01-22 01:00:11 +01:00
Joachim Nilsson ae52fbdf2e Update ChangeLog with GIT diff links and fix minor Markdown formatting
Signed-off-by: Joachim Nilsson <troglobit@gmail.com>
2016-01-22 00:59:33 +01:00
Joachim Nilsson b3541da7cb Update ChangeLog and bump version for v1.3.0 release
Signed-off-by: Joachim Nilsson <troglobit@gmail.com>
2016-01-22 00:54:06 +01:00
Joachim Nilsson 315bd4558a Use pkginclude_HEADERS for libuEv include files
Fix include file namespace lost in initial conversion to GNU autotools,
use $(prefix)/include/$(PACKAGE)/*.h

Signed-off-by: Joachim Nilsson <troglobit@gmail.com>
2016-01-22 00:52:13 +01:00
Joachim Nilsson a0bed33445 Drop -Werror from default CFLAGS, for maintainer(s) only
Signed-off-by: Joachim Nilsson <troglobit@gmail.com>
2016-01-22 00:31:12 +01:00
Joachim Nilsson bf127b0dab Updates and cleanup of README
Signed-off-by: Joachim Nilsson <troglobit@gmail.com>
2016-01-22 00:24:32 +01:00
Joachim Nilsson 7d6d90cdb1 Remove AM_MAINTAINER_MODE from configure script, not recommended anymore
Signed-off-by: Joachim Nilsson <troglobit@gmail.com>
2016-01-21 22:31:58 +01:00
Joachim Nilsson 78b7d0962a Make sure to distribute examples as well, even if --disable-examples
Signed-off-by: Joachim Nilsson <troglobit@gmail.com>
2016-01-15 00:58:05 +01:00
Joachim Nilsson 1370275e61 Run clean pass first, then parallel build test
Signed-off-by: Joachim Nilsson <troglobit@gmail.com>
2016-01-14 21:45:16 +01:00
Joachim Nilsson d01cd60dae Update .gitignore to mask out all generated files from GNU build system
Signed-off-by: Joachim Nilsson <troglobit@gmail.com>
2016-01-14 21:41:14 +01:00
Joachim Nilsson fb942fcea9 Makefile.am: Prune unused libuev_la_LIBADD
Signed-off-by: Joachim Nilsson <troglobit@gmail.com>
2016-01-14 21:38:32 +01:00
Joachim Nilsson f49232cce0 README: Further updates after conversion to GNU configure and build
Signed-off-by: Joachim Nilsson <troglobit@gmail.com>
2016-01-12 21:40:30 +01:00
Joachim Nilsson 6933f7f7c2 README: Small update about the new GNU configure and build system
Signed-off-by: Joachim Nilsson <troglobit@gmail.com>
2016-01-11 17:30:38 +01:00
Joachim Nilsson cd522704c7 Create empty m4 directory for the benefit of autogen.sh and Travis-CI
Signed-off-by: Joachim Nilsson <troglobit@gmail.com>
2016-01-10 19:00:16 +01:00
Joachim Nilsson a0ebd468b6 Debug Travis-CI, fails to run autogen.sh
Signed-off-by: Joachim Nilsson <troglobit@gmail.com>
2016-01-10 18:57:58 +01:00
Joachim Nilsson b621062719 Fix Travis-CI build script
Signed-off-by: Joachim Nilsson <troglobit@gmail.com>
2016-01-10 18:51:07 +01:00
Joachim Nilsson f3e12a98a0 Update build script for Travis-CI with GNU configure and build system
Signed-off-by: Joachim Nilsson <troglobit@gmail.com>
2016-01-10 18:49:30 +01:00
Joachim Nilsson acf6bbcbaf Initial conversion to the GNU configure and build system
Signed-off-by: Joachim Nilsson <troglobit@gmail.com>
2016-01-10 18:21:52 +01:00
Joachim Nilsson a8604938e9 Remove default -Os optimization and add -Wextra
Signed-off-by: Joachim Nilsson <troglobit@gmail.com>
2016-01-08 21:06:20 +01:00
Joachim Nilsson cbb7455603 Correct Markdown syntax to version links
Signed-off-by: Joachim Nilsson <troglobit@gmail.com>
2016-01-05 12:58:55 +01:00
Joachim Nilsson cf5e729dd3 Update ChangeLog and bump version for v1.2.4 release
Signed-off-by: Joachim Nilsson <troglobit@gmail.com>
2015-11-23 00:41:33 +01:00
Joachim Nilsson 352baa8270 Make sure we don't inherit LDFLAGS from environment.
To pass custom LDFLAGS to libite, use EXTRA_LDFLAGS.

Signed-off-by: Joachim Nilsson <troglobit@gmail.com>
2015-10-22 18:36:37 +02:00
Joachim Nilsson 8721566d74 Do not allow VERSION to be overloaded by build system.
When integrating libuEv as a component in another piece of software,
that build system may set VERSION as an environment variable.  We do
not want that version to be set as the version of libuEv.

Signed-off-by: Joachim Nilsson <troglobit@gmail.com>
2015-10-03 09:14:31 +02:00
27 changed files with 346 additions and 359 deletions

No files matched your search

+27 -5
View File
@@ -1,7 +1,29 @@
bench *~
test
*.d *.d
*.o *.o
*~ *.so
libuev.a *.so.*
libuev.so.1 *.a
*.la
*.lo
.deps
.libs
compile
config.*
configure
depcomp
install-sh
libtool
ltmain.sh
missing
stamp-h1
Makefile
Makefile.in
aclocal.m4
ar-lib
autom4te.cache
bench
test
libuev*.tar.*
libuev.pc
!libuev.pc.in
+5 -2
View File
@@ -17,11 +17,14 @@ addons:
name: "troglobit/libuev" name: "troglobit/libuev"
description: "libuEv | Simple event loop for Linux" description: "libuEv | Simple event loop for Linux"
notification_email: troglobit@gmail.com notification_email: troglobit@gmail.com
build_command: "make" build_command_prepend: "./autogen && ./configure --enable-examples"
build_command: "make clean all"
branch_pattern: dev branch_pattern: dev
# We don't use configure, so we must define our own build script. # We don't use configure, so we must define our own build script.
script: script:
- make distclean - ./autogen.sh
- ./configure --disable-silent-rules --enable-examples
- make clean
- make -j5 - make -j5
- make test - make test
-1
View File
@@ -1 +0,0 @@
ChangeLog.md
+91 -28
View File
@@ -3,8 +3,68 @@ Change Log
All notable changes to the project are documented in this file. All notable changes to the project are documented in this file.
[v1.2.3] - 2015-09-17
--------------------- [v1.4.1][] - 2016-04-22
-----------------------
### Changes
- Add some `pkg-config` integration tips for developers using libuEv
with GNU autotools in their projects.
### Fixes
- Add missing `SFD_CLOEXEC` and `TFD_CLOEXEC` to signal and timer file
descriptors. This prevents these file descriptors from "leaking" into
sub-processes of the parent thread. The kernel will atomically close
these descriptors for forked-off children calling the exec*() family
of syscalls.
- Minor coding style fixes and simplification of build scripts.
[v1.4.0][] - 2016-03-22
-----------------------
This release changes the header file namespace, which was silently
introduced in [v1.2.1][]. Apologies for any problems this may cause!
### Changes
- Change namespace for header files: `libuev/` to `uev/`, e.g. using
`pkg-config` your C program must now `#include <uev/uev.h>`
- Support for `EPOLLPRI` events for I/O watchers, thanks to Markus Svilans
- Simplified joystick example
- Updated `README` slightly
[v1.3.1][] - 2016-02-02
-----------------------
### Fixes
- Remove symlinks to Markdown files from GIT
- Distribute and install Markdown files: README.md, etc.
[v1.3.0][] - 2016-01-22
-----------------------
### Changes
- Change to GNU configure and build system
- Default optimization is now `-O2`, not `-Os`, which can be a bit
unpredictable with some cross compiler toolchains. `-O2` is the
tried and tested path, and default in autotools
- Added `-Wextra` to the previous `-W -Wall`, drop `-Werror`
which is supposed to be used by maintainer(s) only.
[v1.2.4][] - 2015-11-23
-----------------------
### Fixes
- Do not allow `VERSION` to be overloaded by build system.
- Make sure we don't inherit `LDFLAGS` from environment.
[v1.2.3][] - 2015-09-17
-----------------------
Very minor release. Very minor release.
@@ -19,8 +79,8 @@ Very minor release.
- Silence annoying warning from newer GNU ar in Ubuntu 15.10 - Silence annoying warning from newer GNU ar in Ubuntu 15.10
[v1.2.2] - 2015-08-30 [v1.2.2][] - 2015-08-30
--------------------- -----------------------
Minor bugfix release. Minor bugfix release.
@@ -35,15 +95,15 @@ Minor bugfix release.
- Fix issue #6: Segfault when stopping timer before calling `uev_exit()` - Fix issue #6: Segfault when stopping timer before calling `uev_exit()`
[v1.2.1] - 2015-07-02 [v1.2.1][] - 2015-07-02
--------------------- -----------------------
### Changes ### Changes
- Private data members in `uev.h` have now been moved to a new file - Private data members in `uev.h` have now been moved to a new file
called `private.h`. This will hopefully make it easier to understand called `private.h`. This will hopefully make it easier to understand
what a user of libuEv is allowed to play around with. Thanks to @vonj what a user of libuEv is allowed to play around with. Thanks to @vonj
for the discussions around this! for the discussions around this!
- All builds of libuEv now default to use -fPIC, this bloats the code - All builds of libuEv now default to use `-fPIC`, this bloats the code
slightly, but ensures that linking works for all use cases, withouth slightly, but ensures that linking works for all use cases, withouth
introducing unnecessary complexity. introducing unnecessary complexity.
@@ -55,8 +115,8 @@ Minor bugfix release.
should use. Thank you @vonj! should use. Thank you @vonj!
[v1.2.0] - 2015-06-09 [v1.2.0][] - 2015-06-09
--------------------- -----------------------
API change in event callbacks and fix timers that never start. API change in event callbacks and fix timers that never start.
@@ -65,12 +125,12 @@ API change in event callbacks and fix timers that never start.
change! Please update all your callbacks if you upgrade. change! Please update all your callbacks if you upgrade.
### Fixes ### Fixes
- Fix timers that accidentally broke in [v1.1.0]. - Fix timers that accidentally broke in [v1.1.0][].
- Fixes to `bench.c`, it now actually listens to the pipe/socket. - Fixes to `bench.c`, it now actually listens to the pipe/socket.
[v1.1.0] - 2015-03-04 [v1.1.0][] - 2015-03-04
--------------------- -----------------------
Massively improved error handling. Massively improved error handling.
@@ -87,11 +147,11 @@ Massively improved error handling.
- Remove `test.c` from `DISTFILES` in `Makefile`. You need the - Remove `test.c` from `DISTFILES` in `Makefile`. You need the
comeplete sources to build the examples now. Thanks to @karasz for comeplete sources to build the examples now. Thanks to @karasz for
the heads up on this and the musl libc issue with missing `queue.h`! the heads up on this and the musl libc issue with missing `queue.h`!
- Fix broken link to [v1.0.5] in this file. - Fix broken link to [v1.0.5][] in this file.
[v1.0.5] - 2015-02-15 [v1.0.5][] - 2015-02-15
--------------------- -----------------------
### Changes ### Changes
- Add `uev_*_start()` functions. - Add `uev_*_start()` functions.
@@ -105,8 +165,8 @@ Massively improved error handling.
- Further updates to [README.md][] - Further updates to [README.md][]
[v1.0.4] - 2015-01-24 [v1.0.4][] - 2015-01-24
--------------------- -----------------------
Minor documentation and build fixes. Minor documentation and build fixes.
@@ -118,8 +178,8 @@ Release mainly targeted for [Finit development](https://github.com/troglobit/fin
* Minor update to Makefile, change how build progress is echoed * Minor update to Makefile, change how build progress is echoed
[v1.0.3] - 2015-01-24 [v1.0.3][] - 2015-01-24
--------------------- -----------------------
This is a very minor release, with a strong focus on documentation. This is a very minor release, with a strong focus on documentation.
@@ -131,25 +191,25 @@ This is a very minor release, with a strong focus on documentation.
- Clang scan-build support added - Clang scan-build support added
[v1.0.2] - 2015-01-07 [v1.0.2][] - 2015-01-07
--------------------- -----------------------
### Fixes ### Fixes
- Fix broken `make dist` target in [v1.0.1]. - Fix broken `make dist` target in [v1.0.1][].
[v1.0.1] - 2015-01-07 [v1.0.1][] - 2015-01-07
--------------------- -----------------------
### Changes ### Changes
- Cleanup and rewrite of [README.md][] after first audit by @vonj - Cleanup and rewrite of [README.md][] after first audit by @vonj
- Added API and example section to [README.md][] - Added API and example section to [README.md][]
- New [joystick.c] example added - New [joystick.c][] example added
- `main.c:uev_run()`: Document mysterious flags parameter - `main.c:uev_run()`: Document mysterious flags parameter
[v1.0.0] - 2013-08-06 [v1.0.0][] - 2013-08-06
--------------------- -----------------------
First release in the new guise and API. First release in the new guise and API.
@@ -173,7 +233,10 @@ v0.0.1 - 2012-03-17
Lua users mailing list. Lua users mailing list.
[UNRELEASED]: https://github.com/troglobit/libuev/compare/v1.2.3...HEAD [UNRELEASED]: https://github.com/troglobit/libuev/compare/v1.4.0...HEAD
[v1.4.0]: https://github.com/troglobit/libuev/compare/v1.3.1...v1.4.0
[v1.3.1]: https://github.com/troglobit/libuev/compare/v1.3.0...v1.3.1
[v1.3.0]: https://github.com/troglobit/libuev/compare/v1.2.3...v1.3.0
[v1.2.3]: https://github.com/troglobit/libuev/compare/v1.2.2...v1.2.3 [v1.2.3]: https://github.com/troglobit/libuev/compare/v1.2.2...v1.2.3
[v1.2.2]: https://github.com/troglobit/libuev/compare/v1.2.1...v1.2.2 [v1.2.2]: https://github.com/troglobit/libuev/compare/v1.2.1...v1.2.2
[v1.2.1]: https://github.com/troglobit/libuev/compare/v1.2.0...v1.2.1 [v1.2.1]: https://github.com/troglobit/libuev/compare/v1.2.0...v1.2.1
+1 -1
View File
@@ -1,5 +1,5 @@
Copyright (c) 2012 Flemming Madsen <flemming!madsen()madsensoft!dk> Copyright (c) 2012 Flemming Madsen <flemming!madsen()madsensoft!dk>
Copyright (c) 2013-2015 Joachim Nilsson <troglobit()gmail!com> Copyright (c) 2013-2016 Joachim Nilsson <troglobit()gmail!com>
Permission is hereby granted, free of charge, to any person obtaining a copy Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal of this software and associated documentation files (the "Software"), to deal
-151
View File
@@ -1,151 +0,0 @@
# libuEv -- Simple event loop for Linux
#
# Copyright (c) 2012 Flemming Madsen <flemming!madsen()madsensoft!dk>
# Copyright (c) 2013-2015 Joachim Nilsson <troglobit()gmail!com>
#
# Permission is hereby granted, free of charge, to any person obtaining a copy
# of this software and associated documentation files (the "Software"), to deal
# in the Software without restriction, including without limitation the rights
# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
# copies of the Software, and to permit persons to whom the Software is
# furnished to do so, subject to the following conditions:
#
# The above copyright notice and this permission notice shall be included in
# all copies or substantial portions of the Software.
#
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
# THE SOFTWARE.
#
.PHONY: all test clean joystick test examples bench
# Figure out root of library, unless used as submodule
ROOTDIR ?= $(shell pwd)
#VERSION = $(shell git tag -l | tail -1)
VERSION ?= 1.2.3
NAME = libuev
PKG = $(NAME)-$(VERSION)
ARCHIVE = $(PKG).tar.xz
CC ?= $(CROSS)gcc
AR ?= $(CROSS)ar
STRIP ?= $(CROSS)strip
MAKE := @$(MAKE)
INSTALL := install --backup=off
STRIPINST := $(INSTALL) -s --strip-program=$(CROSS)strip -m 0755
CFLAGS += -fPIC
CFLAGS += -Os
CPPFLAGS += -W -Wall -Werror
ARFLAGS = crus
MAKEFLAGS = --no-print-directory --silent
DISTFILES = README ChangeLog LICENSE
HEADERS = uev.h private.h queue.h
OBJS := uev.o io.o timer.o signal.o
SRCS := $(OBJS:.o=.c)
DEPS := $(SRCS:.c=.d)
JUNK = *~ *.bak *.map .*.d *.so* *.a DEADJOE *.gdb *.elf core core.* *.html
VER = 1
LIBNAME = $(NAME)
SOLIB = $(LIBNAME).so.$(VER)
SYMLIB = $(LIBNAME).so
STATICLIB = $(LIBNAME).a
TARGET = $(STATICLIB) $(SOLIB)
# Default install paths
prefix ?= /usr/local
libdir ?= $(prefix)/lib
datadir ?= $(prefix)/share/doc/$(LIBNAME)
incdir ?= $(prefix)/include
export STATICLIB JUNK ROOTDIR CFLAGS CPPFLAGS
# This magic trick looks like a comment, but works on BSD PMake
#include <rules.mk>
include rules.mk
# Build rules
all: $(TARGET)
$(OBJS): Makefile
$(SOLIB): Makefile $(OBJS)
@printf " LINK $@\n"
@$(CC) $(LDFLAGS) -shared -Wl,-soname=$@ -o $@ $(OBJS)
$(STATICLIB): Makefile $(OBJS)
@printf " ARCHIVE $@\n"
@$(AR) $(ARFLAGS) $@ $(OBJS) 2>/dev/null
install-exec: all
@printf " INSTALL $(DESTDIR)$(libdir)/$(SOLIB)\n"
@install -d $(DESTDIR)$(libdir)
@install $(SOLIB) $(DESTDIR)$(libdir)/$(SOLIB)
@ln -sf $(SOLIB) $(DESTDIR)$(libdir)/$(SYMLIB)
install-dev:
@install -d $(DESTDIR)$(incdir)/$(LIBNAME)
@for file in $(HEADERS); do \
printf " INSTALL $(DESTDIR)$(incdir)/$(LIBNAME)/$$file\n"; \
install -m 0644 $$file $(DESTDIR)$(incdir)/$(LIBNAME)/$$file; \
done
@printf " INSTALL $(DESTDIR)$(libdir)/$(STATICLIB)\n"
@install -d $(DESTDIR)$(libdir)
@install $(STATICLIB) $(DESTDIR)$(libdir)/$(STATICLIB)
@install -d $(DESTDIR)$(datadir)
@for file in $(DISTFILES); do \
printf " INSTALL $(DESTDIR)$(datadir)/$$file\n"; \
install -m 0644 $$file $(DESTDIR)$(datadir)/$$file; \
done
install: install-exec install-dev
uninstall:
-@$(RM) -r $(DESTDIR)$(datadir)
-@$(RM) -r $(DESTDIR)$(incdir)/$(LIBNAME)
-@$(RM) $(DESTDIR)$(libdir)/$(SOLIB)
-@$(RM) $(DESTDIR)$(libdir)/$(SYMLIB)
-@$(RM) $(DESTDIR)$(libdir)/$(STATICLIB)
strip: $(TARGET)
@printf " STRIP %s\n" $(TARGET)
@$(STRIP) --strip-unneeded $(TARGET)
@size $(TARGET)
bench: Makefile $(STATICLIB)
@printf " RUN %s\n" $@
@$(CC) $(CPPFLAGS) -D_GNU_SOURCE -g -o bench bench.c $(STATICLIB) && ./bench
examples: all
@$(MAKE) -C examples
test joystick: all
@$(MAKE) -C examples $@
@./examples/$@
# Runs Clang scan-build on the whole tree
check: clean
@scan-build $(MAKE) all
clean:
-@$(MAKE) -C examples $@
-@$(RM) $(TARGET) *.o test joystick bench
distclean: clean
-@$(MAKE) -C examples $@
-@$(RM) $(DEPS) $(JUNK)
dist:
@echo "Building .xz tarball of $(PKG) in parent dir..."
git archive --format=tar --prefix=$(PKG)/ v$(VERSION) | xz >../$(ARCHIVE)
@(cd ..; md5sum $(ARCHIVE) | tee $(ARCHIVE).md5)
# Include automatically generated rules
-include $(DEPS)
+69
View File
@@ -0,0 +1,69 @@
ACLOCAL_AMFLAGS = -I m4
lib_LTLIBRARIES = libuev.la
pkgincludedir = $(includedir)/uev
pkginclude_HEADERS = uev.h private.h queue.h
libuev_la_SOURCES = uev.c io.c timer.c signal.c
check_PROGRAMS = bench
bench_CPPFLAGS = -D_GNU_SOURCE
bench_LDADD = $(top_srcdir)/libuev.la
libuev_la_CPPFLAGS = -D_GNU_SOURCE
libuev_la_CFLAGS = -W -Wall -Wextra
libuev_la_LDFLAGS = $(AM_LDFLAGS) -version-info 1:1:0
pkgconfigdir = $(libdir)/pkgconfig
pkgconfig_DATA = libuev.pc
doc_DATA = README.md LICENSE
EXTRA_DIST = README.md LICENSE AUTHORS ChangeLog.md
DIST_SUBDIRS = examples
SUBDIRS = .
if ENABLE_EXAMPLES
SUBDIRS += examples
endif
test joystick: all-recursive
./examples/$@
check-local:
@echo " BENCH $(PACKAGE)"
@./bench
if ENABLE_EXAMPLES
@echo " TEST $(PACKAGE)"
@./examples/test
endif
## Generate MD5 checksum file
MD5 = md5sum
md5-dist:
@for file in $(DIST_ARCHIVES); do \
$(MD5) $$file > $$file.md5; \
done
## Check if tagged in git
release-hook:
if [ ! `git tag | grep $(PACKAGE_VERSION)` ]; then \
echo; \
printf "\e[1m\e[41mCannot find release tag $(PACKAGE_VERSION)\e[0m\n"; \
printf "\e[1m\e[5mDo release anyway?\e[0m "; read yorn; \
if [ "$$yorn" != "y" -a "$$yorn" != "Y" ]; then \
printf "OK, aborting release.\n"; \
exit 1; \
fi; \
echo; \
else \
echo; \
printf "\e[1m\e[42mFound GIT release tag $(PACKAGE_VERSION)\e[0m\n"; \
printf "\e[1m\e[44m>>Remember to push tags!\e[0m\n"; \
echo; \
fi
## Target to run when building a release
release: dist release-hook md5-dist
@for file in $(DIST_ARCHIVES); do \
printf "$$file \tDistribution tarball\n"; \
printf "$$file.md5\t"; cat $$file.md5 | cut -f1 -d' '; \
mv $$file* ../; \
done
-1
View File
@@ -1 +0,0 @@
README.md
+94 -75
View File
@@ -12,6 +12,7 @@ Table of Contents
* [Register an Event Watcher](#register-an-event-watcher) * [Register an Event Watcher](#register-an-event-watcher)
* [Start Event Loop](#start-event-loop) * [Start Event Loop](#start-event-loop)
* [Summary](#summary) * [Summary](#summary)
* [Using -luev](#using--luev)
* [Joystick Example](#joystick-example) * [Joystick Example](#joystick-example)
* [Build & Install](#build--install) * [Build & Install](#build--install)
* [Origin & References](#origin--references) * [Origin & References](#origin--references)
@@ -59,19 +60,21 @@ modern Linux APIs: epoll, timerfd and signalfd. Note, a certain amount
of care is needed when dealing with APIs that employ signalfd. For of care is needed when dealing with APIs that employ signalfd. For
details, see [this article][4] at [lwn.net](http://lwn.net). details, see [this article][4] at [lwn.net](http://lwn.net).
> “Event driven software improves concurrency” -- [Dave Zarzycki, Apple] > “Event driven software improves concurrency” -- [Dave Zarzycki, Apple][]
API API
--- ---
The C interface to [libuEv][] is very simple. It handles three different The C interface to [libuEv][] is listed in `uev.h`. It handles three
types of events: I/O (files, sockets, message queues, etc.), timers, and different types of events: I/O (files, sockets, message queues, etc.),
signals. With a slight caveat on signals timers, and signals. With a slight caveat on signals detailed below
in the [Summary](#summary).
```C ```C
/* Callback example, arg is passed from watcher's *_init() /*
* Callback example, arg is passed from watcher's *_init()
* w->fd holds the file descriptor, events is set by libuEv * w->fd holds the file descriptor, events is set by libuEv
* to indicate if any of UEV_READ and/or UEV_WRITE is ready. * to indicate if any of UEV_READ and/or UEV_WRITE is ready.
*/ */
@@ -102,6 +105,7 @@ signals. With a slight caveat on signals
``` ```
### Create an Event Context ### Create an Event Context
To monitor events the developer first creates an *event context*, this To monitor events the developer first creates an *event context*, this
@@ -116,13 +120,13 @@ is achieved by calling `uev_init()` with a pointer to a (thread) local
``` ```
### Register an Event Watcher ### Register an Event Watcher
For each event to be monitored, be it a signal, timer or a file For each event to monitor, be it a signal, timer or file descriptor, a
descriptor, a *watcher* must be registered with the event context. The *watcher* must be registered with the event context. The watcher, an
watcher, an `uev_t`, is registered by calling the event type's `_init()` `uev_t`, is registered by calling the event type's `_init()` function
function with the `uev_ctx_t` context, the callback, and an optional with the `uev_ctx_t` context, the callback, and an optional argument.
argument.
Here is a signal example: Here is a signal example:
@@ -148,6 +152,7 @@ Here is a signal example:
``` ```
### Start Event Loop ### Start Event Loop
When all watchers are registered, call the *event loop* with `uev_run()` When all watchers are registered, call the *event loop* with `uev_run()`
@@ -187,20 +192,46 @@ opened in blocking mode. Be careful out there!
effects on your program. effects on your program.
**Note 3:** As mentioned above, a certain amount of care is needed when **Note 3:** As mentioned above, a certain amount of care is needed when
dealing with signalfd. This means that if your application, for dealing with signalfd. If your application use `system()` you replace
instance, uses `system()` you must redesign that to use `fork()`, and that with `fork()`, and then in the child, unblock all signals blocked
then in the child, unblock all signals blocked by your parent process, by your parent process, before you run `exec()`. This because Linux
before you run `exec()`. This because Linux does not unblock signals does not unblock signals for your children, and neither does most (all?)
for your children, and neither does most (all?) C-libraries. An example C-libraries. See the [finit][6] project's implementation of `run()` for
of this, from [finit][6], implementing `run()` as a better replacement an example of this.
to `system()`, which sucks anyawy :)
Using -luev
-----------
LibuEv is by default installed as a library with a few header files, you
should only ever need to include one:
#include <uev/uev.h>
The output from the `pkg-config` tool holds no surprises:
$ pkg-config --libs --static --cflags libuev
-I/usr/local/include -L/usr/local/lib -luev
The prefix path `/usr/local/` shown here is only the default. Use the
`configure` script to select a different prefix when installing libuEv.
For GNU autotools based projects, use the following in `configure.ac`:
# Check for required libraries
PKG_CHECK_MODULES([uev], [libuev >= 1.4.0])
and in your `Makefile.am`:
proggy_CFLAGS = $(uev_CFLAGS)
proggy_LDADD = $(uev_LIBS)
Joystick Example Joystick Example
---------------- ----------------
Here follows a very brief example to illustrate how one can use Here follows a very brief example to illustrate how one can use libuEv
[libuEv][] to act upon joystick input. to act upon joystick input.
```C ```C
@@ -210,59 +241,61 @@ Here follows a very brief example to illustrate how one can use
#include <stdint.h> #include <stdint.h>
#include <fcntl.h> #include <fcntl.h>
#include <unistd.h> #include <unistd.h>
#include <uev/uev.h>
#include "uev.h"
struct js_event { struct js_event {
uint32_t time; /* event timestamp in milliseconds */ uint32_t time; /* event timestamp in milliseconds */
int16_t value; /* value */ int16_t value; /* value */
uint8_t type; /* event type */ uint8_t type; /* event type */
uint8_t number; /* axis/button number */ uint8_t number; /* axis/button number */
} e; } e;
static void joystick_cb(uev_t *w, void *arg, int events) static void joystick_cb(uev_t *w, void *arg, int events)
{ {
read (w->fd, &e, sizeof(e)); read(w->fd, &e, sizeof(e));
switch (e.type) { switch (e.type) {
case 1: case 1:
if (e.value) printf("Button %d pressed\n", e.number); printf("Button %d %s\n", e.number, e.value ? "pressed" : "released");
else printf("Button %d released\n", e.number); break;
break;
case 2: case 2:
printf("Joystick axis %d moved, value %d!\n", e.number, e.value); printf("Joystick axis %d moved, value %d!\n", e.number, e.value);
break; break;
} }
} }
int main(void) int main(void)
{ {
int fd = open("/dev/input/js1", O_RDONLY, O_NONBLOCK); int fd;
uev_t js1_watcher; uev_t watcher;
uev_ctx_t ctx; uev_ctx_t ctx;
if (fd < 0) fd = open("/dev/input/js1", O_RDONLY, O_NONBLOCK);
errx(errno, "Cannot find a joystick attached."); if (fd < 0)
errx(errno, "Cannot find a joystick attached.");
uev_init(&ctx); uev_init(&ctx);
uev_io_init(&ctx, &js1_watcher, joystick_cb, NULL, fd, UEV_READ); uev_io_init(&ctx, &watcher, joystick_cb, NULL, fd, UEV_READ);
puts("Starting, press Ctrl-C to exit."); puts("Starting, press Ctrl-C to exit.");
return uev_run(&ctx, 0); return uev_run(&ctx, 0);
} }
``` ```
To compile the program, save the code as `joystick.c` and call GCC with To build the example, follow installation instructions below, then save
`gcc -o joystick joystick.c io.c timer.c signal.c main.c` from this the code as `joystick.c` and call GCC
directory, skips using a Makefile altogether. Alternatively, call the
`Makefile` with <kbd>make joystick</kbd> from this directory.
More complete and relevant example uses of [libuEv][] is the TFTP/FTP gcc `pkg-config --libs --static --cflags libuev` -o joystick joystick.c
Alternatively, call the `Makefile` with <kbd>make joystick</kbd> from
the unpacked [libuEv][] distribution.
More complete and relevant example uses of [libuEv][] is the FTP/TFTP
server [uftpd][5], and the Linux `/sbin/init` replacement [finit][6]. server [uftpd][5], and the Linux `/sbin/init` replacement [finit][6].
Both use [libuEv][] as a GIT submodule. Both successfully employ [libuEv][].
Also see the `bench.c` program (<kbd>make bench</kbd> from within the Also see the `bench.c` program (<kbd>make bench</kbd> from within the
library) for [reference benchmarks][7] against [libevent][1] and library) for [reference benchmarks][7] against [libevent][1] and
@@ -272,38 +305,24 @@ library) for [reference benchmarks][7] against [libevent][1] and
Build & Install Build & Install
--------------- ---------------
The library is built for and developed on GNU/Linux systems, so it may The library is built for and developed on GNU/Linux systems, patches to
use GCC and GNU Make specific extensions here and there. This is not on support *BSD and its kqueue interface are most welcome.
purpose and patches to correct this are most welcome. Particularly
patches to support *BSD and its kqueue interface.
* <kbd>make all</kbd>: The library libuEv use the GNU configure and build system. To try out the bundled
* <kbd>make test</kbd>: Test and showcase examples, use the `--enable-examples` switch to the `configure` script.
* <kbd>make install</kbd>: Honors `$prefix` and `$DESTDIR` environment variables
Size of [libuEv][]: ./configure
make all
make test
make install
$ make strip The resulting .so file is ~14 kiB (<kbd>make install-strip</kbd>).
CC main.o
CC io.o
CC timer.o
CC signal.o
ARCHIVE libuev.a
LINK libuev.so.1
STRIP libuev.a
STRIP libuev.so.1
text data bss dec hex filename
1177 0 0 1177 499 main.o (ex libuev.a)
308 0 0 308 134 io.o (ex libuev.a)
682 0 0 682 2aa timer.o (ex libuev.a)
563 0 0 563 233 signal.o (ex libuev.a)
6306 768 8 7082 1baa libuev.so.1
Origin & References Origin & References
-------------------- -------------------
[libuEv][] was originally based on [LibUEvent][8] by [Flemming Madsen] [libuEv][] was originally based on [LibUEvent][8] by [Flemming Madsen][]
but has been completely rewritten with a much clearer API. Now more but has been completely rewritten with a much clearer API. Now more
similar to the famous [libev][2] by [Mark Lehmann][]. Another small similar to the famous [libev][2] by [Mark Lehmann][]. Another small
event library used for inspiration is the very small [Picoev][9] by event library used for inspiration is the very small [Picoev][9] by
-1
View File
@@ -1 +0,0 @@
TODO.md
Executable
+3
View File
@@ -0,0 +1,3 @@
#!/bin/sh
autoreconf -W portability -visfm
-1
View File
@@ -229,7 +229,6 @@ int main(int argc, char **argv)
/** /**
* Local Variables: * Local Variables:
* version-control: t
* indent-tabs-mode: t * indent-tabs-mode: t
* c-file-style: "linux" * c-file-style: "linux"
* End: * End:
+19
View File
@@ -0,0 +1,19 @@
AC_INIT(libuev, 1.4.1, https://github.com/troglobit/libuev/issues)
AM_INIT_AUTOMAKE([1.11 foreign no-dist-gzip dist-xz])
AM_SILENT_RULES([yes])
AC_CONFIG_SRCDIR(uev.c)
AM_CONFIG_HEADER(config.h)
AC_CONFIG_FILES([Makefile libuev.pc examples/Makefile])
AC_CONFIG_MACRO_DIR([m4])
AC_PROG_CC
AM_PROG_AR
LT_INIT
AC_ARG_ENABLE([examples],
[AS_HELP_STRING([--enable-examples], [build examples])],
[enable_examples=yes], [])
AM_CONDITIONAL([ENABLE_EXAMPLES], [test "$enable_examples" = yes])
AC_OUTPUT
-54
View File
@@ -1,54 +0,0 @@
# libuEv examples
#
# Copyright (c) 2012 Flemming Madsen <flemming!madsen()madsensoft!dk>
# Copyright (c) 2013-2015 Joachim Nilsson <troglobit()gmail!com>
#
# Permission is hereby granted, free of charge, to any person obtaining
# a copy of this software and associated documentation files (the
# "Software"), to deal in the Software without restriction, including
# without limitation the rights to use, copy, modify, merge, publish,
# distribute, sublicense, and/or sell copies of the Software, and to
# permit persons to whom the Software is furnished to do so, subject to
# the following conditions:
#
# The above copyright notice and this permission notice shall be
# included in all copies or substantial portions of the Software.
#
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
# EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
# IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
# CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
# TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
# SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
#
.PHONY: all clean
TARGET = signal test joystick
OBJS := $(addsuffix .o, $(TARGET))
SRCS := $(OBJS:.o=.c)
DEPS := $(SRCS:.c=.d)
CPPFLAGS += -I../
LDFLAGS := -L../
LDLIBS := ../$(STATICLIB)
# This magic trick looks like a comment, but works on BSD PMake
#include <../rules.mk>
include ../rules.mk
all: $(TARGET)
signal: signal.o
test: test.o
joystick: joystick.o
clean:
-@$(RM) $(TARGET) *.o
distclean: clean
-@$(RM) $(DEPS) $(JUNK)
# Include automatically generated rules
-include $(DEPS)
+5
View File
@@ -0,0 +1,5 @@
noinst_PROGRAMS = signal test joystick
AM_CPPFLAGS = -I$(top_srcdir)
AM_LDFLAGS = -L$(top_srcdir)
LIBS = $(LTLIBINTL)
LDADD = $(top_srcdir)/libuev.la
+8 -11
View File
@@ -1,6 +1,6 @@
/* Simple example of how to use libuEv with Linux joystick API /* Simple example of how to use libuEv with Linux joystick API
* *
* Copyright (c) 2014-2015 Joachim Nilsson <troglobit()gmail!com> * Copyright (c) 2014-2016 Joachim Nilsson <troglobit()gmail!com>
* *
* Permission is hereby granted, free of charge, to any person obtaining a copy * Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal * of this software and associated documentation files (the "Software"), to deal
@@ -30,8 +30,6 @@
#include "uev.h" #include "uev.h"
#define UNUSED(arg) arg __attribute__ ((unused))
struct js_event { struct js_event {
uint32_t time; /* event timestamp in milliseconds */ uint32_t time; /* event timestamp in milliseconds */
int16_t value; /* value */ int16_t value; /* value */
@@ -39,15 +37,14 @@ struct js_event {
uint8_t number; /* axis/button number */ uint8_t number; /* axis/button number */
} e; } e;
static void joystick_cb(uev_t *w, void *UNUSED(arg), int UNUSED(events)) static void joystick_cb(uev_t *w, void *arg, int events)
{ {
if (read (w->fd, &e, sizeof(e)) < 0) if (read(w->fd, &e, sizeof(e)) < 0)
errx(errno, "Failed reading joystick event"); errx(errno, "Failed reading joystick event");
switch (e.type) { switch (e.type) {
case 1: case 1:
if (e.value) printf("Button %d pressed\n", e.number); printf("Button %d %s\n", e.number, e.value ? "pressed" : "released");
else printf("Button %d released\n", e.number);
break; break;
case 2: case 2:
@@ -58,10 +55,11 @@ static void joystick_cb(uev_t *w, void *UNUSED(arg), int UNUSED(events))
int main(void) int main(void)
{ {
int fd = open("/dev/input/js1", O_RDONLY, O_NONBLOCK); int fd;
uev_t js1_watcher; uev_t js1_watcher;
uev_ctx_t ctx; uev_ctx_t ctx;
fd = open("/dev/input/js1", O_RDONLY, O_NONBLOCK);
if (fd < 0) if (fd < 0)
errx(errno, "Cannot find a joystick attached."); errx(errno, "Cannot find a joystick attached.");
@@ -75,8 +73,7 @@ int main(void)
/** /**
* Local Variables: * Local Variables:
* compile-command: "gcc -o joystick joystick.c io.o timer.o signal.o main.o" * compile-command: "make joystick"
* version-control: t
* indent-tabs-mode: t * indent-tabs-mode: t
* c-file-style: "linux" * c-file-style: "linux"
* End: * End:
-1
View File
@@ -134,7 +134,6 @@ int main(void)
/** /**
* Local Variables: * Local Variables:
* version-control: t
* indent-tabs-mode: t * indent-tabs-mode: t
* c-file-style: "linux" * c-file-style: "linux"
* End: * End:
-1
View File
@@ -146,7 +146,6 @@ int main(void)
/** /**
* Local Variables: * Local Variables:
* version-control: t
* indent-tabs-mode: t * indent-tabs-mode: t
* c-file-style: "linux" * c-file-style: "linux"
* End: * End:
+2 -4
View File
@@ -1,7 +1,7 @@
/* libuEv - Micro event loop library /* libuEv - Micro event loop library
* *
* Copyright (c) 2012 Flemming Madsen <flemming!madsen()madsensoft!dk> * Copyright (c) 2012 Flemming Madsen <flemming!madsen()madsensoft!dk>
* Copyright (c) 2013-2015 Joachim Nilsson <troglobit()gmail!com> * Copyright (c) 2013-2016 Joachim Nilsson <troglobit()gmail!com>
* *
* Permission is hereby granted, free of charge, to any person obtaining a copy * Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal * of this software and associated documentation files (the "Software"), to deal
@@ -23,7 +23,6 @@
*/ */
#include <errno.h> #include <errno.h>
#include "uev.h" #include "uev.h"
@@ -34,7 +33,7 @@
* @param cb I/O callback * @param cb I/O callback
* @param arg Optional callback argument * @param arg Optional callback argument
* @param fd File descriptor to watch, or -1 to register an empty watcher * @param fd File descriptor to watch, or -1 to register an empty watcher
* @param events Requested events to watch for, a mask of %UEV_READ and %UEV_WRITE * @param events Requested events to watch for, a mask of %UEV_READ, %UEV_WRITE and %UEV_PRI
* *
* @return POSIX OK(0) or non-zero with @param errno set on error. * @return POSIX OK(0) or non-zero with @param errno set on error.
*/ */
@@ -91,7 +90,6 @@ int uev_io_stop(uev_t *w)
/** /**
* Local Variables: * Local Variables:
* version-control: t
* indent-tabs-mode: t * indent-tabs-mode: t
* c-file-style: "linux" * c-file-style: "linux"
* End: * End:
+12
View File
@@ -0,0 +1,12 @@
prefix=@prefix@
exec_prefix=@exec_prefix@
libdir=@libdir@
includedir=@includedir@
Name: @PACKAGE@
Description: Simple event loop for Linux
Version: @VERSION@
Requires:
Libs: -L${libdir} -luev
Cflags: -I${includedir}
+1
View File
@@ -0,0 +1 @@
*.m4
+1 -2
View File
@@ -37,7 +37,7 @@ typedef enum {
} uev_type_t; } uev_type_t;
/* Event mask, used internally only. */ /* Event mask, used internally only. */
#define UEV_EVENT_MASK (UEV_READ | UEV_WRITE) #define UEV_EVENT_MASK (UEV_READ | UEV_WRITE | UEV_PRI)
/* Main libuEv context type */ /* Main libuEv context type */
typedef struct { typedef struct {
@@ -82,7 +82,6 @@ int uev_watcher_stop (struct uev *w);
/** /**
* Local Variables: * Local Variables:
* version-control: t
* indent-tabs-mode: t * indent-tabs-mode: t
* c-file-style: "linux" * c-file-style: "linux"
* End: * End:
-9
View File
@@ -1,9 +0,0 @@
# Pretty printing and GCC -M for auto dep files
%.o: %.c
@printf " CC $(subst $(ROOTDIR)/,,$(shell pwd)/)$@\n"
@$(CC) $(CFLAGS) $(CPPFLAGS) -c -MMD -MP -o $@ $<
%: %.o
@printf " LINK $(subst $(ROOTDIR)/,,$(shell pwd)/)$@\n"
@$(CC) $(CFLAGS) $(LDFLAGS) -Wl,-Map,$@.map -o $@ $^ $(LDLIBS$(LDLIBS-$(@)))
+2 -3
View File
@@ -1,7 +1,7 @@
/* libuEv - Micro event loop library /* libuEv - Micro event loop library
* *
* Copyright (c) 2012 Flemming Madsen <flemming!madsen()madsensoft!dk> * Copyright (c) 2012 Flemming Madsen <flemming!madsen()madsensoft!dk>
* Copyright (c) 2013-2015 Joachim Nilsson <troglobit()gmail!com> * Copyright (c) 2013-2016 Joachim Nilsson <troglobit()gmail!com>
* *
* Permission is hereby granted, free of charge, to any person obtaining a copy * Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal * of this software and associated documentation files (the "Software"), to deal
@@ -52,7 +52,7 @@ int uev_signal_init(uev_ctx_t *ctx, uev_t *w, uev_cb_t *cb, void *arg, int signo
w->fd = -1; w->fd = -1;
sigemptyset(&mask); sigemptyset(&mask);
fd = signalfd(-1, &mask, SFD_NONBLOCK); fd = signalfd(-1, &mask, SFD_NONBLOCK | SFD_CLOEXEC);
if (fd < 0) if (fd < 0)
return -1; return -1;
@@ -151,7 +151,6 @@ int uev_signal_stop(uev_t *w)
/** /**
* Local Variables: * Local Variables:
* version-control: t
* indent-tabs-mode: t * indent-tabs-mode: t
* c-file-style: "linux" * c-file-style: "linux"
* End: * End:
+2 -3
View File
@@ -1,7 +1,7 @@
/* libuEv - Micro event loop library /* libuEv - Micro event loop library
* *
* Copyright (c) 2012 Flemming Madsen <flemming!madsen()madsensoft!dk> * Copyright (c) 2012 Flemming Madsen <flemming!madsen()madsensoft!dk>
* Copyright (c) 2013-2015 Joachim Nilsson <troglobit()gmail!com> * Copyright (c) 2013-2016 Joachim Nilsson <troglobit()gmail!com>
* *
* Permission is hereby granted, free of charge, to any person obtaining a copy * Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal * of this software and associated documentation files (the "Software"), to deal
@@ -67,7 +67,7 @@ int uev_timer_init(uev_ctx_t *ctx, uev_t *w, uev_cb_t *cb, void *arg, int timeou
{ {
int fd; int fd;
fd = timerfd_create(CLOCK_MONOTONIC, TFD_NONBLOCK); fd = timerfd_create(CLOCK_MONOTONIC, TFD_NONBLOCK | TFD_CLOEXEC);
if (fd < 0) if (fd < 0)
return -1; return -1;
@@ -169,7 +169,6 @@ int uev_timer_stop(uev_t *w)
/** /**
* Local Variables: * Local Variables:
* version-control: t
* indent-tabs-mode: t * indent-tabs-mode: t
* c-file-style: "linux" * c-file-style: "linux"
* End: * End:
+3 -4
View File
@@ -1,7 +1,7 @@
/* libuEv - Micro event loop library /* libuEv - Micro event loop library
* *
* Copyright (c) 2012 Flemming Madsen <flemming!madsen()madsensoft!dk> * Copyright (c) 2012 Flemming Madsen <flemming!madsen()madsensoft!dk>
* Copyright (c) 2013-2015 Joachim Nilsson <troglobit()gmail!com> * Copyright (c) 2013-2016 Joachim Nilsson <troglobit()gmail!com>
* *
* Permission is hereby granted, free of charge, to any person obtaining a copy * Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal * of this software and associated documentation files (the "Software"), to deal
@@ -36,8 +36,9 @@
static int _init(uev_ctx_t *ctx, int close_old) static int _init(uev_ctx_t *ctx, int close_old)
{ {
int fd = epoll_create1(EPOLL_CLOEXEC); int fd;
fd = epoll_create1(EPOLL_CLOEXEC);
if (fd < 0) if (fd < 0)
return -1; return -1;
@@ -311,10 +312,8 @@ int uev_run(uev_ctx_t *ctx, int flags)
return result; return result;
} }
/** /**
* Local Variables: * Local Variables:
* version-control: t
* indent-tabs-mode: t * indent-tabs-mode: t
* c-file-style: "linux" * c-file-style: "linux"
* End: * End:
+1 -1
View File
@@ -34,6 +34,7 @@
#define UEV_NONE 0 #define UEV_NONE 0
#define UEV_READ EPOLLIN #define UEV_READ EPOLLIN
#define UEV_WRITE EPOLLOUT #define UEV_WRITE EPOLLOUT
#define UEV_PRI EPOLLPRI
/* Run flags */ /* Run flags */
#define UEV_ONCE 1 #define UEV_ONCE 1
@@ -76,7 +77,6 @@ int uev_signal_stop (uev_t *w);
/** /**
* Local Variables: * Local Variables:
* version-control: t
* indent-tabs-mode: t * indent-tabs-mode: t
* c-file-style: "linux" * c-file-style: "linux"
* End: * End: