diff --git a/libdaemon/Android.mk b/libdaemon/Android.mk
new file mode 100644
index 0000000..5053e7d
--- /dev/null
+++ b/libdaemon/Android.mk
@@ -0,0 +1 @@
+include $(call all-subdir-makefiles)
diff --git a/libdaemon/LICENSE b/libdaemon/LICENSE
new file mode 100644
index 0000000..9fefbba
--- /dev/null
+++ b/libdaemon/LICENSE
@@ -0,0 +1,19 @@
+Copyright (C) 2003-2008 Lennart Poettering
+
+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.
diff --git a/libdaemon/MODULE_LICENSE_MIT b/libdaemon/MODULE_LICENSE_MIT
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/libdaemon/MODULE_LICENSE_MIT
diff --git a/libdaemon/Makefile.am b/libdaemon/Makefile.am
new file mode 100644
index 0000000..ef13592
--- /dev/null
+++ b/libdaemon/Makefile.am
@@ -0,0 +1,59 @@
+# This file is part of libdaemon.
+#
+# Copyright 2003-2008 Lennart Poettering
+#
+# 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.
+
+ACLOCAL_AMFLAGS = -I m4
+
+EXTRA_DIST=bootstrap.sh LICENSE
+SUBDIRS=libdaemon doc
+
+if EXAMPLES
+SUBDIRS += examples
+endif
+
+pkgconfigdir = $(libdir)/pkgconfig
+pkgconfig_DATA = pkgconfig/libdaemon.pc
+
+dist_noinst_DATA =
+MAINTAINERCLEANFILES=
+
+if USE_LYNX
+dist_noinst_DATA += README
+MAINTAINERCLEANFILES += README
+
+README:
+	rm -f README
+	$(MAKE) -C doc README
+	ln -s doc/README README
+endif
+
+doxygen:
+	$(MAKE) -C doc doxygen
+
+homepage: dist doxygen
+	test -d $$HOME/homepage/private
+	mkdir -p $$HOME/homepage/private/projects/libdaemon
+	cp libdaemon-@PACKAGE_VERSION@.tar.gz $$HOME/homepage/private/projects/libdaemon
+	cp doc/README.html doc/style.css $$HOME/homepage/private/projects/libdaemon
+	ln -sf README.html $$HOME/homepage/private/projects/libdaemon/index.html
+	cp -av doc/reference/ $$HOME/homepage/private/projects/libdaemon/
+
+.PHONY: homepage doxygen
diff --git a/libdaemon/NOTICE b/libdaemon/NOTICE
new file mode 100644
index 0000000..9fefbba
--- /dev/null
+++ b/libdaemon/NOTICE
@@ -0,0 +1,19 @@
+Copyright (C) 2003-2008 Lennart Poettering
+
+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.
diff --git a/libdaemon/bootstrap.sh b/libdaemon/bootstrap.sh
new file mode 100755
index 0000000..381f31c
--- /dev/null
+++ b/libdaemon/bootstrap.sh
@@ -0,0 +1,71 @@
+#!/bin/sh
+
+# This file is part of libdaemon.
+#
+# Copyright 2003-2008 Lennart Poettering
+#
+# 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.
+
+VERSION=1.9
+
+run_versioned() {
+    local P
+    local V
+
+    V=$(echo "$2" | sed -e 's,\.,,g')
+
+    if [ -e "`which $1$V 2> /dev/null`" ] ; then
+        P="$1$V"
+    else
+	if [ -e "`which $1-$2 2> /dev/null`" ] ; then
+            P="$1-$2"
+	else
+	    P="$1"
+	fi
+    fi
+
+    shift 2
+    "$P" "$@"
+}
+
+set -ex
+
+if [ "x$1" = "xam" ] ; then
+    run_versioned automake "$VERSION" -a -c --foreign
+    ./config.status
+else
+    rm -rf autom4te.cache
+    rm -f config.cache
+
+    touch config.rpath
+    test "x$LIBTOOLIZE" = "x" && LIBTOOLIZE=libtoolize
+
+    mkdir -p common
+
+    "$LIBTOOLIZE" -c --force
+    run_versioned aclocal "$VERSION" -I m4
+    run_versioned autoconf 2.59 -Wall
+    run_versioned autoheader 2.59
+    run_versioned automake "$VERSION" -a -c --foreign
+
+    if test "x$NOCONFIGURE" = "x"; then
+        CFLAGS="-g -O0" ./configure --sysconfdir=/etc --localstatedir=/var "$@"
+        make clean
+    fi
+fi
diff --git a/libdaemon/config.h b/libdaemon/config.h
new file mode 100644
index 0000000..f3aede4
--- /dev/null
+++ b/libdaemon/config.h
@@ -0,0 +1,209 @@
+/* config.h.  Generated from config.h.in by configure.  */
+/* config.h.in.  Generated from configure.ac by autoheader.  */
+
+/* Define to 1 if you have the `asprintf' function. */
+#define HAVE_ASPRINTF 1
+
+/* Define to 1 if you have the <dlfcn.h> header file. */
+#define HAVE_DLFCN_H 1
+
+/* Define to 1 if you don't have `vprintf' but do have `_doprnt.' */
+/* #undef HAVE_DOPRNT */
+
+/* Define to 1 if you have the `dup2' function. */
+#define HAVE_DUP2 1
+
+/* Define to 1 if you have the <fcntl.h> header file. */
+#define HAVE_FCNTL_H 1
+
+/* Define to 1 if you have the `fork' function. */
+#define HAVE_FORK 1
+
+/* Define to 1 if you have the <inttypes.h> header file. */
+#define HAVE_INTTYPES_H 1
+
+/* Define to 1 if you have the <limits.h> header file. */
+#define HAVE_LIMITS_H 1
+
+/* Define to 1 if you have the <memory.h> header file. */
+#define HAVE_MEMORY_H 1
+
+/* Define to 1 if you have the `memset' function. */
+#define HAVE_MEMSET 1
+
+/* Define to 1 if you have the `select' function. */
+#define HAVE_SELECT 1
+
+/* Define to 1 if you have the <stdint.h> header file. */
+#define HAVE_STDINT_H 1
+
+/* Define to 1 if you have the <stdlib.h> header file. */
+#define HAVE_STDLIB_H 1
+
+/* Define to 1 if you have the `strerror' function. */
+#define HAVE_STRERROR 1
+
+/* Define to 1 if you have the <strings.h> header file. */
+#define HAVE_STRINGS_H 1
+
+/* Define to 1 if you have the <string.h> header file. */
+#define HAVE_STRING_H 1
+
+/* Define to 1 if you have the `strrchr' function. */
+#define HAVE_STRRCHR 1
+
+/* Define to 1 if you have the <syslog.h> header file. */
+#define HAVE_SYSLOG_H 1
+
+/* Define to 1 if you have the <sys/ioctl.h> header file. */
+#define HAVE_SYS_IOCTL_H 1
+
+/* Define to 1 if you have the <sys/select.h> header file. */
+#define HAVE_SYS_SELECT_H 1
+
+/* Define to 1 if you have the <sys/socket.h> header file. */
+#define HAVE_SYS_SOCKET_H 1
+
+/* Define to 1 if you have the <sys/stat.h> header file. */
+#define HAVE_SYS_STAT_H 1
+
+/* Define to 1 if you have the <sys/time.h> header file. */
+#define HAVE_SYS_TIME_H 1
+
+/* Define to 1 if you have the <sys/types.h> header file. */
+#define HAVE_SYS_TYPES_H 1
+
+/* Define to 1 if you have <sys/wait.h> that is POSIX.1 compatible. */
+#define HAVE_SYS_WAIT_H 1
+
+/* Define to 1 if you have the <unistd.h> header file. */
+#define HAVE_UNISTD_H 1
+
+/* Define to 1 if you have the `vfork' function. */
+#define HAVE_VFORK 1
+
+/* Define to 1 if you have the <vfork.h> header file. */
+/* #undef HAVE_VFORK_H */
+
+/* Define to 1 if you have the `vprintf' function. */
+#define HAVE_VPRINTF 1
+
+/* Define to 1 if `fork' works. */
+#define HAVE_WORKING_FORK 1
+
+/* Define to 1 if `vfork' works. */
+#define HAVE_WORKING_VFORK 1
+
+/* Define to the sub-directory in which libtool stores uninstalled libraries.
+   */
+#define LT_OBJDIR ".libs/"
+
+/* Define to 1 if assertions should be disabled. */
+/* #undef NDEBUG */
+
+/* Name of package */
+#define PACKAGE "libdaemon"
+
+/* Define to the address where bug reports for this package should be sent. */
+#define PACKAGE_BUGREPORT "mzqnrzba (at) 0pointer (dot) de"
+
+/* Define to the full name of this package. */
+#define PACKAGE_NAME "libdaemon"
+
+/* Define to the full name and version of this package. */
+#define PACKAGE_STRING "libdaemon 0.14"
+
+/* Define to the one symbol short name of this package. */
+#define PACKAGE_TARNAME "libdaemon"
+
+/* Define to the home page for this package. */
+#define PACKAGE_URL ""
+
+/* Define to the version of this package. */
+#define PACKAGE_VERSION "0.14"
+
+/* Define as the return type of signal handlers (`int' or `void'). */
+#define RETSIGTYPE void
+
+/* Define to the type of arg 1 for `select'. */
+#define SELECT_TYPE_ARG1 int
+
+/* Define to the type of args 2, 3 and 4 for `select'. */
+#define SELECT_TYPE_ARG234 (fd_set *)
+
+/* Define to the type of arg 5 for `select'. */
+#define SELECT_TYPE_ARG5 (struct timeval *)
+
+/* Define to 1 if the `setpgrp' function takes no argument. */
+#define SETPGRP_VOID 1
+
+/* Define to 1 if you have the ANSI C header files. */
+#define STDC_HEADERS 1
+
+/* Define to 1 if you can safely include both <sys/time.h> and <time.h>. */
+#define TIME_WITH_SYS_TIME 1
+
+/* Enable extensions on AIX 3, Interix.  */
+#ifndef _ALL_SOURCE
+# define _ALL_SOURCE 1
+#endif
+/* Enable GNU extensions on systems that have them.  */
+#ifndef _GNU_SOURCE
+# define _GNU_SOURCE 1
+#endif
+/* Enable threading extensions on Solaris.  */
+#ifndef _POSIX_PTHREAD_SEMANTICS
+# define _POSIX_PTHREAD_SEMANTICS 1
+#endif
+/* Enable extensions on HP NonStop.  */
+#ifndef _TANDEM_SOURCE
+# define _TANDEM_SOURCE 1
+#endif
+/* Enable general extensions on Solaris.  */
+#ifndef __EXTENSIONS__
+# define __EXTENSIONS__ 1
+#endif
+
+
+/* Version number of package */
+#define VERSION "0.14"
+
+/* Enable large inode numbers on Mac OS X 10.5.  */
+#ifndef _DARWIN_USE_64_BIT_INODE
+# define _DARWIN_USE_64_BIT_INODE 1
+#endif
+
+/* Number of bits in a file offset, on hosts where this is settable. */
+/* #undef _FILE_OFFSET_BITS */
+
+/* Define for large files, on AIX-style hosts. */
+/* #undef _LARGE_FILES */
+
+/* Define to 1 if on MINIX. */
+/* #undef _MINIX */
+
+/* Define to 2 if the system does not provide POSIX.1 features except with
+   this defined. */
+/* #undef _POSIX_1_SOURCE */
+
+/* Define to 1 if you need to in order for `stat' and other things to work. */
+/* #undef _POSIX_SOURCE */
+
+/* Define to empty if `const' does not conform to ANSI C. */
+/* #undef const */
+
+/* Define to `int' if <sys/types.h> does not define. */
+/* #undef mode_t */
+
+/* Define to `int' if <sys/types.h> does not define. */
+/* #undef pid_t */
+
+/* Define to `unsigned int' if <sys/types.h> does not define. */
+/* #undef size_t */
+
+/* Define as `fork' if `vfork' does not work. */
+/* #undef vfork */
+
+/* Define to empty if the keyword `volatile' does not work. Warning: valid
+   code using `volatile' can become incorrect without. Disable with care. */
+/* #undef volatile */
diff --git a/libdaemon/configure.ac b/libdaemon/configure.ac
new file mode 100644
index 0000000..c659e37
--- /dev/null
+++ b/libdaemon/configure.ac
@@ -0,0 +1,94 @@
+# -*- Autoconf -*-
+# Process this file with autoconf to produce a configure script.
+
+# This file is part of libdaemon.
+#
+# Copyright 2003-2008 Lennart Poettering
+#
+# 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.
+
+AC_PREREQ(2.63)
+
+AC_INIT([libdaemon],[0.14],[mzqnrzba (at) 0pointer (dot) de])
+AC_CONFIG_SRCDIR([libdaemon/dfork.c])
+AC_CONFIG_HEADERS([config.h])
+AC_CONFIG_MACRO_DIR([m4])
+
+AM_INIT_AUTOMAKE([foreign 1.10 -Wall])
+
+AC_SUBST(PACKAGE_URL, [http://0pointer.de/lennart/projects/libdaemon/])
+
+AC_SUBST(LIBDAEMON_VERSION_INFO, [5:0:5])
+
+if type -p stow > /dev/null && test -d /usr/local/stow ; then
+   AC_MSG_NOTICE([*** Found /usr/local/stow: default install prefix set to /usr/local/stow/${PACKAGE_NAME}-${PACKAGE_VERSION} ***])
+   ac_default_prefix="/usr/local/stow/${PACKAGE_NAME}-${PACKAGE_VERSION}"
+fi
+
+m4_ifdef([AM_SILENT_RULES], [AM_SILENT_RULES([yes])])
+
+# Checks for programs.
+AC_PROG_CC
+AC_PROG_CC_C99 dnl This enable gnu99 if present
+AM_PROG_CC_C_O
+
+AC_USE_SYSTEM_EXTENSIONS
+
+AC_PROG_INSTALL
+AC_PROG_LN_S
+AC_PROG_MAKE_SET
+AC_PROG_LIBTOOL
+
+CC_CHECK_CFLAGS_APPEND([-pipe -Wall -W -Wextra -pedantic -Wformat -Wold-style-definition -Wdeclaration-after-statement -Wfloat-equal -Wmissing-declarations -Wmissing-prototypes -Wstrict-prototypes -Wredundant-decls -Wmissing-noreturn -Wshadow -Wendif-labels -Wpointer-arith -Wbad-function-cast -Wcast-qual -Wcast-align -Wwrite-strings -Winline -Wno-unused-parameter -Wstrict-aliasing])
+
+# Checks for header files.
+AC_HEADER_ASSERT
+AC_HEADER_STDC
+AC_CHECK_HEADERS([fcntl.h limits.h stdlib.h string.h syslog.h unistd.h sys/ioctl.h sys/time.h])
+AC_HEADER_SYS_WAIT
+
+# Checks for typedefs, structures, and compiler characteristics.
+AC_C_CONST
+AC_TYPE_PID_T
+AC_HEADER_TIME
+AC_C_VOLATILE
+
+# Checks for library functions.
+AC_FUNC_FORK
+AC_FUNC_SELECT_ARGTYPES
+AC_FUNC_VPRINTF
+AC_CHECK_FUNCS([select strerror dup2 memset strrchr asprintf])
+AC_TYPE_MODE_T
+AC_FUNC_SETPGRP
+AC_TYPE_SIGNAL
+AC_TYPE_SIZE_T
+
+AC_SYS_LARGEFILE
+
+CC_NOUNDEFINED
+
+ZP_LYNX_DOC
+
+AC_ARG_ENABLE(examples,
+       AS_HELP_STRING([--disable-examples], [Don't build examples during make]),,
+       enable_examples="yes")
+AM_CONDITIONAL(EXAMPLES, [test "$enable_examples" = "yes"])
+
+AC_CONFIG_FILES([libdaemon/Makefile Makefile doc/Makefile doc/README.html doc/doxygen.conf examples/Makefile pkgconfig/libdaemon.pc pkgconfig/libdaemon-uninstalled.pc])
+AC_OUTPUT
diff --git a/libdaemon/doc/Makefile.am b/libdaemon/doc/Makefile.am
new file mode 100644
index 0000000..140ad1a
--- /dev/null
+++ b/libdaemon/doc/Makefile.am
@@ -0,0 +1,47 @@
+# This file is part of libdaemon.
+#
+# Copyright 2003-2008 Lennart Poettering
+#
+# 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.
+
+dist_html_DATA = README.html style.css
+EXTRA_DIST = README.html.in
+
+MAINTAINERCLEANFILES = README.html
+CLEANFILES =
+
+doxygen: doxygen.conf
+	doxygen doxygen.conf
+
+maintainer-clean-local:
+	rm -rf reference
+
+if USE_LYNX
+dist_doc_DATA = README
+MAINTAINERCLEANFILES += README
+README: README.html
+	lynx --dump $^ | sed 's,file://localhost/.*/doc/README.html,README,' | sed 's,file://localhost/.*/doc/reference/,reference/,' > $@
+
+CLEANFILES += README
+endif
+
+tidy: README.html
+	tidy -e < README.html
+
+.PHONY: doxygen tidy
diff --git a/libdaemon/doc/README.html.in b/libdaemon/doc/README.html.in
new file mode 100644
index 0000000..2c2cccd
--- /dev/null
+++ b/libdaemon/doc/README.html.in
@@ -0,0 +1,177 @@
+<?xml version="1.0" encoding="iso-8859-15"?> <!-- -*-html-helper-*- -->
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+
+<head>
+<title>libdaemon @PACKAGE_VERSION@</title>
+<link rel="stylesheet" type="text/css" href="style.css" />
+</head>
+
+<body>
+<h1><a name="top">libdaemon @PACKAGE_VERSION@</a></h1>
+
+<p><i>Copyright 2003-2009 Lennart Poettering &lt;@PACKAGE_BUGREPORT@&gt;</i></p>
+
+<ul class="toc">
+    <li><a href="#license">License</a></li>
+    <li><a href="#news">News</a></li>
+    <li><a href="#overview">Overview</a></li>
+    <li><a href="#status">Current Status</a></li>
+    <li><a href="#documentation">Documentation</a></li>
+    <li><a href="#requirements">Requirements</a></li>
+    <li><a href="#installation">Installation</a></li>
+    <li><a href="#acks">Acknowledgements</a></li>
+    <li><a href="#download">Download</a></li>
+</ul>
+
+<h2><a name="license">License</a></h2>
+
+<p>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:</p>
+
+<p>The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.</p>
+
+<p>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.</p>
+
+<h2><a name="news">News</a></h2>
+
+<div class="news-date">Sun Aug 29 2012: </div>
+<p class="news-text"><a href="@PACKAGE_URL@libdaemon-0.14.tar.gz">Version 0.15</a> license change from LGPL to MIT</p>
+
+<div class="news-date">Sun Oct 18 2009: </div>
+<p class="news-text"><a href="@PACKAGE_URL@libdaemon-0.14.tar.gz">Version 0.14</a> released; changes include: add <tt>daemon_set_verbosity()</tt> call; numerous updates</p>
+
+<div class="news-date">Tue Jul 29 2008: </div>
+<p class="news-text"><a href="@PACKAGE_URL@libdaemon-0.13.tar.gz">Version 0.13</a> released; changes include: add <tt>daemon_reset_sigs()</tt> and <tt>daemon_unblock_sigs()</tt> calls for resetting signal handlers to sensible states; improve error handling.</p>
+
+<div class="news-date">Tue Jul 10 2007: </div>
+<p class="news-text"><a href="@PACKAGE_URL@libdaemon-0.12.tar.gz">Version 0.12</a> released; changes include: make <tt>daemon_close_all()</tt> actually work properly.</p>
+
+<div class="news-date">Fri Jun 22 2007: </div>
+<p class="news-text"><a href="@PACKAGE_URL@libdaemon-0.11.tar.gz">Version 0.11</a> released; changes include: automatically detect whether lynx is installed; properly set <tt>errno</tt> on every error condition; add new function <tt>daemon_close_all()</tt> to close all open file descriptors except a given set; add <tt>daemon_logv()</tt>, which is identical to <tt>daemon_log()</tt>, but takes a <tt>va_list</tt> argument; add <tt>daemon_execv()</tt> in similar style; other fixes</p>
+
+<div class="news-date">Thu Nov 24 2005: </div>
+<p class="news-text"><a href="@PACKAGE_URL@libdaemon-0.10.tar.gz">Version 0.10</a> released; changes include: make logging compatible with daemons running in a <tt>chroot()</tt> environment</p>
+
+<div class="news-date">Fri Nov 18 2005: </div>
+<p class="news-text"><a href="@PACKAGE_URL@libdaemon-0.9.tar.gz">Version 0.9</a> released; changes include: portability (FreeBSD, NetBSD, OpenBSD, Darwin, Solaris, Cygwin); some minor header file cleanups; fix access mode of PID files; other cleanups; license change from GPL to LGPL</p>
+
+<div class="news-date">Sat Jun 4 2005: </div>
+<p class="news-text"><a href="@PACKAGE_URL@libdaemon-0.8.tar.gz">Version 0.8</a> released; changes include: proper PID file locking</p>
+
+<div class="news-date">Sat Dec 18 2004: </div>
+<p class="news-text"><a href="@PACKAGE_URL@libdaemon-0.7.tar.gz">Version 0.7</a> released; changes include: minor cleanups; C++ compatibility; gcc 2.95 compatiblity</p>
+
+<div class="news-date">Wed Apr 7 2004: </div>
+<p class="news-text"><a href="@PACKAGE_URL@libdaemon-0.6.tar.gz">Version 0.6</a> released; changes include: backgrounding fixes, minor other stuff</p>
+
+<div class="news-date">Tue Feb 10 2004: </div>
+<p class="news-text"><a href="@PACKAGE_URL@libdaemon-0.5.tar.gz">Version 0.5</a> released; changes include: signal handling fix, forking fix</p>
+
+<div class="news-date">Sat Jan 10 2004: </div>
+<p class="news-text"><a href="@PACKAGE_URL@libdaemon-0.4.tar.gz">Version 0.4</a> released; changes include: new module <tt>dexec.c</tt>; added <tt>pkg-config</tt> support.</p>
+
+<div class="news-date">Mon Oct 20 2003: </div>
+<p class="news-text"><a href="@PACKAGE_URL@libdaemon-0.3.tar.gz">Version 0.3</a> released; changes include: documentation update, build fixes, RPM spec file added, added new function int <tt>daemon_pid_file_kill_wait()</tt>.</p>
+
+<div class="news-date">Thu July 10 2003: </div>
+<p class="news-text"><a href="@PACKAGE_URL@libdaemon-0.2.tar.gz">Version 0.2</a> released; changes include: ugly umask error fix, documentation update</p>
+
+<div class="news-date">Mon July 7 2003: </div>
+<p class="news-text"><a href="@PACKAGE_URL@libdaemon-0.1.tar.gz">Version 0.1</a> released</p>
+
+<h2><a name="overview">Overview</a></h2>
+
+<p><tt>libdaemon</tt> is a lightweight C library that eases the writing of UNIX
+daemons. It consists of the following parts:</p>
+
+<ul>
+  <li>A wrapper around <tt>fork()</tt> which does the correct
+  daemonization procedure of a process</li>
+
+  <li>A wrapper around <tt>syslog()</tt> for simpler and compatible
+  log output to Syslog or STDERR</li>
+
+  <li>An API for writing PID files</li>
+
+  <li>An API for serializing UNIX signals into a pipe for
+  usage with <tt>select()</tt> or <tt>poll()</tt></li>
+
+  <li>An API for running subprocesses with STDOUT and STDERR redirected to syslog.</li>
+</ul>
+
+<p>APIs like these are used in most daemon software
+available. It is not that simple to get it done right and code
+duplication is not a goal.</p>
+
+<p><tt>libdaemon</tt> is currently used by <a
+href="http://0pointer.de/lennart/projects/ifplugd/"><tt>ifplugd</tt></a>,
+<a
+href="http://freedesktop.org/Software/Avahi">Avahi</a>,
+<a
+href="http://0pointer.de/lennart/projects/ivam2/"><tt>ivam2</tt></a>,
+<a href="http://gentoo.ovibes.net/nautilus-share/mediawiki-1.4.4/index.php/Accueil">Nautilus-Share</a>
+and <a
+href="http://0pointer.de/lennart/projects/aeswepd/"><tt>aeswepd</tt></a>.</p>
+
+<h2><a name="status">Current Status</a></h2>
+
+<p>Version @PACKAGE_VERSION@ is feature complete.</p>
+
+<h2><a name="documentation">Documentation</a></h2>
+
+<p>An extensive API reference is <a
+href="reference/html/index.html">available</a></p>
+
+<h2><a name="requirements">Requirements</a></h2>
+
+<p><tt>libdaemon</tt> was developed and tested on Debian GNU/Linux
+"testing" from July 2003, it should work on most other Linux
+distributions (and some Unix versions) since it uses GNU Autoconf and
+GNU libtool for source code configuration and shared library
+management.</p>
+
+<p><tt>libdaemon</tt> is known to work on modern Linux systems, FreeBSD, NetBSD, OpenBSD, Darwin, Solaris and Windows/Cygwin.</p>
+
+<h2><a name="installation">Installation</a></h2>
+
+<p>As this package is made with the GNU autotools you should run
+<tt>./configure</tt> inside the distribution directory for configuring
+the source tree. After that you should run <tt>make</tt> for
+compilation and <tt>make install</tt> (as root) for installation of
+<tt>libdaemon</tt>.</p>
+
+<p>Please use <tt>gmake</tt> instead of traditional <tt>make</tt> for compilation on non-Linux systems.</p>
+
+<h2><a name="acks">Acknowledgements</a></h2>
+
+<p>Sebastien Estienne, for a lot of portability work.</p>
+
+<h2><a name="download">Download</a></h2>
+
+<p>The newest release is always available from <a href="@PACKAGE_URL@">@PACKAGE_URL@</a></p>
+
+<p>Get <tt>libdaemon</tt>'s development sources from the <a href="http://git.or.cz/">GIT</a> <a href="git://git.0pointer.de/libdaemon">repository</a> (<a href="http://git.0pointer.de/?p=libdaemon.git">gitweb</a>): </p>
+
+<pre>git clone git://git.0pointer.de/libdaemon</pre>
+
+<p>You may find an up to date Debian package of <tt>libdaemon</tt> on the <a href="http://packages.debian.org/libdaemon0">Debian package repository</a>.</p>
+
+<p>If you want to be notified whenever I release a new version of this software use the subscription feature of <a href="http://freshmeat.net/projects/libdaemon/">Freshmeat</a>.</p>
+
+<hr/>
+<address class="grey">Lennart Poettering &lt;@PACKAGE_BUGREPORT@&gt;, October 2009</address>
+
+</body>
+</html>
diff --git a/libdaemon/doc/doxygen.conf.in b/libdaemon/doc/doxygen.conf.in
new file mode 100644
index 0000000..cace988
--- /dev/null
+++ b/libdaemon/doc/doxygen.conf.in
@@ -0,0 +1,1161 @@
+# Doxyfile 1.3.9.1
+
+# This file describes the settings to be used by the documentation system
+# doxygen (www.doxygen.org) for a project
+#
+# All text after a hash (#) is considered a comment and will be ignored
+# The format is:
+#       TAG = value [value, ...]
+# For lists items can also be appended using:
+#       TAG += value [value, ...]
+# Values that contain spaces should be placed between quotes (" ")
+
+#---------------------------------------------------------------------------
+# Project related configuration options
+#---------------------------------------------------------------------------
+
+# The PROJECT_NAME tag is a single word (or a sequence of words surrounded 
+# by quotes) that should identify the project.
+
+PROJECT_NAME           = @PACKAGE_NAME@
+
+# The PROJECT_NUMBER tag can be used to enter a project or revision number. 
+# This could be handy for archiving the generated documentation or 
+# if some version control system is used.
+
+PROJECT_NUMBER         = @PACKAGE_VERSION@
+
+# The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) 
+# base path where the generated documentation will be put. 
+# If a relative path is entered, it will be relative to the location 
+# where doxygen was started. If left blank the current directory will be used.
+
+OUTPUT_DIRECTORY       = reference
+
+# If the CREATE_SUBDIRS tag is set to YES, then doxygen will create 
+# 4096 sub-directories (in 2 levels) under the output directory of each output 
+# format and will distribute the generated files over these directories. 
+# Enabling this option can be useful when feeding doxygen a huge amount of source 
+# files, where putting all generated files in the same directory would otherwise 
+# cause performance problems for the file system.
+
+CREATE_SUBDIRS         = NO
+
+# The OUTPUT_LANGUAGE tag is used to specify the language in which all 
+# documentation generated by doxygen is written. Doxygen will use this 
+# information to generate all constant output in the proper language. 
+# The default language is English, other supported languages are: 
+# Brazilian, Catalan, Chinese, Chinese-Traditional, Croatian, Czech, Danish, 
+# Dutch, Finnish, French, German, Greek, Hungarian, Italian, Japanese, 
+# Japanese-en (Japanese with English messages), Korean, Korean-en, Norwegian, 
+# Polish, Portuguese, Romanian, Russian, Serbian, Slovak, Slovene, Spanish, 
+# Swedish, and Ukrainian.
+
+OUTPUT_LANGUAGE        = English
+
+# This tag can be used to specify the encoding used in the generated output. 
+# The encoding is not always determined by the language that is chosen, 
+# but also whether or not the output is meant for Windows or non-Windows users. 
+# In case there is a difference, setting the USE_WINDOWS_ENCODING tag to YES 
+# forces the Windows encoding (this is the default for the Windows binary), 
+# whereas setting the tag to NO uses a Unix-style encoding (the default for 
+# all platforms other than Windows).
+
+USE_WINDOWS_ENCODING   = NO
+
+# If the BRIEF_MEMBER_DESC tag is set to YES (the default) Doxygen will 
+# include brief member descriptions after the members that are listed in 
+# the file and class documentation (similar to JavaDoc). 
+# Set to NO to disable this.
+
+BRIEF_MEMBER_DESC      = YES
+
+# If the REPEAT_BRIEF tag is set to YES (the default) Doxygen will prepend 
+# the brief description of a member or function before the detailed description. 
+# Note: if both HIDE_UNDOC_MEMBERS and BRIEF_MEMBER_DESC are set to NO, the 
+# brief descriptions will be completely suppressed.
+
+REPEAT_BRIEF           = YES
+
+# This tag implements a quasi-intelligent brief description abbreviator 
+# that is used to form the text in various listings. Each string 
+# in this list, if found as the leading text of the brief description, will be 
+# stripped from the text and the result after processing the whole list, is used 
+# as the annotated text. Otherwise, the brief description is used as-is. If left 
+# blank, the following values are used ("$name" is automatically replaced with the 
+# name of the entity): "The $name class" "The $name widget" "The $name file" 
+# "is" "provides" "specifies" "contains" "represents" "a" "an" "the"
+
+ABBREVIATE_BRIEF       = 
+
+# If the ALWAYS_DETAILED_SEC and REPEAT_BRIEF tags are both set to YES then 
+# Doxygen will generate a detailed section even if there is only a brief 
+# description.
+
+ALWAYS_DETAILED_SEC    = NO
+
+# If the INLINE_INHERITED_MEMB tag is set to YES, doxygen will show all inherited 
+# members of a class in the documentation of that class as if those members were 
+# ordinary class members. Constructors, destructors and assignment operators of 
+# the base classes will not be shown.
+
+INLINE_INHERITED_MEMB  = NO
+
+# If the FULL_PATH_NAMES tag is set to YES then Doxygen will prepend the full 
+# path before files name in the file list and in the header files. If set 
+# to NO the shortest path that makes the file name unique will be used.
+
+FULL_PATH_NAMES        = NO
+
+# If the FULL_PATH_NAMES tag is set to YES then the STRIP_FROM_PATH tag 
+# can be used to strip a user-defined part of the path. Stripping is 
+# only done if one of the specified strings matches the left-hand part of 
+# the path. The tag can be used to show relative paths in the file list. 
+# If left blank the directory from which doxygen is run is used as the 
+# path to strip.
+
+STRIP_FROM_PATH        = 
+
+# The STRIP_FROM_INC_PATH tag can be used to strip a user-defined part of 
+# the path mentioned in the documentation of a class, which tells 
+# the reader which header file to include in order to use a class. 
+# If left blank only the name of the header file containing the class 
+# definition is used. Otherwise one should specify the include paths that 
+# are normally passed to the compiler using the -I flag.
+
+STRIP_FROM_INC_PATH    = 
+
+# If the SHORT_NAMES tag is set to YES, doxygen will generate much shorter 
+# (but less readable) file names. This can be useful is your file systems 
+# doesn't support long names like on DOS, Mac, or CD-ROM.
+
+SHORT_NAMES            = NO
+
+# If the JAVADOC_AUTOBRIEF tag is set to YES then Doxygen 
+# will interpret the first line (until the first dot) of a JavaDoc-style 
+# comment as the brief description. If set to NO, the JavaDoc 
+# comments will behave just like the Qt-style comments (thus requiring an 
+# explicit @brief command for a brief description.
+
+JAVADOC_AUTOBRIEF      = YES
+
+# The MULTILINE_CPP_IS_BRIEF tag can be set to YES to make Doxygen 
+# treat a multi-line C++ special comment block (i.e. a block of //! or /// 
+# comments) as a brief description. This used to be the default behaviour. 
+# The new default is to treat a multi-line C++ comment block as a detailed 
+# description. Set this tag to YES if you prefer the old behaviour instead.
+
+MULTILINE_CPP_IS_BRIEF = NO
+
+# If the DETAILS_AT_TOP tag is set to YES then Doxygen 
+# will output the detailed description near the top, like JavaDoc.
+# If set to NO, the detailed description appears after the member 
+# documentation.
+
+DETAILS_AT_TOP         = NO
+
+# If the INHERIT_DOCS tag is set to YES (the default) then an undocumented 
+# member inherits the documentation from any documented member that it 
+# re-implements.
+
+INHERIT_DOCS           = YES
+
+# If member grouping is used in the documentation and the DISTRIBUTE_GROUP_DOC 
+# tag is set to YES, then doxygen will reuse the documentation of the first 
+# member in the group (if any) for the other members of the group. By default 
+# all members of a group must be documented explicitly.
+
+DISTRIBUTE_GROUP_DOC   = NO
+
+# The TAB_SIZE tag can be used to set the number of spaces in a tab. 
+# Doxygen uses this value to replace tabs by spaces in code fragments.
+
+TAB_SIZE               = 4
+
+# This tag can be used to specify a number of aliases that acts 
+# as commands in the documentation. An alias has the form "name=value". 
+# For example adding "sideeffect=\par Side Effects:\n" will allow you to 
+# put the command \sideeffect (or @sideeffect) in the documentation, which 
+# will result in a user-defined paragraph with heading "Side Effects:". 
+# You can put \n's in the value part of an alias to insert newlines.
+
+ALIASES                = 
+
+# Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C sources 
+# only. Doxygen will then generate output that is more tailored for C. 
+# For instance, some of the names that are used will be different. The list 
+# of all members will be omitted, etc.
+
+OPTIMIZE_OUTPUT_FOR_C  = YES
+
+# Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java sources 
+# only. Doxygen will then generate output that is more tailored for Java. 
+# For instance, namespaces will be presented as packages, qualified scopes 
+# will look different, etc.
+
+OPTIMIZE_OUTPUT_JAVA   = NO
+
+# Set the SUBGROUPING tag to YES (the default) to allow class member groups of 
+# the same type (for instance a group of public functions) to be put as a 
+# subgroup of that type (e.g. under the Public Functions section). Set it to 
+# NO to prevent subgrouping. Alternatively, this can be done per class using 
+# the \nosubgrouping command.
+
+SUBGROUPING            = YES
+
+#---------------------------------------------------------------------------
+# Build related configuration options
+#---------------------------------------------------------------------------
+
+# If the EXTRACT_ALL tag is set to YES doxygen will assume all entities in 
+# documentation are documented, even if no documentation was available. 
+# Private class members and static file members will be hidden unless 
+# the EXTRACT_PRIVATE and EXTRACT_STATIC tags are set to YES
+
+EXTRACT_ALL            = YES
+
+# If the EXTRACT_PRIVATE tag is set to YES all private members of a class 
+# will be included in the documentation.
+
+EXTRACT_PRIVATE        = NO
+
+# If the EXTRACT_STATIC tag is set to YES all static members of a file 
+# will be included in the documentation.
+
+EXTRACT_STATIC         = NO
+
+# If the EXTRACT_LOCAL_CLASSES tag is set to YES classes (and structs) 
+# defined locally in source files will be included in the documentation. 
+# If set to NO only classes defined in header files are included.
+
+EXTRACT_LOCAL_CLASSES  = NO
+
+# This flag is only useful for Objective-C code. When set to YES local 
+# methods, which are defined in the implementation section but not in 
+# the interface are included in the documentation. 
+# If set to NO (the default) only methods in the interface are included.
+
+EXTRACT_LOCAL_METHODS  = NO
+
+# If the HIDE_UNDOC_MEMBERS tag is set to YES, Doxygen will hide all 
+# undocumented members of documented classes, files or namespaces. 
+# If set to NO (the default) these members will be included in the 
+# various overviews, but no documentation section is generated. 
+# This option has no effect if EXTRACT_ALL is enabled.
+
+HIDE_UNDOC_MEMBERS     = YES
+
+# If the HIDE_UNDOC_CLASSES tag is set to YES, Doxygen will hide all 
+# undocumented classes that are normally visible in the class hierarchy. 
+# If set to NO (the default) these classes will be included in the various 
+# overviews. This option has no effect if EXTRACT_ALL is enabled.
+
+HIDE_UNDOC_CLASSES     = YES
+
+# If the HIDE_FRIEND_COMPOUNDS tag is set to YES, Doxygen will hide all 
+# friend (class|struct|union) declarations. 
+# If set to NO (the default) these declarations will be included in the 
+# documentation.
+
+HIDE_FRIEND_COMPOUNDS  = NO
+
+# If the HIDE_IN_BODY_DOCS tag is set to YES, Doxygen will hide any 
+# documentation blocks found inside the body of a function. 
+# If set to NO (the default) these blocks will be appended to the 
+# function's detailed documentation block.
+
+HIDE_IN_BODY_DOCS      = NO
+
+# The INTERNAL_DOCS tag determines if documentation 
+# that is typed after a \internal command is included. If the tag is set 
+# to NO (the default) then the documentation will be excluded. 
+# Set it to YES to include the internal documentation.
+
+INTERNAL_DOCS          = NO
+
+# If the CASE_SENSE_NAMES tag is set to NO then Doxygen will only generate 
+# file names in lower-case letters. If set to YES upper-case letters are also 
+# allowed. This is useful if you have classes or files whose names only differ 
+# in case and if your file system supports case sensitive file names. Windows 
+# and Mac users are advised to set this option to NO.
+
+CASE_SENSE_NAMES       = YES
+
+# If the HIDE_SCOPE_NAMES tag is set to NO (the default) then Doxygen 
+# will show members with their full class and namespace scopes in the 
+# documentation. If set to YES the scope will be hidden.
+
+HIDE_SCOPE_NAMES       = NO
+
+# If the SHOW_INCLUDE_FILES tag is set to YES (the default) then Doxygen 
+# will put a list of the files that are included by a file in the documentation 
+# of that file.
+
+SHOW_INCLUDE_FILES     = YES
+
+# If the INLINE_INFO tag is set to YES (the default) then a tag [inline] 
+# is inserted in the documentation for inline members.
+
+INLINE_INFO            = YES
+
+# If the SORT_MEMBER_DOCS tag is set to YES (the default) then doxygen 
+# will sort the (detailed) documentation of file and class members 
+# alphabetically by member name. If set to NO the members will appear in 
+# declaration order.
+
+SORT_MEMBER_DOCS       = YES
+
+# If the SORT_BRIEF_DOCS tag is set to YES then doxygen will sort the 
+# brief documentation of file, namespace and class members alphabetically 
+# by member name. If set to NO (the default) the members will appear in 
+# declaration order.
+
+SORT_BRIEF_DOCS        = NO
+
+# If the SORT_BY_SCOPE_NAME tag is set to YES, the class list will be 
+# sorted by fully-qualified names, including namespaces. If set to 
+# NO (the default), the class list will be sorted only by class name, 
+# not including the namespace part. 
+# Note: This option is not very useful if HIDE_SCOPE_NAMES is set to YES.
+# Note: This option applies only to the class list, not to the 
+# alphabetical list.
+
+SORT_BY_SCOPE_NAME     = NO
+
+# The GENERATE_TODOLIST tag can be used to enable (YES) or 
+# disable (NO) the todo list. This list is created by putting \todo 
+# commands in the documentation.
+
+GENERATE_TODOLIST      = NO
+
+# The GENERATE_TESTLIST tag can be used to enable (YES) or 
+# disable (NO) the test list. This list is created by putting \test 
+# commands in the documentation.
+
+GENERATE_TESTLIST      = NO
+
+# The GENERATE_BUGLIST tag can be used to enable (YES) or 
+# disable (NO) the bug list. This list is created by putting \bug 
+# commands in the documentation.
+
+GENERATE_BUGLIST       = NO
+
+# The GENERATE_DEPRECATEDLIST tag can be used to enable (YES) or 
+# disable (NO) the deprecated list. This list is created by putting 
+# \deprecated commands in the documentation.
+
+GENERATE_DEPRECATEDLIST= YES
+
+# The ENABLED_SECTIONS tag can be used to enable conditional 
+# documentation sections, marked by \if sectionname ... \endif.
+
+ENABLED_SECTIONS       = 
+
+# The MAX_INITIALIZER_LINES tag determines the maximum number of lines 
+# the initial value of a variable or define consists of for it to appear in 
+# the documentation. If the initializer consists of more lines than specified 
+# here it will be hidden. Use a value of 0 to hide initializers completely. 
+# The appearance of the initializer of individual variables and defines in the 
+# documentation can be controlled using \showinitializer or \hideinitializer 
+# command in the documentation regardless of this setting.
+
+MAX_INITIALIZER_LINES  = 30
+
+# Set the SHOW_USED_FILES tag to NO to disable the list of files generated 
+# at the bottom of the documentation of classes and structs. If set to YES the 
+# list will mention the files that were used to generate the documentation.
+
+SHOW_USED_FILES        = YES
+
+# If the sources in your project are distributed over multiple directories 
+# then setting the SHOW_DIRECTORIES tag to YES will show the directory hierarchy 
+# in the documentation.
+
+SHOW_DIRECTORIES       = NO
+
+#---------------------------------------------------------------------------
+# configuration options related to warning and progress messages
+#---------------------------------------------------------------------------
+
+# The QUIET tag can be used to turn on/off the messages that are generated 
+# by doxygen. Possible values are YES and NO. If left blank NO is used.
+
+QUIET                  = NO
+
+# The WARNINGS tag can be used to turn on/off the warning messages that are 
+# generated by doxygen. Possible values are YES and NO. If left blank 
+# NO is used.
+
+WARNINGS               = YES
+
+# If WARN_IF_UNDOCUMENTED is set to YES, then doxygen will generate warnings 
+# for undocumented members. If EXTRACT_ALL is set to YES then this flag will 
+# automatically be disabled.
+
+WARN_IF_UNDOCUMENTED   = YES
+
+# If WARN_IF_DOC_ERROR is set to YES, doxygen will generate warnings for 
+# potential errors in the documentation, such as not documenting some 
+# parameters in a documented function, or documenting parameters that 
+# don't exist or using markup commands wrongly.
+
+WARN_IF_DOC_ERROR      = YES
+
+# The WARN_FORMAT tag determines the format of the warning messages that 
+# doxygen can produce. The string should contain the $file, $line, and $text 
+# tags, which will be replaced by the file and line number from which the 
+# warning originated and the warning text.
+
+WARN_FORMAT            = "$file:$line: $text"
+
+# The WARN_LOGFILE tag can be used to specify a file to which warning 
+# and error messages should be written. If left blank the output is written 
+# to stderr.
+
+WARN_LOGFILE           = 
+
+#---------------------------------------------------------------------------
+# configuration options related to the input files
+#---------------------------------------------------------------------------
+
+# The INPUT tag can be used to specify the files and/or directories that contain 
+# documented source files. You may enter file names like "myfile.cpp" or 
+# directories like "/usr/src/myproject". Separate the files or directories 
+# with spaces.
+
+INPUT                  = ../libdaemon/
+
+# If the value of the INPUT tag contains directories, you can use the 
+# FILE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp 
+# and *.h) to filter out the source-files in the directories. If left 
+# blank the following patterns are tested: 
+# *.c *.cc *.cxx *.cpp *.c++ *.java *.ii *.ixx *.ipp *.i++ *.inl *.h *.hh *.hxx *.hpp 
+# *.h++ *.idl *.odl *.cs *.php *.php3 *.inc *.m *.mm
+
+FILE_PATTERNS          = *.h
+
+# The RECURSIVE tag can be used to turn specify whether or not subdirectories 
+# should be searched for input files as well. Possible values are YES and NO. 
+# If left blank NO is used.
+
+RECURSIVE              = NO
+
+# The EXCLUDE tag can be used to specify files and/or directories that should 
+# excluded from the INPUT source files. This way you can easily exclude a 
+# subdirectory from a directory tree whose root is specified with the INPUT tag.
+
+EXCLUDE                = 
+
+# The EXCLUDE_SYMLINKS tag can be used select whether or not files or directories 
+# that are symbolic links (a Unix filesystem feature) are excluded from the input.
+
+EXCLUDE_SYMLINKS       = NO
+
+# If the value of the INPUT tag contains directories, you can use the 
+# EXCLUDE_PATTERNS tag to specify one or more wildcard patterns to exclude 
+# certain files from those directories.
+
+EXCLUDE_PATTERNS       = 
+
+# The EXAMPLE_PATH tag can be used to specify one or more files or 
+# directories that contain example code fragments that are included (see 
+# the \include command).
+
+EXAMPLE_PATH           = ../examples/
+
+# If the value of the EXAMPLE_PATH tag contains directories, you can use the 
+# EXAMPLE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp 
+# and *.h) to filter out the source-files in the directories. If left 
+# blank all files are included.
+
+EXAMPLE_PATTERNS       = *.c
+
+# If the EXAMPLE_RECURSIVE tag is set to YES then subdirectories will be 
+# searched for input files to be used with the \include or \dontinclude 
+# commands irrespective of the value of the RECURSIVE tag. 
+# Possible values are YES and NO. If left blank NO is used.
+
+EXAMPLE_RECURSIVE      = NO
+
+# The IMAGE_PATH tag can be used to specify one or more files or 
+# directories that contain image that are included in the documentation (see 
+# the \image command).
+
+IMAGE_PATH             = 
+
+# The INPUT_FILTER tag can be used to specify a program that doxygen should 
+# invoke to filter for each input file. Doxygen will invoke the filter program 
+# by executing (via popen()) the command <filter> <input-file>, where <filter> 
+# is the value of the INPUT_FILTER tag, and <input-file> is the name of an 
+# input file. Doxygen will then use the output that the filter program writes 
+# to standard output.  If FILTER_PATTERNS is specified, this tag will be 
+# ignored.
+
+INPUT_FILTER           = 
+
+# The FILTER_PATTERNS tag can be used to specify filters on a per file pattern 
+# basis.  Doxygen will compare the file name with each pattern and apply the 
+# filter if there is a match.  The filters are a list of the form: 
+# pattern=filter (like *.cpp=my_cpp_filter). See INPUT_FILTER for further 
+# info on how filters are used. If FILTER_PATTERNS is empty, INPUT_FILTER 
+# is applied to all files.
+
+FILTER_PATTERNS        = 
+
+# If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using 
+# INPUT_FILTER) will be used to filter the input files when producing source 
+# files to browse (i.e. when SOURCE_BROWSER is set to YES).
+
+FILTER_SOURCE_FILES    = NO
+
+#---------------------------------------------------------------------------
+# configuration options related to source browsing
+#---------------------------------------------------------------------------
+
+# If the SOURCE_BROWSER tag is set to YES then a list of source files will 
+# be generated. Documented entities will be cross-referenced with these sources. 
+# Note: To get rid of all source code in the generated output, make sure also 
+# VERBATIM_HEADERS is set to NO.
+
+SOURCE_BROWSER         = YES
+
+# Setting the INLINE_SOURCES tag to YES will include the body 
+# of functions and classes directly in the documentation.
+
+INLINE_SOURCES         = NO
+
+# Setting the STRIP_CODE_COMMENTS tag to YES (the default) will instruct 
+# doxygen to hide any special comment blocks from generated source code 
+# fragments. Normal C and C++ comments will always remain visible.
+
+STRIP_CODE_COMMENTS    = YES
+
+# If the REFERENCED_BY_RELATION tag is set to YES (the default) 
+# then for each documented function all documented 
+# functions referencing it will be listed.
+
+REFERENCED_BY_RELATION = YES
+
+# If the REFERENCES_RELATION tag is set to YES (the default) 
+# then for each documented function all documented entities 
+# called/used by that function will be listed.
+
+REFERENCES_RELATION    = YES
+
+# If the VERBATIM_HEADERS tag is set to YES (the default) then Doxygen 
+# will generate a verbatim copy of the header file for each class for 
+# which an include is specified. Set to NO to disable this.
+
+VERBATIM_HEADERS       = YES
+
+#---------------------------------------------------------------------------
+# configuration options related to the alphabetical class index
+#---------------------------------------------------------------------------
+
+# If the ALPHABETICAL_INDEX tag is set to YES, an alphabetical index 
+# of all compounds will be generated. Enable this if the project 
+# contains a lot of classes, structs, unions or interfaces.
+
+ALPHABETICAL_INDEX     = NO
+
+# If the alphabetical index is enabled (see ALPHABETICAL_INDEX) then 
+# the COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns 
+# in which this list will be split (can be a number in the range [1..20])
+
+COLS_IN_ALPHA_INDEX    = 5
+
+# In case all classes in a project start with a common prefix, all 
+# classes will be put under the same header in the alphabetical index. 
+# The IGNORE_PREFIX tag can be used to specify one or more prefixes that 
+# should be ignored while generating the index headers.
+
+IGNORE_PREFIX          = 
+
+#---------------------------------------------------------------------------
+# configuration options related to the HTML output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_HTML tag is set to YES (the default) Doxygen will 
+# generate HTML output.
+
+GENERATE_HTML          = YES
+
+# The HTML_OUTPUT tag is used to specify where the HTML docs will be put. 
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be 
+# put in front of it. If left blank `html' will be used as the default path.
+
+HTML_OUTPUT            = html
+
+# The HTML_FILE_EXTENSION tag can be used to specify the file extension for 
+# each generated HTML page (for example: .htm,.php,.asp). If it is left blank 
+# doxygen will generate files with .html extension.
+
+HTML_FILE_EXTENSION    = .html
+
+# The HTML_HEADER tag can be used to specify a personal HTML header for 
+# each generated HTML page. If it is left blank doxygen will generate a 
+# standard header.
+
+HTML_HEADER            = 
+
+# The HTML_FOOTER tag can be used to specify a personal HTML footer for 
+# each generated HTML page. If it is left blank doxygen will generate a 
+# standard footer.
+
+HTML_FOOTER            = 
+
+# The HTML_STYLESHEET tag can be used to specify a user-defined cascading 
+# style sheet that is used by each HTML page. It can be used to 
+# fine-tune the look of the HTML output. If the tag is left blank doxygen 
+# will generate a default style sheet. Note that doxygen will try to copy 
+# the style sheet file to the HTML output directory, so don't put your own 
+# stylesheet in the HTML output directory as well, or it will be erased!
+
+HTML_STYLESHEET        = 
+
+# If the HTML_ALIGN_MEMBERS tag is set to YES, the members of classes, 
+# files or namespaces will be aligned in HTML using tables. If set to 
+# NO a bullet list will be used.
+
+HTML_ALIGN_MEMBERS     = YES
+
+# If the GENERATE_HTMLHELP tag is set to YES, additional index files 
+# will be generated that can be used as input for tools like the 
+# Microsoft HTML help workshop to generate a compressed HTML help file (.chm) 
+# of the generated HTML documentation.
+
+GENERATE_HTMLHELP      = NO
+
+# If the GENERATE_HTMLHELP tag is set to YES, the CHM_FILE tag can 
+# be used to specify the file name of the resulting .chm file. You 
+# can add a path in front of the file if the result should not be 
+# written to the html output directory.
+
+CHM_FILE               = 
+
+# If the GENERATE_HTMLHELP tag is set to YES, the HHC_LOCATION tag can 
+# be used to specify the location (absolute path including file name) of 
+# the HTML help compiler (hhc.exe). If non-empty doxygen will try to run 
+# the HTML help compiler on the generated index.hhp.
+
+HHC_LOCATION           = 
+
+# If the GENERATE_HTMLHELP tag is set to YES, the GENERATE_CHI flag 
+# controls if a separate .chi index file is generated (YES) or that 
+# it should be included in the master .chm file (NO).
+
+GENERATE_CHI           = NO
+
+# If the GENERATE_HTMLHELP tag is set to YES, the BINARY_TOC flag 
+# controls whether a binary table of contents is generated (YES) or a 
+# normal table of contents (NO) in the .chm file.
+
+BINARY_TOC             = NO
+
+# The TOC_EXPAND flag can be set to YES to add extra items for group members 
+# to the contents of the HTML help documentation and to the tree view.
+
+TOC_EXPAND             = NO
+
+# The DISABLE_INDEX tag can be used to turn on/off the condensed index at 
+# top of each HTML page. The value NO (the default) enables the index and 
+# the value YES disables it.
+
+DISABLE_INDEX          = NO
+
+# This tag can be used to set the number of enum values (range [1..20]) 
+# that doxygen will group on one line in the generated HTML documentation.
+
+ENUM_VALUES_PER_LINE   = 4
+
+# If the GENERATE_TREEVIEW tag is set to YES, a side panel will be
+# generated containing a tree-like index structure (just like the one that 
+# is generated for HTML Help). For this to work a browser that supports 
+# JavaScript, DHTML, CSS and frames is required (for instance Mozilla 1.0+, 
+# Netscape 6.0+, Internet explorer 5.0+, or Konqueror). Windows users are 
+# probably better off using the HTML help feature.
+
+GENERATE_TREEVIEW      = YES
+
+# If the treeview is enabled (see GENERATE_TREEVIEW) then this tag can be 
+# used to set the initial width (in pixels) of the frame in which the tree 
+# is shown.
+
+TREEVIEW_WIDTH         = 250
+
+#---------------------------------------------------------------------------
+# configuration options related to the LaTeX output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_LATEX tag is set to YES (the default) Doxygen will 
+# generate Latex output.
+
+GENERATE_LATEX         = NO
+
+# The LATEX_OUTPUT tag is used to specify where the LaTeX docs will be put. 
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be 
+# put in front of it. If left blank `latex' will be used as the default path.
+
+LATEX_OUTPUT           = latex
+
+# The LATEX_CMD_NAME tag can be used to specify the LaTeX command name to be 
+# invoked. If left blank `latex' will be used as the default command name.
+
+LATEX_CMD_NAME         = latex
+
+# The MAKEINDEX_CMD_NAME tag can be used to specify the command name to 
+# generate index for LaTeX. If left blank `makeindex' will be used as the 
+# default command name.
+
+MAKEINDEX_CMD_NAME     = makeindex
+
+# If the COMPACT_LATEX tag is set to YES Doxygen generates more compact 
+# LaTeX documents. This may be useful for small projects and may help to 
+# save some trees in general.
+
+COMPACT_LATEX          = NO
+
+# The PAPER_TYPE tag can be used to set the paper type that is used 
+# by the printer. Possible values are: a4, a4wide, letter, legal and 
+# executive. If left blank a4wide will be used.
+
+PAPER_TYPE             = a4wide
+
+# The EXTRA_PACKAGES tag can be to specify one or more names of LaTeX 
+# packages that should be included in the LaTeX output.
+
+EXTRA_PACKAGES         = 
+
+# The LATEX_HEADER tag can be used to specify a personal LaTeX header for 
+# the generated latex document. The header should contain everything until 
+# the first chapter. If it is left blank doxygen will generate a 
+# standard header. Notice: only use this tag if you know what you are doing!
+
+LATEX_HEADER           = 
+
+# If the PDF_HYPERLINKS tag is set to YES, the LaTeX that is generated 
+# is prepared for conversion to pdf (using ps2pdf). The pdf file will 
+# contain links (just like the HTML output) instead of page references 
+# This makes the output suitable for online browsing using a pdf viewer.
+
+PDF_HYPERLINKS         = NO
+
+# If the USE_PDFLATEX tag is set to YES, pdflatex will be used instead of 
+# plain latex in the generated Makefile. Set this option to YES to get a 
+# higher quality PDF documentation.
+
+USE_PDFLATEX           = NO
+
+# If the LATEX_BATCHMODE tag is set to YES, doxygen will add the \\batchmode. 
+# command to the generated LaTeX files. This will instruct LaTeX to keep 
+# running if errors occur, instead of asking the user for help. 
+# This option is also used when generating formulas in HTML.
+
+LATEX_BATCHMODE        = NO
+
+# If LATEX_HIDE_INDICES is set to YES then doxygen will not 
+# include the index chapters (such as File Index, Compound Index, etc.) 
+# in the output.
+
+LATEX_HIDE_INDICES     = NO
+
+#---------------------------------------------------------------------------
+# configuration options related to the RTF output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_RTF tag is set to YES Doxygen will generate RTF output 
+# The RTF output is optimized for Word 97 and may not look very pretty with 
+# other RTF readers or editors.
+
+GENERATE_RTF           = NO
+
+# The RTF_OUTPUT tag is used to specify where the RTF docs will be put. 
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be 
+# put in front of it. If left blank `rtf' will be used as the default path.
+
+RTF_OUTPUT             = rtf
+
+# If the COMPACT_RTF tag is set to YES Doxygen generates more compact 
+# RTF documents. This may be useful for small projects and may help to 
+# save some trees in general.
+
+COMPACT_RTF            = NO
+
+# If the RTF_HYPERLINKS tag is set to YES, the RTF that is generated 
+# will contain hyperlink fields. The RTF file will 
+# contain links (just like the HTML output) instead of page references. 
+# This makes the output suitable for online browsing using WORD or other 
+# programs which support those fields. 
+# Note: wordpad (write) and others do not support links.
+
+RTF_HYPERLINKS         = NO
+
+# Load stylesheet definitions from file. Syntax is similar to doxygen's 
+# config file, i.e. a series of assignments. You only have to provide 
+# replacements, missing definitions are set to their default value.
+
+RTF_STYLESHEET_FILE    = 
+
+# Set optional variables used in the generation of an rtf document. 
+# Syntax is similar to doxygen's config file.
+
+RTF_EXTENSIONS_FILE    = 
+
+#---------------------------------------------------------------------------
+# configuration options related to the man page output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_MAN tag is set to YES (the default) Doxygen will 
+# generate man pages
+
+GENERATE_MAN           = YES
+
+# The MAN_OUTPUT tag is used to specify where the man pages will be put. 
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be 
+# put in front of it. If left blank `man' will be used as the default path.
+
+MAN_OUTPUT             = man
+
+# The MAN_EXTENSION tag determines the extension that is added to 
+# the generated man pages (default is the subroutine's section .3)
+
+MAN_EXTENSION          = .3
+
+# If the MAN_LINKS tag is set to YES and Doxygen generates man output, 
+# then it will generate one additional man file for each entity 
+# documented in the real man page(s). These additional files 
+# only source the real man page, but without them the man command 
+# would be unable to find the correct page. The default is NO.
+
+MAN_LINKS              = NO
+
+#---------------------------------------------------------------------------
+# configuration options related to the XML output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_XML tag is set to YES Doxygen will 
+# generate an XML file that captures the structure of 
+# the code including all documentation.
+
+GENERATE_XML           = NO
+
+# The XML_OUTPUT tag is used to specify where the XML pages will be put. 
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be 
+# put in front of it. If left blank `xml' will be used as the default path.
+
+XML_OUTPUT             = xml
+
+# The XML_SCHEMA tag can be used to specify an XML schema, 
+# which can be used by a validating XML parser to check the 
+# syntax of the XML files.
+
+XML_SCHEMA             = 
+
+# The XML_DTD tag can be used to specify an XML DTD, 
+# which can be used by a validating XML parser to check the 
+# syntax of the XML files.
+
+XML_DTD                = 
+
+# If the XML_PROGRAMLISTING tag is set to YES Doxygen will 
+# dump the program listings (including syntax highlighting 
+# and cross-referencing information) to the XML output. Note that 
+# enabling this will significantly increase the size of the XML output.
+
+XML_PROGRAMLISTING     = YES
+
+#---------------------------------------------------------------------------
+# configuration options for the AutoGen Definitions output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_AUTOGEN_DEF tag is set to YES Doxygen will 
+# generate an AutoGen Definitions (see autogen.sf.net) file 
+# that captures the structure of the code including all 
+# documentation. Note that this feature is still experimental 
+# and incomplete at the moment.
+
+GENERATE_AUTOGEN_DEF   = NO
+
+#---------------------------------------------------------------------------
+# configuration options related to the Perl module output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_PERLMOD tag is set to YES Doxygen will 
+# generate a Perl module file that captures the structure of 
+# the code including all documentation. Note that this 
+# feature is still experimental and incomplete at the 
+# moment.
+
+GENERATE_PERLMOD       = NO
+
+# If the PERLMOD_LATEX tag is set to YES Doxygen will generate 
+# the necessary Makefile rules, Perl scripts and LaTeX code to be able 
+# to generate PDF and DVI output from the Perl module output.
+
+PERLMOD_LATEX          = NO
+
+# If the PERLMOD_PRETTY tag is set to YES the Perl module output will be 
+# nicely formatted so it can be parsed by a human reader.  This is useful 
+# if you want to understand what is going on.  On the other hand, if this 
+# tag is set to NO the size of the Perl module output will be much smaller 
+# and Perl will parse it just the same.
+
+PERLMOD_PRETTY         = YES
+
+# The names of the make variables in the generated doxyrules.make file 
+# are prefixed with the string contained in PERLMOD_MAKEVAR_PREFIX. 
+# This is useful so different doxyrules.make files included by the same 
+# Makefile don't overwrite each other's variables.
+
+PERLMOD_MAKEVAR_PREFIX = 
+
+#---------------------------------------------------------------------------
+# Configuration options related to the preprocessor   
+#---------------------------------------------------------------------------
+
+# If the ENABLE_PREPROCESSING tag is set to YES (the default) Doxygen will 
+# evaluate all C-preprocessor directives found in the sources and include 
+# files.
+
+ENABLE_PREPROCESSING   = YES
+
+# If the MACRO_EXPANSION tag is set to YES Doxygen will expand all macro 
+# names in the source code. If set to NO (the default) only conditional 
+# compilation will be performed. Macro expansion can be done in a controlled 
+# way by setting EXPAND_ONLY_PREDEF to YES.
+
+MACRO_EXPANSION        = NO
+
+# If the EXPAND_ONLY_PREDEF and MACRO_EXPANSION tags are both set to YES 
+# then the macro expansion is limited to the macros specified with the 
+# PREDEFINED and EXPAND_AS_PREDEFINED tags.
+
+EXPAND_ONLY_PREDEF     = NO
+
+# If the SEARCH_INCLUDES tag is set to YES (the default) the includes files 
+# in the INCLUDE_PATH (see below) will be search if a #include is found.
+
+SEARCH_INCLUDES        = YES
+
+# The INCLUDE_PATH tag can be used to specify one or more directories that 
+# contain include files that are not input files but should be processed by 
+# the preprocessor.
+
+INCLUDE_PATH           = 
+
+# You can use the INCLUDE_FILE_PATTERNS tag to specify one or more wildcard 
+# patterns (like *.h and *.hpp) to filter out the header-files in the 
+# directories. If left blank, the patterns specified with FILE_PATTERNS will 
+# be used.
+
+INCLUDE_FILE_PATTERNS  = 
+
+# The PREDEFINED tag can be used to specify one or more macro names that 
+# are defined before the preprocessor is started (similar to the -D option of 
+# gcc). The argument of the tag is a list of macros of the form: name 
+# or name=definition (no spaces). If the definition and the = are 
+# omitted =1 is assumed. To prevent a macro definition from being 
+# undefined via #undef or recursively expanded use the := operator 
+# instead of the = operator.
+
+PREDEFINED             = 
+
+# If the MACRO_EXPANSION and EXPAND_ONLY_PREDEF tags are set to YES then 
+# this tag can be used to specify a list of macro names that should be expanded. 
+# The macro definition that is found in the sources will be used. 
+# Use the PREDEFINED tag if you want to use a different macro definition.
+
+EXPAND_AS_DEFINED      = 
+
+# If the SKIP_FUNCTION_MACROS tag is set to YES (the default) then 
+# doxygen's preprocessor will remove all function-like macros that are alone 
+# on a line, have an all uppercase name, and do not end with a semicolon. Such 
+# function macros are typically used for boiler-plate code, and will confuse the 
+# parser if not removed.
+
+SKIP_FUNCTION_MACROS   = YES
+
+#---------------------------------------------------------------------------
+# Configuration::additions related to external references   
+#---------------------------------------------------------------------------
+
+# The TAGFILES option can be used to specify one or more tagfiles. 
+# Optionally an initial location of the external documentation 
+# can be added for each tagfile. The format of a tag file without 
+# this location is as follows: 
+#   TAGFILES = file1 file2 ... 
+# Adding location for the tag files is done as follows: 
+#   TAGFILES = file1=loc1 "file2 = loc2" ... 
+# where "loc1" and "loc2" can be relative or absolute paths or 
+# URLs. If a location is present for each tag, the installdox tool 
+# does not have to be run to correct the links.
+# Note that each tag file must have a unique name
+# (where the name does NOT include the path)
+# If a tag file is not located in the directory in which doxygen 
+# is run, you must also specify the path to the tagfile here.
+
+TAGFILES               = 
+
+# When a file name is specified after GENERATE_TAGFILE, doxygen will create 
+# a tag file that is based on the input files it reads.
+
+GENERATE_TAGFILE       = 
+
+# If the ALLEXTERNALS tag is set to YES all external classes will be listed 
+# in the class index. If set to NO only the inherited external classes 
+# will be listed.
+
+ALLEXTERNALS           = NO
+
+# If the EXTERNAL_GROUPS tag is set to YES all external groups will be listed 
+# in the modules index. If set to NO, only the current project's groups will 
+# be listed.
+
+EXTERNAL_GROUPS        = YES
+
+# The PERL_PATH should be the absolute path and name of the perl script 
+# interpreter (i.e. the result of `which perl').
+
+PERL_PATH              = /usr/bin/perl
+
+#---------------------------------------------------------------------------
+# Configuration options related to the dot tool   
+#---------------------------------------------------------------------------
+
+# If the CLASS_DIAGRAMS tag is set to YES (the default) Doxygen will 
+# generate a inheritance diagram (in HTML, RTF and LaTeX) for classes with base or 
+# super classes. Setting the tag to NO turns the diagrams off. Note that this 
+# option is superseded by the HAVE_DOT option below. This is only a fallback. It is 
+# recommended to install and use dot, since it yields more powerful graphs.
+
+CLASS_DIAGRAMS         = YES
+
+# If set to YES, the inheritance and collaboration graphs will hide 
+# inheritance and usage relations if the target is undocumented 
+# or is not a class.
+
+HIDE_UNDOC_RELATIONS   = YES
+
+# If you set the HAVE_DOT tag to YES then doxygen will assume the dot tool is 
+# available from the path. This tool is part of Graphviz, a graph visualization 
+# toolkit from AT&T and Lucent Bell Labs. The other options in this section 
+# have no effect if this option is set to NO (the default)
+
+HAVE_DOT               = NO
+
+# If the CLASS_GRAPH and HAVE_DOT tags are set to YES then doxygen 
+# will generate a graph for each documented class showing the direct and 
+# indirect inheritance relations. Setting this tag to YES will force the 
+# the CLASS_DIAGRAMS tag to NO.
+
+CLASS_GRAPH            = YES
+
+# If the COLLABORATION_GRAPH and HAVE_DOT tags are set to YES then doxygen 
+# will generate a graph for each documented class showing the direct and 
+# indirect implementation dependencies (inheritance, containment, and 
+# class references variables) of the class with other documented classes.
+
+COLLABORATION_GRAPH    = YES
+
+# If the UML_LOOK tag is set to YES doxygen will generate inheritance and 
+# collaboration diagrams in a style similar to the OMG's Unified Modeling 
+# Language.
+
+UML_LOOK               = NO
+
+# If set to YES, the inheritance and collaboration graphs will show the 
+# relations between templates and their instances.
+
+TEMPLATE_RELATIONS     = YES
+
+# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDE_GRAPH, and HAVE_DOT 
+# tags are set to YES then doxygen will generate a graph for each documented 
+# file showing the direct and indirect include dependencies of the file with 
+# other documented files.
+
+INCLUDE_GRAPH          = YES
+
+# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDED_BY_GRAPH, and 
+# HAVE_DOT tags are set to YES then doxygen will generate a graph for each 
+# documented header file showing the documented files that directly or 
+# indirectly include this file.
+
+INCLUDED_BY_GRAPH      = YES
+
+# If the CALL_GRAPH and HAVE_DOT tags are set to YES then doxygen will 
+# generate a call dependency graph for every global function or class method. 
+# Note that enabling this option will significantly increase the time of a run. 
+# So in most cases it will be better to enable call graphs for selected 
+# functions only using the \callgraph command.
+
+CALL_GRAPH             = NO
+
+# If the GRAPHICAL_HIERARCHY and HAVE_DOT tags are set to YES then doxygen 
+# will graphical hierarchy of all classes instead of a textual one.
+
+GRAPHICAL_HIERARCHY    = YES
+
+# The DOT_IMAGE_FORMAT tag can be used to set the image format of the images 
+# generated by dot. Possible values are png, jpg, or gif
+# If left blank png will be used.
+
+DOT_IMAGE_FORMAT       = png
+
+# The tag DOT_PATH can be used to specify the path where the dot tool can be 
+# found. If left blank, it is assumed the dot tool can be found on the path.
+
+DOT_PATH               = 
+
+# The DOTFILE_DIRS tag can be used to specify one or more directories that 
+# contain dot files that are included in the documentation (see the 
+# \dotfile command).
+
+DOTFILE_DIRS           = 
+
+# The MAX_DOT_GRAPH_WIDTH tag can be used to set the maximum allowed width 
+# (in pixels) of the graphs generated by dot. If a graph becomes larger than 
+# this value, doxygen will try to truncate the graph, so that it fits within 
+# the specified constraint. Beware that most browsers cannot cope with very 
+# large images.
+
+MAX_DOT_GRAPH_WIDTH    = 1024
+
+# The MAX_DOT_GRAPH_HEIGHT tag can be used to set the maximum allows height 
+# (in pixels) of the graphs generated by dot. If a graph becomes larger than 
+# this value, doxygen will try to truncate the graph, so that it fits within 
+# the specified constraint. Beware that most browsers cannot cope with very 
+# large images.
+
+MAX_DOT_GRAPH_HEIGHT   = 1024
+
+# The MAX_DOT_GRAPH_DEPTH tag can be used to set the maximum depth of the 
+# graphs generated by dot. A depth value of 3 means that only nodes reachable 
+# from the root by following a path via at most 3 edges will be shown. Nodes that 
+# lay further from the root node will be omitted. Note that setting this option to 
+# 1 or 2 may greatly reduce the computation time needed for large code bases. Also 
+# note that a graph may be further truncated if the graph's image dimensions are 
+# not sufficient to fit the graph (see MAX_DOT_GRAPH_WIDTH and MAX_DOT_GRAPH_HEIGHT). 
+# If 0 is used for the depth value (the default), the graph is not depth-constrained.
+
+MAX_DOT_GRAPH_DEPTH    = 0
+
+# If the GENERATE_LEGEND tag is set to YES (the default) Doxygen will 
+# generate a legend page explaining the meaning of the various boxes and 
+# arrows in the dot generated graphs.
+
+GENERATE_LEGEND        = YES
+
+# If the DOT_CLEANUP tag is set to YES (the default) Doxygen will 
+# remove the intermediate dot files that are used to generate 
+# the various graphs.
+
+DOT_CLEANUP            = YES
+
+#---------------------------------------------------------------------------
+# Configuration::additions related to the search engine   
+#---------------------------------------------------------------------------
+
+# The SEARCHENGINE tag specifies whether or not a search engine should be 
+# used. If set to NO the values of all tags below this one will be ignored.
+
+SEARCHENGINE           = NO
diff --git a/libdaemon/doc/style.css b/libdaemon/doc/style.css
new file mode 100644
index 0000000..15efaec
--- /dev/null
+++ b/libdaemon/doc/style.css
@@ -0,0 +1,30 @@
+/***
+  This file is part of libdaemon.
+
+  Copyright 2003-2008 Lennart Poettering
+
+  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.
+
+***/
+
+body { color: black; background-color: white; } 
+a:link, a:visited { color: #900000; }       
+div.news-date { font-size: 80%; font-style: italic; } 
+pre { background-color: #f0f0f0; padding: 0.4cm; }
+.grey { color: #8f8f8f; font-size: 80%; }
diff --git a/libdaemon/examples/Makefile.am b/libdaemon/examples/Makefile.am
new file mode 100644
index 0000000..930c3bf
--- /dev/null
+++ b/libdaemon/examples/Makefile.am
@@ -0,0 +1,28 @@
+# This file is part of libdaemon.
+#
+# Copyright 2003-2008 Lennart Poettering
+#
+# 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.
+
+noinst_PROGRAMS = testd
+
+AM_CPPFLAGS=-I$(top_srcdir)
+
+testd_SOURCES=testd.c
+testd_LDADD=../libdaemon/libdaemon.la
diff --git a/libdaemon/examples/testd.c b/libdaemon/examples/testd.c
new file mode 100644
index 0000000..9154f7b
--- /dev/null
+++ b/libdaemon/examples/testd.c
@@ -0,0 +1,194 @@
+/***
+  This file is part of libdaemon.
+
+  Copyright 2003-2008 Lennart Poettering
+
+  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.
+
+***/
+
+#include <signal.h>
+#include <errno.h>
+#include <string.h>
+#include <sys/types.h>
+#include <sys/time.h>
+#include <sys/unistd.h>
+#include <sys/select.h>
+
+#include <libdaemon/dfork.h>
+#include <libdaemon/dsignal.h>
+#include <libdaemon/dlog.h>
+#include <libdaemon/dpid.h>
+#include <libdaemon/dexec.h>
+
+int main(int argc, char *argv[]) {
+    pid_t pid;
+
+    /* Reset signal handlers */
+    if (daemon_reset_sigs(-1) < 0) {
+        daemon_log(LOG_ERR, "Failed to reset all signal handlers: %s", strerror(errno));
+        return 1;
+    }
+
+    /* Unblock signals */
+    if (daemon_unblock_sigs(-1) < 0) {
+        daemon_log(LOG_ERR, "Failed to unblock all signals: %s", strerror(errno));
+        return 1;
+    }
+
+    /* Set indetification string for the daemon for both syslog and PID file */
+    daemon_pid_file_ident = daemon_log_ident = daemon_ident_from_argv0(argv[0]);
+
+    /* Check if we are called with -k parameter */
+    if (argc >= 2 && !strcmp(argv[1], "-k")) {
+        int ret;
+
+        /* Kill daemon with SIGTERM */
+
+        /* Check if the new function daemon_pid_file_kill_wait() is available, if it is, use it. */
+        if ((ret = daemon_pid_file_kill_wait(SIGTERM, 5)) < 0)
+            daemon_log(LOG_WARNING, "Failed to kill daemon: %s", strerror(errno));
+
+        return ret < 0 ? 1 : 0;
+    }
+
+    /* Check that the daemon is not rung twice a the same time */
+    if ((pid = daemon_pid_file_is_running()) >= 0) {
+        daemon_log(LOG_ERR, "Daemon already running on PID file %u", pid);
+        return 1;
+    }
+
+    /* Prepare for return value passing from the initialization procedure of the daemon process */
+    if (daemon_retval_init() < 0) {
+        daemon_log(LOG_ERR, "Failed to create pipe.");
+        return 1;
+    }
+
+    /* Do the fork */
+    if ((pid = daemon_fork()) < 0) {
+
+        /* Exit on error */
+        daemon_retval_done();
+        return 1;
+
+    } else if (pid) { /* The parent */
+        int ret;
+
+        /* Wait for 20 seconds for the return value passed from the daemon process */
+        if ((ret = daemon_retval_wait(20)) < 0) {
+            daemon_log(LOG_ERR, "Could not recieve return value from daemon process: %s", strerror(errno));
+            return 255;
+        }
+
+        daemon_log(ret != 0 ? LOG_ERR : LOG_INFO, "Daemon returned %i as return value.", ret);
+        return ret;
+
+    } else { /* The daemon */
+        int fd, quit = 0;
+        fd_set fds;
+
+        /* Close FDs */
+        if (daemon_close_all(-1) < 0) {
+            daemon_log(LOG_ERR, "Failed to close all file descriptors: %s", strerror(errno));
+
+            /* Send the error condition to the parent process */
+            daemon_retval_send(1);
+            goto finish;
+        }
+
+        /* Create the PID file */
+        if (daemon_pid_file_create() < 0) {
+            daemon_log(LOG_ERR, "Could not create PID file (%s).", strerror(errno));
+            daemon_retval_send(2);
+            goto finish;
+        }
+
+        /* Initialize signal handling */
+        if (daemon_signal_init(SIGINT, SIGTERM, SIGQUIT, SIGHUP, 0) < 0) {
+            daemon_log(LOG_ERR, "Could not register signal handlers (%s).", strerror(errno));
+            daemon_retval_send(3);
+            goto finish;
+        }
+
+        /*... do some further init work here */
+
+
+        /* Send OK to parent process */
+        daemon_retval_send(0);
+
+        daemon_log(LOG_INFO, "Sucessfully started");
+
+        /* Prepare for select() on the signal fd */
+        FD_ZERO(&fds);
+        fd = daemon_signal_fd();
+        FD_SET(fd, &fds);
+
+        while (!quit) {
+            fd_set fds2 = fds;
+
+            /* Wait for an incoming signal */
+            if (select(FD_SETSIZE, &fds2, 0, 0, 0) < 0) {
+
+                /* If we've been interrupted by an incoming signal, continue */
+                if (errno == EINTR)
+                    continue;
+
+                daemon_log(LOG_ERR, "select(): %s", strerror(errno));
+                break;
+            }
+
+            /* Check if a signal has been recieved */
+            if (FD_ISSET(fd, &fds2)) {
+                int sig;
+
+                /* Get signal */
+                if ((sig = daemon_signal_next()) <= 0) {
+                    daemon_log(LOG_ERR, "daemon_signal_next() failed: %s", strerror(errno));
+                    break;
+                }
+
+                /* Dispatch signal */
+                switch (sig) {
+
+                    case SIGINT:
+                    case SIGQUIT:
+                    case SIGTERM:
+                        daemon_log(LOG_WARNING, "Got SIGINT, SIGQUIT or SIGTERM.");
+                        quit = 1;
+                        break;
+
+                    case SIGHUP:
+                        daemon_log(LOG_INFO, "Got a HUP");
+                        daemon_exec("/", NULL, "/bin/ls", "ls", (char*) NULL);
+                        break;
+
+                }
+            }
+        }
+
+        /* Do a cleanup */
+finish:
+        daemon_log(LOG_INFO, "Exiting...");
+        daemon_retval_send(255);
+        daemon_signal_done();
+        daemon_pid_file_remove();
+
+        return 0;
+    }
+}
diff --git a/libdaemon/libdaemon/Android.mk b/libdaemon/libdaemon/Android.mk
new file mode 100644
index 0000000..877360c
--- /dev/null
+++ b/libdaemon/libdaemon/Android.mk
@@ -0,0 +1,32 @@
+LOCAL_PATH:= $(call my-dir)
+include $(CLEAR_VARS)
+
+LOCAL_SRC_FILES:= \
+	dexec.c \
+	dfork.c \
+	dlog.c \
+	dnonblock.c \
+	dpid.c \
+	dsignal.c
+
+LOCAL_C_INCLUDES+= $(LOCAL_PATH)/..
+
+LOCAL_MODULE:=libdaemon
+
+LOCAL_EXPORT_C_INCLUDE_DIRS:= $(LOCAL_PATH)/..
+
+# -std=gnu99 -DHAVE_CONFIG_H -I. -I..  -I..   -g -O2 -pipe
+# -Wall -W -Wextra -pedantic -Wformat -Wold-style-definition
+# -Wdeclaration-after-statement -Wfloat-equal -Wmissing-declarations
+# -Wmissing-prototypes -Wstrict-prototypes -Wredundant-decls
+# -Wmissing-noreturn -Wshadow -Wendif-labels -Wpointer-arith
+# -Wbad-function-cast -Wcast-qual -Wcast-align -Wwrite-strings -Winline
+#  -Wstrict-aliasing
+# -MT testd.o -MD -MP -MF .deps/testd.Tpo -c -o testd.o testd.c
+
+LOCAL_CFLAGS+= \
+	-Wno-unused-parameter \
+	-DHAVE_CONFIG_H \
+	-DLOCALSTATEDIR=\"/data/misc/libdaemon\"
+
+include $(BUILD_SHARED_LIBRARY)
diff --git a/libdaemon/libdaemon/Makefile.am b/libdaemon/libdaemon/Makefile.am
new file mode 100644
index 0000000..9c56611
--- /dev/null
+++ b/libdaemon/libdaemon/Makefile.am
@@ -0,0 +1,47 @@
+# This file is part of libdaemon.
+#
+# Copyright 2003-2008 Lennart Poettering
+#
+# 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.
+#
+
+AM_CPPFLAGS='-DLOCALSTATEDIR="$(localstatedir)"'
+
+pkginclude_HEADERS = \
+	dlog.h \
+	dfork.h \
+	dsignal.h \
+	dnonblock.h \
+	dpid.h \
+	dexec.h \
+	daemon.h
+
+lib_LTLIBRARIES = libdaemon.la
+
+libdaemon_la_SOURCES = \
+	dlog.c \
+	dfork.c \
+	dsignal.c \
+	dnonblock.c \
+	dpid.c \
+	dexec.c \
+	daemon.h \
+	$(pkg_include_HEADERS)
+
+libdaemon_la_LDFLAGS = -version-info $(LIBDAEMON_VERSION_INFO) $(LDFLAGS_NOUNDEFINED)
diff --git a/libdaemon/libdaemon/daemon.h b/libdaemon/libdaemon/daemon.h
new file mode 100644
index 0000000..3d3573a
--- /dev/null
+++ b/libdaemon/libdaemon/daemon.h
@@ -0,0 +1,41 @@
+#ifndef foodaemonhfoo
+#define foodaemonhfoo
+
+/***
+  This file is part of libdaemon.
+
+  Copyright 2003-2008 Lennart Poettering
+
+  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.
+
+***/
+
+/** \file
+ *
+ * A header file including all other header files part of libdaemon
+ */
+
+#include <libdaemon/dfork.h>
+#include <libdaemon/dlog.h>
+#include <libdaemon/dpid.h>
+#include <libdaemon/dsignal.h>
+#include <libdaemon/dexec.h>
+#include <libdaemon/dnonblock.h>
+
+#endif
diff --git a/libdaemon/libdaemon/dexec.c b/libdaemon/libdaemon/dexec.c
new file mode 100644
index 0000000..7a89b62
--- /dev/null
+++ b/libdaemon/libdaemon/dexec.c
@@ -0,0 +1,232 @@
+/***
+  This file is part of libdaemon.
+
+  Copyright 2003-2008 Lennart Poettering
+
+  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.
+
+***/
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include <sys/types.h>
+#include <unistd.h>
+#include <string.h>
+#include <errno.h>
+#include <sys/stat.h>
+#include <stdlib.h>
+#include <signal.h>
+#include <sys/wait.h>
+#include <limits.h>
+#include <fcntl.h>
+#include <stdio.h>
+#include <stdarg.h>
+#include <assert.h>
+
+#include "dlog.h"
+#include "dsignal.h"
+#include "dfork.h"
+#include "dexec.h"
+
+#define MAX_ARGS 64
+
+int daemon_execv(const char *dir, int *ret, const char *prog, va_list ap) {
+    pid_t pid;
+    int p[2];
+    unsigned n = 0;
+    static char buf[256];
+    int sigfd, r;
+    fd_set fds;
+    int saved_errno;
+
+    assert(daemon_signal_fd() >= 0);
+
+    if (pipe(p) < 0) {
+        daemon_log(LOG_ERR, "pipe() failed: %s", strerror(errno));
+        return -1;
+    }
+
+    if ((pid = fork()) < 0) {
+        daemon_log(LOG_ERR, "fork() failed: %s", strerror(errno));
+
+        saved_errno = errno;
+        close(p[0]);
+        close(p[1]);
+        errno = saved_errno;
+
+        return -1;
+
+    } else if (pid == 0) {
+        char *args[MAX_ARGS];
+        int i;
+
+        if (p[1] != 1)
+            if (dup2(p[1], 1) < 0) {
+                daemon_log(LOG_ERR, "dup2: %s", strerror(errno));
+                goto fail;
+            }
+
+        if (p[1] != 2)
+            if (dup2(p[1], 2) < 0) {
+                daemon_log(LOG_ERR, "dup2: %s", strerror(errno));
+                goto fail;
+            }
+
+
+        if (p[0] > 2)
+            close(p[0]);
+
+        if (p[1] > 2)
+            close(p[1]);
+
+        close(0);
+
+        if (open("/dev/null", O_RDONLY) != 0) {
+            daemon_log(LOG_ERR, "Unable to open /dev/null as STDIN");
+            goto fail;
+        }
+
+        daemon_close_all(-1);
+        daemon_reset_sigs(-1);
+        daemon_unblock_sigs(-1);
+
+        umask(0022); /* Set up a sane umask */
+
+        if (dir && chdir(dir) < 0) {
+            daemon_log(LOG_WARNING, "Failed to change to directory '%s'", dir);
+            chdir("/");
+        }
+
+        for (i = 0; i < MAX_ARGS-1; i++)
+            if (!(args[i] = va_arg(ap, char*)))
+                break;
+        args[i] = NULL;
+
+        execv(prog, args);
+
+        daemon_log(LOG_ERR, "execv(%s) failed: %s", prog, strerror(errno));
+
+    fail:
+
+        _exit(EXIT_FAILURE);
+    }
+
+    close(p[1]);
+
+    FD_ZERO(&fds);
+    FD_SET(p[0], &fds);
+    sigfd = daemon_signal_fd();
+    FD_SET(sigfd, &fds);
+
+    n = 0;
+
+    for (;;) {
+        fd_set qfds = fds;
+
+        if (select(FD_SETSIZE, &qfds, NULL, NULL, NULL) < 0) {
+
+            if (errno == EINTR)
+                continue;
+
+            daemon_log(LOG_ERR, "select() failed: %s", strerror(errno));
+
+            saved_errno = errno;
+            close(p[0]);
+            errno = saved_errno;
+            return -1;
+        }
+
+        if (FD_ISSET(p[0], &qfds)) {
+            char c;
+
+            if (read(p[0], &c, 1) != 1)
+                break;
+
+            buf[n] = c;
+
+            if (c == '\n' || n >= sizeof(buf) - 2) {
+                if (c != '\n') n++;
+                buf[n] = 0;
+
+                if (buf[0])
+                    daemon_log(LOG_INFO, "client: %s", buf);
+
+                n = 0;
+            } else
+                n++;
+        }
+
+        if (FD_ISSET(sigfd, &qfds)) {
+            int sig;
+
+            if ((sig = daemon_signal_next()) < 0) {
+                saved_errno = errno;
+                close(p[0]);
+                errno = saved_errno;
+                return -1;
+            }
+
+            if (sig != SIGCHLD) {
+                daemon_log(LOG_WARNING, "Killing child.");
+                kill(pid, SIGTERM);
+            }
+        }
+    }
+
+    if (n > 0) {
+        buf[n] = 0;
+        daemon_log(LOG_WARNING, "client: %s", buf);
+    }
+
+    close(p[0]);
+
+    for (;;) {
+        if (waitpid(pid, &r, 0) < 0) {
+
+            if (errno == EINTR)
+                continue;
+
+            daemon_log(LOG_ERR, "waitpid(): %s", strerror(errno));
+            return -1;
+        } else {
+            if (!WIFEXITED(r)) {
+                errno = ECANCELED;
+                return -1;
+            }
+
+            if (ret)
+                *ret = WEXITSTATUS(r);
+
+            return 0;
+        }
+    }
+}
+
+int daemon_exec(const char *dir, int *ret, const char *prog, ...) {
+    va_list ap;
+    int r;
+
+    va_start(ap, prog);
+    r = daemon_execv(dir, ret, prog, ap);
+    va_end(ap);
+
+    return r;
+}
diff --git a/libdaemon/libdaemon/dexec.h b/libdaemon/libdaemon/dexec.h
new file mode 100644
index 0000000..7c03017
--- /dev/null
+++ b/libdaemon/libdaemon/dexec.h
@@ -0,0 +1,84 @@
+#ifndef foodexechfoo
+#define foodexechfoo
+
+/***
+  This file is part of libdaemon.
+
+  Copyright 2003-2008 Lennart Poettering
+
+  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.
+
+***/
+
+#include <stdarg.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/** \file
+ *
+ * Contains a robust API for running sub processes with STDOUT and
+ * STDERR redirected to syslog
+ */
+
+/** This variable is defined to 1 iff daemon_exec() is supported.
+ * @since 0.4
+ * @see daemon_exec() */
+#define DAEMON_EXEC_AVAILABLE 1
+
+#if defined(__GNUC__) && ! defined(DAEMON_GCC_SENTINEL)
+#define DAEMON_GCC_SENTINEL __attribute__ ((sentinel))
+#else
+/** A macro for making use of GCCs printf compilation warnings */
+#define DAEMON_GCC_SENTINEL
+#endif
+
+/** Run the specified executable with the specified arguments in the
+ * specified directory and return the return value of the program in
+ * the specified pointer. The calling process is blocked until the
+ * child finishes and all child output (either STDOUT or STDIN) has
+ * been written to syslog. Running this function requires that
+ * daemon_signal() has been called with SIGCHLD as argument.
+ *
+ * @param dir Working directory for the process.
+ * @param ret A pointer to an integer to write the return value of the program to.
+ * @param prog The path to the executable
+ * @param ... The arguments to be passed to the program, followed by a (char *) NULL
+ * @return Nonzero on failure, zero on success
+ * @since 0.4
+ * @see DAEMON_EXEC_AVAILABLE
+ */
+int daemon_exec(const char *dir, int *ret, const char *prog, ...) DAEMON_GCC_SENTINEL;
+
+/** This variable is defined to 1 iff daemon_execv() is supported.
+ * @since 0.11
+ * @see daemon_execv() */
+#define DAEMON_EXECV_AVAILABLE 1
+
+/** The same as daemon_exec, but without variadic arguments
+ * @since 0.11
+ * @see DAEMON_EXECV_AVAILABLE */
+int daemon_execv(const char *dir, int *ret, const char *prog, va_list ap);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/libdaemon/libdaemon/dfork.c b/libdaemon/libdaemon/dfork.c
new file mode 100644
index 0000000..783033f
--- /dev/null
+++ b/libdaemon/libdaemon/dfork.c
@@ -0,0 +1,730 @@
+/***
+  This file is part of libdaemon.
+
+  Copyright 2003-2008 Lennart Poettering
+
+  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.
+
+***/
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include <sys/types.h>
+#include <unistd.h>
+#include <errno.h>
+#include <string.h>
+#include <fcntl.h>
+#include <sys/stat.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <sys/wait.h>
+#include <assert.h>
+#include <sys/ioctl.h>
+#include <signal.h>
+#include <sys/time.h>
+#include <sys/resource.h>
+#include <dirent.h>
+
+#include "dfork.h"
+#include "dnonblock.h"
+#include "dlog.h"
+
+#if defined(_NSIG) /* On glibc NSIG does not count RT signals */
+# define SIGNAL_UPPER_BOUND _NSIG
+#elif defined(NSIG) /* Solaris defines just this */
+# define SIGNAL_UPPER_BOUND NSIG
+#else
+# error "Unknown upper bound for signals"
+#endif
+
+static int _daemon_retval_pipe[2] = { -1, -1 };
+
+static int _null_open(int f, int fd) {
+    int fd2;
+
+    if ((fd2 = open("/dev/null", f)) < 0)
+        return -1;
+
+    if (fd2 == fd)
+        return fd;
+
+    if (dup2(fd2, fd) < 0)
+        return -1;
+
+    close(fd2);
+    return fd;
+}
+
+static ssize_t atomic_read(int fd, void *d, size_t l) {
+    ssize_t t = 0;
+
+    while (l > 0) {
+        ssize_t r;
+
+        if ((r = read(fd, d, l)) <= 0) {
+
+            if (r < 0)
+                return t > 0 ? t : -1;
+            else
+                return t;
+        }
+
+        t += r;
+        d = (char*) d + r;
+        l -= r;
+    }
+
+    return t;
+}
+
+static ssize_t atomic_write(int fd, const void *d, size_t l) {
+    ssize_t t = 0;
+
+    while (l > 0) {
+        ssize_t r;
+
+        if ((r = write(fd, d, l)) <= 0) {
+
+            if (r < 0)
+                return t > 0 ? t : -1;
+            else
+                return t;
+        }
+
+        t += r;
+        d = (const char*) d + r;
+        l -= r;
+    }
+
+    return t;
+}
+
+static int move_fd_up(int *fd) {
+    assert(fd);
+
+    while (*fd <= 2) {
+        if ((*fd = dup(*fd)) < 0) {
+            daemon_log(LOG_ERR, "dup(): %s", strerror(errno));
+            return -1;
+        }
+    }
+
+    return 0;
+}
+
+static void sigchld(int s) {
+}
+
+pid_t daemon_fork(void) {
+    pid_t pid;
+    int pipe_fds[2] = {-1, -1};
+    struct sigaction sa_old, sa_new;
+    sigset_t ss_old, ss_new;
+    int saved_errno;
+
+    memset(&sa_new, 0, sizeof(sa_new));
+    sa_new.sa_handler = sigchld;
+    sa_new.sa_flags = SA_RESTART;
+
+    if (sigemptyset(&ss_new) < 0) {
+        daemon_log(LOG_ERR, "sigemptyset() failed: %s", strerror(errno));
+        return (pid_t) -1;
+    }
+
+    if (sigaddset(&ss_new, SIGCHLD) < 0) {
+        daemon_log(LOG_ERR, "sigaddset() failed: %s", strerror(errno));
+        return (pid_t) -1;
+    }
+
+    if (sigaction(SIGCHLD, &sa_new, &sa_old) < 0) {
+        daemon_log(LOG_ERR, "sigaction() failed: %s", strerror(errno));
+        return (pid_t) -1;
+    }
+
+    if (sigprocmask(SIG_UNBLOCK, &ss_new, &ss_old) < 0) {
+        daemon_log(LOG_ERR, "sigprocmask() failed: %s", strerror(errno));
+
+        saved_errno = errno;
+        sigaction(SIGCHLD, &sa_old, NULL);
+        errno = saved_errno;
+
+        return (pid_t) -1;
+    }
+
+    if (pipe(pipe_fds) < 0) {
+        daemon_log(LOG_ERR, "pipe() failed: %s", strerror(errno));
+
+        saved_errno = errno;
+        sigaction(SIGCHLD, &sa_old, NULL);
+        sigprocmask(SIG_SETMASK, &ss_old, NULL);
+        errno = saved_errno;
+
+        return (pid_t) -1;
+    }
+
+    if ((pid = fork()) < 0) { /* First fork */
+        daemon_log(LOG_ERR, "First fork() failed: %s", strerror(errno));
+
+        saved_errno = errno;
+        close(pipe_fds[0]);
+        close(pipe_fds[1]);
+        sigaction(SIGCHLD, &sa_old, NULL);
+        sigprocmask(SIG_SETMASK, &ss_old, NULL);
+        errno = saved_errno;
+
+        return (pid_t) -1;
+
+    } else if (pid == 0) {
+        pid_t dpid;
+
+        /* First child. Now we are sure not to be a session leader or
+         * process group leader anymore, i.e. we know that setsid()
+         * will succeed. */
+
+        if (daemon_log_use & DAEMON_LOG_AUTO)
+            daemon_log_use = DAEMON_LOG_SYSLOG;
+
+        if (close(pipe_fds[0]) < 0) {
+            daemon_log(LOG_ERR, "close() failed: %s", strerror(errno));
+            goto fail;
+        }
+
+        /* Move file descriptors up*/
+        if (move_fd_up(&pipe_fds[1]) < 0)
+            goto fail;
+
+        if (_daemon_retval_pipe[0] >= 0 && move_fd_up(&_daemon_retval_pipe[0]) < 0)
+            goto fail;
+        if (_daemon_retval_pipe[1] >= 0 && move_fd_up(&_daemon_retval_pipe[1]) < 0)
+            goto fail;
+
+        if (_null_open(O_RDONLY, 0) < 0) {
+            daemon_log(LOG_ERR, "Failed to open /dev/null for STDIN: %s", strerror(errno));
+            goto fail;
+        }
+
+        if (_null_open(O_WRONLY, 1) < 0) {
+            daemon_log(LOG_ERR, "Failed to open /dev/null for STDOUT: %s", strerror(errno));
+            goto fail;
+        }
+
+        if (_null_open(O_WRONLY, 2) < 0) {
+            daemon_log(LOG_ERR, "Failed to open /dev/null for STDERR: %s", strerror(errno));
+            goto fail;
+        }
+
+        /* Create a new session. This will create a new session and a
+         * new process group for us and we will be the ledaer of
+         * both. This should always succeed because we cannot be the
+         * process group leader because we just forked. */
+        if (setsid() < 0) {
+            daemon_log(LOG_ERR, "setsid() failed: %s", strerror(errno));
+            goto fail;
+        }
+
+        umask(0077);
+
+        if (chdir("/") < 0) {
+            daemon_log(LOG_ERR, "chdir() failed: %s", strerror(errno));
+            goto fail;
+        }
+
+        if ((pid = fork()) < 0) { /* Second fork */
+            daemon_log(LOG_ERR, "Second fork() failed: %s", strerror(errno));
+            goto fail;
+
+        } else if (pid == 0) {
+            /* Second child. Our father will exit right-away. That way
+             * we can be sure that we are a child of init now, even if
+             * the process which spawned us stays around for a longer
+             * time. Also, since we are no session leader anymore we
+             * can be sure that we will never acquire a controlling
+             * TTY. */
+
+            if (sigaction(SIGCHLD, &sa_old, NULL) < 0) {
+                daemon_log(LOG_ERR, "close() failed: %s", strerror(errno));
+                goto fail;
+            }
+
+            if (sigprocmask(SIG_SETMASK, &ss_old, NULL) < 0) {
+                daemon_log(LOG_ERR, "sigprocmask() failed: %s", strerror(errno));
+                goto fail;
+            }
+
+            if (signal(SIGTTOU, SIG_IGN) == SIG_ERR) {
+                daemon_log(LOG_ERR, "signal(SIGTTOU, SIG_IGN) failed: %s", strerror(errno));
+                goto fail;
+            }
+
+            if (signal(SIGTTIN, SIG_IGN) == SIG_ERR) {
+                daemon_log(LOG_ERR, "signal(SIGTTIN, SIG_IGN) failed: %s", strerror(errno));
+                goto fail;
+            }
+
+            if (signal(SIGTSTP, SIG_IGN) == SIG_ERR) {
+                daemon_log(LOG_ERR, "signal(SIGTSTP, SIG_IGN) failed: %s", strerror(errno));
+                goto fail;
+            }
+
+            dpid = getpid();
+            if (atomic_write(pipe_fds[1], &dpid, sizeof(dpid)) != sizeof(dpid)) {
+                daemon_log(LOG_ERR, "write() failed: %s", strerror(errno));
+                goto fail;
+            }
+
+            if (close(pipe_fds[1]) < 0) {
+                daemon_log(LOG_ERR, "close() failed: %s", strerror(errno));
+                goto fail;
+            }
+
+            return 0;
+
+        } else {
+            /* Second father */
+            close(pipe_fds[1]);
+            _exit(0);
+        }
+
+    fail:
+        dpid = (pid_t) -1;
+
+        if (atomic_write(pipe_fds[1], &dpid, sizeof(dpid)) != sizeof(dpid))
+            daemon_log(LOG_ERR, "Failed to write error PID: %s", strerror(errno));
+
+        close(pipe_fds[1]);
+        _exit(0);
+
+    } else {
+        /* First father */
+        pid_t dpid;
+
+        close(pipe_fds[1]);
+
+        if (waitpid(pid, NULL, WUNTRACED) < 0) {
+            saved_errno = errno;
+            close(pipe_fds[0]);
+            sigaction(SIGCHLD, &sa_old, NULL);
+            sigprocmask(SIG_SETMASK, &ss_old, NULL);
+            errno = saved_errno;
+            return -1;
+        }
+
+        sigprocmask(SIG_SETMASK, &ss_old, NULL);
+        sigaction(SIGCHLD, &sa_old, NULL);
+
+        if (atomic_read(pipe_fds[0], &dpid, sizeof(dpid)) != sizeof(dpid)) {
+            daemon_log(LOG_ERR, "Failed to read daemon PID.");
+            dpid = (pid_t) -1;
+            errno = EINVAL;
+        } else if (dpid == (pid_t) -1)
+            errno = EIO;
+
+        saved_errno = errno;
+        close(pipe_fds[0]);
+        errno = saved_errno;
+
+        return dpid;
+    }
+}
+
+int daemon_retval_init(void) {
+
+    if (_daemon_retval_pipe[0] < 0 || _daemon_retval_pipe[1] < 0) {
+
+        if (pipe(_daemon_retval_pipe) < 0) {
+            daemon_log(LOG_ERR, "pipe(): %s", strerror(errno));
+            return -1;
+        }
+    }
+
+    return 0;
+}
+
+void daemon_retval_done(void) {
+    int saved_errno = errno;
+
+    if (_daemon_retval_pipe[0] >= 0)
+        close(_daemon_retval_pipe[0]);
+
+    if (_daemon_retval_pipe[1] >= 0)
+        close(_daemon_retval_pipe[1]);
+
+    _daemon_retval_pipe[0] = _daemon_retval_pipe[1] = -1;
+
+    errno = saved_errno;
+}
+
+int daemon_retval_send(int i) {
+    ssize_t r;
+
+    if (_daemon_retval_pipe[1] < 0) {
+        errno = EINVAL;
+        return -1;
+    }
+
+    r = atomic_write(_daemon_retval_pipe[1], &i, sizeof(i));
+
+    daemon_retval_done();
+
+    if (r != sizeof(i)) {
+
+        if (r < 0)
+            daemon_log(LOG_ERR, "write() failed while writing return value to pipe: %s", strerror(errno));
+        else {
+            daemon_log(LOG_ERR, "write() too short while writing return value from pipe");
+            errno = EINVAL;
+        }
+
+        return -1;
+    }
+
+    return 0;
+}
+
+int daemon_retval_wait(int timeout) {
+    ssize_t r;
+    int i;
+
+    if (timeout > 0) {
+        struct timeval tv;
+        int s;
+        fd_set fds;
+
+        tv.tv_sec = timeout;
+        tv.tv_usec = 0;
+
+        FD_ZERO(&fds);
+        FD_SET(_daemon_retval_pipe[0], &fds);
+
+        if ((s = select(FD_SETSIZE, &fds, 0, 0, &tv)) != 1) {
+
+            if (s < 0)
+                daemon_log(LOG_ERR, "select() failed while waiting for return value: %s", strerror(errno));
+            else {
+                errno = ETIMEDOUT;
+                daemon_log(LOG_ERR, "Timeout reached while wating for return value");
+            }
+
+            return -1;
+        }
+    }
+
+    if ((r = atomic_read(_daemon_retval_pipe[0], &i, sizeof(i))) != sizeof(i)) {
+
+        if (r < 0)
+            daemon_log(LOG_ERR, "read() failed while reading return value from pipe: %s", strerror(errno));
+        else if (r == 0) {
+            daemon_log(LOG_ERR, "read() failed with EOF while reading return value from pipe.");
+            errno = EINVAL;
+        } else if (r > 0) {
+            daemon_log(LOG_ERR, "read() too short while reading return value from pipe.");
+            errno = EINVAL;
+        }
+
+        return -1;
+    }
+
+    daemon_retval_done();
+
+    return i;
+}
+
+int daemon_close_all(int except_fd, ...) {
+    va_list ap;
+    int n = 0, i, r;
+    int *p;
+    int saved_errno;
+
+    va_start(ap, except_fd);
+
+    if (except_fd >= 0)
+        for (n = 1; va_arg(ap, int) >= 0; n++)
+            ;
+
+    va_end(ap);
+
+    if (!(p = malloc(sizeof(int) * (n+1))))
+        return -1;
+
+    va_start(ap, except_fd);
+
+    i = 0;
+    if (except_fd >= 0) {
+        int fd;
+        p[i++] = except_fd;
+
+        while ((fd = va_arg(ap, int)) >= 0)
+            p[i++] = fd;
+    }
+    p[i] = -1;
+
+    va_end(ap);
+
+    r = daemon_close_allv(p);
+
+    saved_errno = errno;
+    free(p);
+    errno = saved_errno;
+
+    return r;
+}
+
+/** Same as daemon_close_all but takes an array of fds, terminated by -1 */
+int daemon_close_allv(const int except_fds[]) {
+    struct rlimit rl;
+    int fd, maxfd;
+
+#ifdef __linux__
+    int saved_errno;
+
+    DIR *d;
+
+    if ((d = opendir("/proc/self/fd"))) {
+
+        struct dirent *de;
+
+        while ((de = readdir(d))) {
+            int found;
+            long l;
+            char *e = NULL;
+            int i;
+
+            if (de->d_name[0] == '.')
+                continue;
+
+            errno = 0;
+            l = strtol(de->d_name, &e, 10);
+            if (errno != 0 || !e || *e) {
+                closedir(d);
+                errno = EINVAL;
+                return -1;
+            }
+
+            fd = (int) l;
+
+            if ((long) fd != l) {
+                closedir(d);
+                errno = EINVAL;
+                return -1;
+            }
+
+            if (fd < 3)
+                continue;
+
+            if (fd == dirfd(d))
+                continue;
+
+            if (fd == _daemon_retval_pipe[1])
+                continue;
+
+            found = 0;
+            for (i = 0; except_fds[i] >= 0; i++)
+                if (except_fds[i] == fd) {
+                    found = 1;
+                    break;
+                }
+
+            if (found)
+                continue;
+
+            if (close(fd) < 0) {
+                saved_errno = errno;
+                closedir(d);
+                errno = saved_errno;
+
+                return -1;
+            }
+
+            if (fd == _daemon_retval_pipe[0])
+                _daemon_retval_pipe[0] = -1;    /* mark as closed */
+        }
+
+        closedir(d);
+        return 0;
+    }
+
+#endif
+
+    if (getrlimit(RLIMIT_NOFILE, &rl) > 0)
+        maxfd = (int) rl.rlim_max;
+    else
+        maxfd = sysconf(_SC_OPEN_MAX);
+
+    for (fd = 3; fd < maxfd; fd++) {
+        int i, found;
+
+        if (fd == _daemon_retval_pipe[1])
+            continue;
+
+        found = 0;
+        for (i = 0; except_fds[i] >= 0; i++)
+            if (except_fds[i] == fd) {
+                found = 1;
+                break;
+            }
+
+        if (found)
+            continue;
+
+        if (close(fd) < 0 && errno != EBADF)
+            return -1;
+
+        if (fd == _daemon_retval_pipe[0])
+            _daemon_retval_pipe[0] = -1;        /* mark as closed */
+    }
+
+    return 0;
+}
+
+int daemon_unblock_sigs(int except, ...) {
+    va_list ap;
+    int n = 0, i, r;
+    int *p;
+    int saved_errno;
+
+    va_start(ap, except);
+
+    if (except >= 1)
+        for (n = 1; va_arg(ap, int) >= 0; n++)
+            ;
+
+    va_end(ap);
+
+    if (!(p = malloc(sizeof(int) * (n+1))))
+        return -1;
+
+    va_start(ap, except);
+
+    i = 0;
+    if (except >= 1) {
+        int sig;
+        p[i++] = except;
+
+        while ((sig = va_arg(ap, int)) >= 0)
+            p[i++] = sig;
+    }
+    p[i] = -1;
+
+    va_end(ap);
+
+    r = daemon_unblock_sigsv(p);
+
+    saved_errno = errno;
+    free(p);
+    errno = saved_errno;
+
+    return r;
+}
+
+int daemon_unblock_sigsv(const int except[]) {
+    int i;
+    sigset_t ss;
+
+    if (sigemptyset(&ss) < 0)
+        return -1;
+
+    for (i = 0; except[i] > 0; i++)
+        if (sigaddset(&ss, except[i]) < 0)
+            return -1;
+
+    return sigprocmask(SIG_SETMASK, &ss, NULL);
+}
+
+int daemon_reset_sigs(int except, ...) {
+    va_list ap;
+    int n = 0, i, r;
+    int *p;
+    int saved_errno;
+
+    va_start(ap, except);
+
+    if (except >= 1)
+        for (n = 1; va_arg(ap, int) >= 0; n++)
+            ;
+
+    va_end(ap);
+
+    if (!(p = malloc(sizeof(int) * (n+1))))
+        return -1;
+
+    va_start(ap, except);
+
+    i = 0;
+    if (except >= 1) {
+        int sig;
+        p[i++] = except;
+
+        while ((sig = va_arg(ap, int)) >= 0)
+            p[i++] = sig;
+    }
+    p[i] = -1;
+
+    va_end(ap);
+
+    r = daemon_reset_sigsv(p);
+
+    saved_errno = errno;
+    free(p);
+    errno = saved_errno;
+
+    return r;
+}
+
+int daemon_reset_sigsv(const int except[]) {
+    int sig;
+
+    for (sig = 1; sig < SIGNAL_UPPER_BOUND; sig++) {
+        int reset = 1;
+
+        switch (sig) {
+            case SIGKILL:
+            case SIGSTOP:
+                reset = 0;
+                break;
+
+            default: {
+                int i;
+
+                for (i = 0; except[i] > 0; i++) {
+                    if (sig == except[i]) {
+                        reset = 0;
+                        break;
+                    }
+                }
+            }
+        }
+
+        if (reset) {
+            struct sigaction sa;
+
+            memset(&sa, 0, sizeof(sa));
+            sa.sa_handler = SIG_DFL;
+
+            /* On Linux the first two RT signals are reserved by
+             * glibc, and sigaction() will return EINVAL for them. */
+            if ((sigaction(sig, &sa, NULL) < 0))
+                if (errno != EINVAL)
+                    return -1;
+        }
+    }
+
+    return 0;
+}
diff --git a/libdaemon/libdaemon/dfork.h b/libdaemon/libdaemon/dfork.h
new file mode 100644
index 0000000..47b1630
--- /dev/null
+++ b/libdaemon/libdaemon/dfork.h
@@ -0,0 +1,165 @@
+#ifndef foodaemonforkhfoo
+#define foodaemonforkhfoo
+
+/***
+  This file is part of libdaemon.
+
+  Copyright 2003-2008 Lennart Poettering
+
+  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.
+
+***/
+
+#include <sys/types.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/** \mainpage libdaemon
+ *
+ * libdaemon
+ *
+ * For a brief explanation of libdaemons's purpose, have a look on the
+ * README file. Thank you!
+ *
+ */
+
+/** \example testd.c
+ * This is an example for the usage of libdaemon
+ */
+
+/** \file
+ *
+ * Contains an API for doing a daemonizing fork().
+ *
+ * You may daemonize by calling daemon_fork(), a function similar to
+ * the plain fork(). If you want to return a return value of the
+ * initialization procedure of the child from the parent, you may use
+ * the daemon_retval_xxx() functions.
+ */
+
+/** Does a daemonizing fork(). For the new daemon process STDIN,
+ * STDOUT, STDERR are connected to /dev/null, the process is a session
+ * leader, the current directory is changed to /, the umask is set to
+ * 777.
+ * @return On success, the PID of the child process is returned in the
+ * parent's thread of execution, and a 0 is returned in the child's
+ * thread of execution. On failure, -1 will be returned in the
+ * parent's context, no child process will be created, and errno will
+ * be set appropriately.
+ */
+pid_t daemon_fork(void);
+
+/** Allocate and initialize resources required by the
+ * daemon_retval_xxx() functions. These functions allow the child to
+ * send a value to the parent after completing its initialisation.
+ * Call this in the parent before forking.
+ * @return zero on success, nonzero on failure.
+ */
+int daemon_retval_init(void);
+
+/** Frees the resources allocated by daemon_retval_init(). This should
+ * be called if neither daemon_retval_wait() nor daemon_retval_send()
+ * is called in the current process. The resources allocated by
+ * daemon_retval_init() should be freed in both parent and daemon
+ * process. This may be achieved by using daemon_retval_wait()
+ * resp. daemon_retval_send(), or by using daemon_retval_done().
+ */
+void daemon_retval_done(void);
+
+/** Return the value sent by the child via the daemon_retval_send()
+ * function, but wait only the specified number of seconds before
+ * timing out and returning a negative number. Should be called just
+ * once from the parent process only. A subsequent call to
+ * daemon_retval_done() in the parent is ignored.
+ *
+ * @param timeout Thetimeout in seconds
+ * @return The integer passed daemon_retval_send() in the daemon process, or -1 on failure.
+ */
+int daemon_retval_wait(int timeout);
+
+/** Send the specified integer to the parent process. Do not send -1
+ * because this signifies a library error. Should be called just once
+ * from the daemon process only. A subsequent call to
+ * daemon_retval_done() in the daemon is ignored.  @param s The
+ * integer to pass to daemon_retval_wait() in the parent process
+ * @return Zero on success, nonzero on failure.
+ */
+int daemon_retval_send(int s);
+
+/** This variable is defined to 1 iff daemon_close_all() and
+ * daemon_close_allv() are supported.
+ * @since 0.11
+ * @see daemon_close_all(), daemon_close_allv() */
+#define DAEMON_CLOSE_ALL_AVAILABLE 1
+
+/** Close all file descriptors except those passed. List needs to be
+ * terminated by -1. FDs 0, 1, 2 will be kept open anyway.
+ * @since 0.11
+ * @see DAEMON_CLOSE_ALL_AVAILABLE */
+int daemon_close_all(int except_fd, ...);
+
+/** Same as daemon_close_all but takes an array of fds, terminated by
+ * -1
+ * @since 0.11
+ * @see DAEMON_CLOSE_ALL_AVAILABLE */
+int daemon_close_allv(const int except_fds[]);
+
+/** This variable is defined to 1 iff daemon_unblock_sigs() and
+ * daemon_unblock_sigsv() are supported.
+ * @since 0.13
+ * @see daemon_unblock_sigs(), daemon_unblock_sigsv()*/
+#define DAEMON_UNBLOCK_SIGS_AVAILABLE 1
+
+/** Unblock all signals except those passed. List needs to be
+ * terminated by -1.
+ * @since 0.13
+ * @see DAEMON_UNBLOCK_SIGS_AVAILABLE */
+int daemon_unblock_sigs(int except, ...);
+
+/** Same as daemon_unblock_sigs() but takes an array of signals,
+ * terminated by -1
+ * @since 0.13
+ * @see DAEMON_UNBLOCK_SIGS_AVAILABLE */
+int daemon_unblock_sigsv(const int except[]);
+
+/** This variable is defined to 1 iff daemon_reset_sigs() and
+ * daemon_reset_sigsv() are supported.
+ * @since 0.13
+ * @see daemon_reset_sigs(), daemon_reset_sigsv() */
+#define DAEMON_RESET_SIGS_AVAILABLE 1
+
+/** Reset all signal handlers except those passed. List needs to be
+ * terminated by -1.
+ * @since 0.13
+ * @see DAEMON_RESET_SIGS_AVAILABLE */
+int daemon_reset_sigs(int except, ...);
+
+/** Same as daemon_reset_sigs() but takes an array of signals,
+ * terminated by -1
+ * @since 0.13
+ * @see DAEMON_RESET_SIGS_AVAILABLE */
+int daemon_reset_sigsv(const int except[]);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/libdaemon/libdaemon/dlog.c b/libdaemon/libdaemon/dlog.c
new file mode 100644
index 0000000..1cc0566
--- /dev/null
+++ b/libdaemon/libdaemon/dlog.c
@@ -0,0 +1,93 @@
+/***
+  This file is part of libdaemon.
+
+  Copyright 2003-2008 Lennart Poettering
+
+  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.
+
+***/
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include <stdarg.h>
+#include <stdio.h>
+#include <string.h>
+#include <errno.h>
+
+#include "dlog.h"
+
+enum daemon_log_flags daemon_log_use = DAEMON_LOG_AUTO|DAEMON_LOG_STDERR;
+const char* daemon_log_ident = NULL;
+
+static int daemon_verbosity_level = LOG_INFO;
+
+void daemon_set_verbosity(int verbosity_prio) {
+
+    /* Allow using negative verbosity levels to hide _all_ messages */
+    if (verbosity_prio > 0 && (verbosity_prio & LOG_PRIMASK) != LOG_PRIMASK)
+        daemon_log(LOG_ERR, "The value %d is not a valid priority value", verbosity_prio);
+
+    daemon_verbosity_level = verbosity_prio & LOG_PRIMASK;
+}
+
+void daemon_logv(int prio, const char* template, va_list arglist) {
+    int saved_errno;
+
+    saved_errno = errno;
+
+    if (daemon_log_use & DAEMON_LOG_SYSLOG) {
+        openlog(daemon_log_ident ? daemon_log_ident : "UNKNOWN", LOG_PID, LOG_DAEMON);
+        vsyslog(prio | LOG_DAEMON, template, arglist);
+    }
+
+    if (prio > daemon_verbosity_level)
+        goto end_daemon_logv;
+
+    if (daemon_log_use & DAEMON_LOG_STDERR) {
+        vfprintf(stderr, template, arglist);
+        fprintf(stderr, "\n");
+    }
+
+    if (daemon_log_use & DAEMON_LOG_STDOUT) {
+        vfprintf(stdout, template, arglist);
+        fprintf(stdout, "\n");
+    }
+
+ end_daemon_logv:
+    errno = saved_errno;
+}
+
+void daemon_log(int prio, const char* template, ...) {
+    va_list arglist;
+
+    va_start(arglist, template);
+    daemon_logv(prio, template, arglist);
+    va_end(arglist);
+}
+
+char *daemon_ident_from_argv0(char *argv0) {
+    char *p;
+
+    if ((p = strrchr(argv0, '/')))
+        return p+1;
+
+    return argv0;
+}
diff --git a/libdaemon/libdaemon/dlog.h b/libdaemon/libdaemon/dlog.h
new file mode 100644
index 0000000..deea520
--- /dev/null
+++ b/libdaemon/libdaemon/dlog.h
@@ -0,0 +1,119 @@
+#ifndef foodaemonloghfoo
+#define foodaemonloghfoo
+
+/***
+  This file is part of libdaemon.
+
+  Copyright 2003-2008 Lennart Poettering
+
+  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.
+
+***/
+
+#include <syslog.h>
+#include <stdarg.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/** \file
+ *
+ * Contains a robust API for logging messages
+ */
+
+/** Specifies where to send the log messages to. The global variable daemon_log_use takes values of this type.
+ */
+enum daemon_log_flags {
+    DAEMON_LOG_SYSLOG = 1,   /**< Log messages are written to syslog */
+    DAEMON_LOG_STDERR = 2,   /**< Log messages are written to STDERR */
+    DAEMON_LOG_STDOUT = 4,   /**< Log messages are written to STDOUT */
+    DAEMON_LOG_AUTO = 8      /**< If this is set a daemon_fork() will
+                                  change this to DAEMON_LOG_SYSLOG in
+                                  the daemon process. */
+};
+
+/** This variable is used to specify the log target(s) to
+ * use. Defaults to DAEMON_LOG_STDERR|DAEMON_LOG_AUTO */
+extern enum daemon_log_flags daemon_log_use;
+
+/** Specifies the syslog identification, use daemon_ident_from_argv0()
+ * to set this to a sensible value or generate your own. */
+extern const char* daemon_log_ident;
+
+#if defined(__GNUC__) && ! defined(DAEMON_GCC_PRINTF_ATTR)
+#define DAEMON_GCC_PRINTF_ATTR(a,b) __attribute__ ((format (printf, a, b)))
+#else
+/** A macro for making use of GCCs printf compilation warnings */
+#define DAEMON_GCC_PRINTF_ATTR(a,b)
+#endif
+
+/** Log a message using printf format strings using the specified syslog priority
+ * @param prio The syslog priority (PRIO_xxx constants)
+ * @param t,... The text message to log
+ */
+void daemon_log(int prio, const char* t, ...) DAEMON_GCC_PRINTF_ATTR(2,3);
+
+/** This variable is defined to 1 iff daemon_logv() is supported.
+ * @since 0.11
+ * @see daemon_logv()
+ */
+#define DAEMON_LOGV_AVAILABLE 1
+
+/** Same as daemon_log(), but without variadic arguments
+ * @since 0.11
+ * @see DAEMON_LOGV_AVAILABLE
+ */
+void daemon_logv(int prio, const char* t, va_list ap);
+
+/** Return a sensible syslog identification for daemon_log_ident
+ * generated from argv[0]. This will return a pointer to the file name
+ * of argv[0], i.e. strrchr(argv[0], '\')+1
+ * @param argv0 argv[0] as passed to main()
+ * @return The identification string
+ */
+char *daemon_ident_from_argv0(char *argv0);
+
+/** This variable is defined to 1 iff daemon_set_verbosity() is available.
+ * @since 0.14
+ * @see daemon_set_verbosity()
+ */
+#define DAEMON_SET_VERBOSITY_AVAILABLE 1
+
+/** Setter for the verbosity level of standard output.
+ *
+ * @param verbosity_prio Minimum priority level for messages to output
+ * on standard output/error
+ *
+ * Allows to decide which messages to output on standard output/error
+ * streams. All messages are logged to syslog and this setting does
+ * not influence that.
+ *
+ * The default value is LOG_WARNING.
+ *
+ * @since 0.14
+ * @see DAEMON_SET_VERBOSITY_AVAILABLE
+ */
+void daemon_set_verbosity(int verbosity_prio);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/libdaemon/libdaemon/dnonblock.c b/libdaemon/libdaemon/dnonblock.c
new file mode 100644
index 0000000..003514e
--- /dev/null
+++ b/libdaemon/libdaemon/dnonblock.c
@@ -0,0 +1,49 @@
+/***
+  This file is part of libdaemon.
+
+  Copyright 2003-2008 Lennart Poettering
+
+  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.
+
+***/
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include <fcntl.h>
+
+#include "dnonblock.h"
+
+int daemon_nonblock(int fd, int b) {
+    int a, c;
+
+    if ((a = fcntl(fd, F_GETFL)) < 0)
+        return -1;
+
+    if (b)
+        c = a | O_NONBLOCK;
+    else
+        c = a & ~O_NONBLOCK;
+
+    if (c == a)
+        return 0;
+
+    return fcntl(fd, F_SETFL, c);
+}
diff --git a/libdaemon/libdaemon/dnonblock.h b/libdaemon/libdaemon/dnonblock.h
new file mode 100644
index 0000000..e39da4e
--- /dev/null
+++ b/libdaemon/libdaemon/dnonblock.h
@@ -0,0 +1,52 @@
+#ifndef foodaemonnonblockhfoo
+#define foodaemonnonblockhfoo
+
+/***
+  This file is part of libdaemon.
+
+  Copyright 2003-2008 Lennart Poettering
+
+  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.
+
+***/
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/** \file
+ *
+ * Contains a single function used to change a file descriptor to
+ * non-blocking mode using fcntl().
+ */
+
+/** Change the passed file descriptor to non-blocking or blocking
+ * mode, depending on b.
+ * @param fd The file descriptor to manipulation
+ * @param b TRUE if non-blocking mode should be enabled, FALSE if it
+ * should be disabled
+ * @return Zero on success, nonzero on failure.
+ */
+int daemon_nonblock(int fd, int b);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/libdaemon/libdaemon/dpid.c b/libdaemon/libdaemon/dpid.c
new file mode 100644
index 0000000..7f66d0b
--- /dev/null
+++ b/libdaemon/libdaemon/dpid.c
@@ -0,0 +1,281 @@
+/***
+  This file is part of libdaemon.
+
+  Copyright 2003-2008 Lennart Poettering
+
+  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.
+
+***/
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include <limits.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <signal.h>
+#include <string.h>
+#include <unistd.h>
+#include <errno.h>
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <time.h>
+#include <sys/select.h>
+#include <fcntl.h>
+#include <stddef.h>
+#include <sys/time.h>
+
+#include "dpid.h"
+#include "dlog.h"
+
+#ifndef ETIME
+#define ETIME ETIMEDOUT /* For FreeBSD */
+#endif
+
+#ifndef PATH_MAX
+#define PATH_MAX 512
+#endif
+
+#define VARRUN LOCALSTATEDIR "/run"
+
+const char *daemon_pid_file_ident = NULL;
+daemon_pid_file_proc_t daemon_pid_file_proc = daemon_pid_file_proc_default;
+
+const char *daemon_pid_file_proc_default(void) {
+#ifdef HAVE_ASPRINTF
+    static char *fn = NULL;
+    free(fn);
+    asprintf(&fn,  "%s/%s.pid", VARRUN, daemon_pid_file_ident ? daemon_pid_file_ident : "unknown");
+#else
+    static char fn[PATH_MAX];
+    snprintf(fn, sizeof(fn), "%s/%s.pid", VARRUN, daemon_pid_file_ident ? daemon_pid_file_ident : "unknown");
+#endif
+
+    return fn;
+}
+
+static int lock_file(int fd, int enable) {
+    struct flock f;
+
+    memset(&f, 0, sizeof(f));
+    f.l_type = enable ? F_WRLCK : F_UNLCK;
+    f.l_whence = SEEK_SET;
+    f.l_start = 0;
+    f.l_len = 0;
+
+    if (fcntl(fd, F_SETLKW, &f) < 0) {
+
+        if (enable && errno == EBADF) {
+            f.l_type = F_RDLCK;
+
+            if (fcntl(fd, F_SETLKW, &f) >= 0)
+                return 0;
+        }
+
+        daemon_log(LOG_WARNING, "fcntl(F_SETLKW) failed: %s", strerror(errno));
+        return -1;
+    }
+
+    return 0;
+}
+
+pid_t daemon_pid_file_is_running(void) {
+    const char *fn;
+    static char txt[256];
+    int fd = -1, locked = -1;
+    pid_t ret = (pid_t) -1, pid;
+    ssize_t l;
+    long lpid;
+    char *e = NULL;
+
+    if (!(fn = daemon_pid_file_proc())) {
+        errno = EINVAL;
+        goto finish;
+    }
+
+    if ((fd = open(fn, O_RDWR, 0644)) < 0) {
+        if ((fd = open(fn, O_RDONLY, 0644)) < 0) {
+            if (errno != ENOENT)
+                daemon_log(LOG_WARNING, "Failed to open PID file: %s", strerror(errno));
+
+            goto finish;
+        }
+    }
+
+    if ((locked = lock_file(fd, 1)) < 0)
+        goto finish;
+
+    if ((l = read(fd, txt, sizeof(txt)-1)) < 0) {
+        int saved_errno = errno;
+        daemon_log(LOG_WARNING, "read(): %s", strerror(errno));
+        unlink(fn);
+        errno = saved_errno;
+        goto finish;
+    }
+
+    txt[l] = 0;
+    txt[strcspn(txt, "\r\n")] = 0;
+
+    errno = 0;
+    lpid = strtol(txt, &e, 10);
+    pid = (pid_t) lpid;
+
+    if (errno != 0 || !e || *e || (long) pid != lpid) {
+        daemon_log(LOG_WARNING, "PID file corrupt, removing. (%s)", fn);
+        unlink(fn);
+        errno = EINVAL;
+        goto finish;
+    }
+
+    if (kill(pid, 0) != 0 && errno != EPERM) {
+        int saved_errno = errno;
+        daemon_log(LOG_WARNING, "Process %lu died: %s; trying to remove PID file. (%s)", (unsigned long) pid, strerror(errno), fn);
+        unlink(fn);
+        errno = saved_errno;
+        goto finish;
+    }
+
+    ret = pid;
+
+finish:
+
+    if (fd >= 0) {
+        int saved_errno = errno;
+        if (locked >= 0)
+            lock_file(fd, 0);
+        close(fd);
+        errno = saved_errno;
+    }
+
+    return ret;
+}
+
+int daemon_pid_file_kill(int s) {
+    pid_t pid;
+
+    if ((pid = daemon_pid_file_is_running()) == (pid_t) -1)
+        return -1;
+
+    if (kill(pid, s) < 0)
+        return -1;
+
+    return 0;
+}
+
+int daemon_pid_file_kill_wait(int s, int m) {
+    pid_t pid;
+    time_t t;
+
+    if ((pid = daemon_pid_file_is_running()) < 0)
+        return -1;
+
+    if (kill(pid, s) < 0)
+        return -1;
+
+    t = time(NULL) + m;
+
+    for (;;) {
+        int r;
+        struct timeval tv = { 0, 100000 };
+
+        if (time(NULL) > t) {
+            errno = ETIME;
+            return -1;
+        }
+
+        if ((r = kill(pid, 0)) < 0 && errno != ESRCH)
+            return -1;
+
+        if (r)
+            return 0;
+
+        if (select(0, NULL, NULL, NULL, &tv) < 0)
+            return -1;
+    }
+}
+
+int daemon_pid_file_create(void) {
+    const char *fn;
+    int fd = -1;
+    int ret = -1;
+    int locked = -1;
+    char t[64];
+    ssize_t l;
+    mode_t u;
+
+    u = umask(022);
+
+    if (!(fn = daemon_pid_file_proc())) {
+        errno = EINVAL;
+        goto finish;
+    }
+
+    if ((fd = open(fn, O_CREAT|O_RDWR|O_EXCL, 0644)) < 0) {
+        daemon_log(LOG_ERR, "open(%s): %s", fn, strerror(errno));
+        goto finish;
+    }
+
+    if ((locked = lock_file(fd, 1)) < 0) {
+        int saved_errno = errno;
+        unlink(fn);
+        errno = saved_errno;
+        goto finish;
+    }
+
+    snprintf(t, sizeof(t), "%lu\n", (unsigned long) getpid());
+
+    l = strlen(t);
+    if (write(fd, t, l) != l) {
+        int saved_errno = errno;
+        daemon_log(LOG_WARNING, "write(): %s", strerror(errno));
+        unlink(fn);
+        errno = saved_errno;
+        goto finish;
+    }
+
+    ret = 0;
+
+finish:
+
+    if (fd >= 0) {
+        int saved_errno = errno;
+
+        if (locked >= 0)
+            lock_file(fd, 0);
+
+        close(fd);
+        errno = saved_errno;
+    }
+
+    umask(u);
+
+    return ret;
+}
+
+int daemon_pid_file_remove(void) {
+    const char *fn;
+
+    if (!(fn = daemon_pid_file_proc())) {
+        errno = EINVAL;
+        return -1;
+    }
+
+    return unlink(fn);
+}
diff --git a/libdaemon/libdaemon/dpid.h b/libdaemon/libdaemon/dpid.h
new file mode 100644
index 0000000..66cdbb1
--- /dev/null
+++ b/libdaemon/libdaemon/dpid.h
@@ -0,0 +1,106 @@
+#ifndef foodaemonpidhfoo
+#define foodaemonpidhfoo
+
+/***
+  This file is part of libdaemon.
+
+  Copyright 2003-2008 Lennart Poettering
+
+  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.
+
+***/
+
+#include <sys/types.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/** \file
+ *
+ * Contains an API for manipulating PID files.
+ */
+
+/** Prototype of a function for generating the name of a PID file.
+ */
+typedef const char* (*daemon_pid_file_proc_t)(void);
+
+/** Identification string for the PID file name, only used when
+ * daemon_pid_file_proc is set to daemon_pid_file_proc_default(). Use
+ * daemon_ident_from_argv0() to generate an identification string from
+ * argv[0]
+ */
+extern const char *daemon_pid_file_ident;
+
+/** A function pointer which is used to generate the name of the PID
+ * file to manipulate. Points to daemon_pid_file_proc_default() by
+ * default.
+ */
+extern daemon_pid_file_proc_t daemon_pid_file_proc;
+
+/** A function for creating a pid file name from
+ * daemon_pid_file_ident
+ * @return The PID file path
+ */
+const char *daemon_pid_file_proc_default(void);
+
+/** Creates PID pid file for the current process
+ * @return zero on success, nonzero on failure
+ */
+int daemon_pid_file_create(void);
+
+/** Removes the PID file of the current process
+ * @return zero on success, nonzero on failure
+ */
+int daemon_pid_file_remove(void);
+
+/** Returns the PID file of a running daemon, if available
+ * @return The PID or negative on failure
+ */
+pid_t daemon_pid_file_is_running(void);
+
+/** Kills a running daemon, if available
+ * @param s The signal to send
+ * @return zero on success, nonzero on failure
+ */
+int daemon_pid_file_kill(int s);
+
+/** This variable is defined to 1 iff daemon_pid_file_kill_wait() is supported.
+ * @since 0.3
+ * @see daemon_pid_file_kill_wait() */
+#define DAEMON_PID_FILE_KILL_WAIT_AVAILABLE 1
+
+/** Similar to daemon_pid_file_kill() but waits until the process
+ * died.  This functions is new in libdaemon 0.3. The macro
+ * DAEMON_PID_FILE_KILL_WAIT_AVAILABLE is defined iff libdaemon
+ * supports this function.
+ *
+ * @param s The signal to send
+ * @param m Seconds to wait at maximum
+ * @return zero on success, nonzero on failure (timeout condition is considered a failure)
+ * @since 0.3
+ * @see DAEMON_PID_FILE_KILL_WAIT_AVAILABLE
+ */
+int daemon_pid_file_kill_wait(int s, int m);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/libdaemon/libdaemon/dsignal.c b/libdaemon/libdaemon/dsignal.c
new file mode 100644
index 0000000..e60fb38
--- /dev/null
+++ b/libdaemon/libdaemon/dsignal.c
@@ -0,0 +1,160 @@
+/***
+  This file is part of libdaemon.
+
+  Copyright 2003-2008 Lennart Poettering
+
+  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.
+
+***/
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include <fcntl.h>
+#include <unistd.h>
+#include <errno.h>
+#include <string.h>
+#include <stdarg.h>
+#include <signal.h>
+
+#include "dsignal.h"
+#include "dlog.h"
+#include "dnonblock.h"
+
+static int _signal_pipe[2] = { -1, -1 };
+
+static void _sigfunc(int s) {
+    int saved_errno = errno;
+    write(_signal_pipe[1], &s, sizeof(s));
+    errno = saved_errno;
+}
+
+static int _init(void) {
+
+    if (_signal_pipe[0] < 0 || _signal_pipe[1] < 0) {
+        if (pipe(_signal_pipe) < 0) {
+            daemon_log(LOG_ERR, "pipe(): %s", strerror(errno));
+            return -1;
+        }
+
+        if (daemon_nonblock(_signal_pipe[0], 1) < 0 || daemon_nonblock(_signal_pipe[1], 1) < 0) {
+            daemon_signal_done();
+            return -1;
+        }
+    }
+
+    return 0;
+}
+
+int daemon_signal_install(int s){
+    sigset_t ss;
+    struct sigaction sa;
+
+    if (_init() < 0)
+        return -1;
+
+    if (sigemptyset(&ss) < 0) {
+        daemon_log(LOG_ERR, "sigemptyset(): %s", strerror(errno));
+        return -1;
+    }
+
+    if (sigaddset(&ss, s) < 0) {
+        daemon_log(LOG_ERR, "sigaddset(): %s", strerror(errno));
+        return -1;
+    }
+
+    if (sigprocmask(SIG_UNBLOCK, &ss, NULL) < 0) {
+        daemon_log(LOG_ERR, "sigprocmask(): %s", strerror(errno));
+        return -1;
+    }
+
+    memset(&sa, 0, sizeof(sa));
+    sa.sa_handler = _sigfunc;
+    sigemptyset(&sa.sa_mask);
+    sa.sa_flags = SA_RESTART;
+
+    if (sigaction(s, &sa, NULL) < 0) {
+        daemon_log(LOG_ERR, "sigaction(%s, ...) failed: %s", strsignal(s), strerror(errno));
+        return -1;
+    }
+
+    return 0;
+}
+
+int daemon_signal_init(int s, ...) {
+    int sig, r = 0;
+    va_list ap;
+
+    if (_init() < 0)
+        return -1;
+
+    va_start(ap, s);
+
+    sig = s;
+    while (sig > 0) {
+        if ((r = daemon_signal_install(sig)) < 0)
+            break;
+
+        sig = va_arg(ap, int);
+    }
+
+    va_end(ap);
+
+    return r;
+}
+
+void daemon_signal_done(void) {
+    int saved_errno = errno;
+
+    if (_signal_pipe[0] != -1)
+        close(_signal_pipe[0]);
+
+    if (_signal_pipe[1] != -1)
+        close(_signal_pipe[1]);
+
+    _signal_pipe[0] = _signal_pipe[1] = -1;
+
+    errno = saved_errno;
+}
+
+int daemon_signal_next(void) {
+    int s;
+    ssize_t r;
+
+    if ((r = read(_signal_pipe[0], &s, sizeof(s))) == sizeof(s))
+        return s;
+
+    if (r < 0) {
+
+        if (errno == EAGAIN)
+            return 0;
+        else {
+            daemon_log(LOG_ERR, "read(signal_pipe[0], ...): %s", strerror(errno));
+            return -1;
+        }
+    }
+
+    daemon_log(LOG_ERR, "Short read() on signal pipe.");
+    return -1;
+}
+
+int daemon_signal_fd(void) {
+    return _signal_pipe[0];
+}
diff --git a/libdaemon/libdaemon/dsignal.h b/libdaemon/libdaemon/dsignal.h
new file mode 100644
index 0000000..1edfdcc
--- /dev/null
+++ b/libdaemon/libdaemon/dsignal.h
@@ -0,0 +1,80 @@
+#ifndef foodaemonsignalhfoo
+#define foodaemonsignalhfoo
+
+/***
+  This file is part of libdaemon.
+
+  Copyright 2003-2008 Lennart Poettering
+
+  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.
+
+***/
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/** \file
+ *
+ * Contains the API for serializing signals to a pipe for
+ * usage with select() or poll().
+ *
+ * You should register all signals you
+ * wish to handle with select() in your main loop with
+ * daemon_signal_init() or daemon_signal_install(). After that you
+ * should sleep on the file descriptor returned by daemon_signal_fd()
+ * and get the next signal recieved with daemon_signal_next(). You
+ * should call daemon_signal_done() before exiting.
+ */
+
+/** Installs signal handlers for the specified signals
+ * @param s, ... The signals to install handlers for. The list should be terminated by 0
+ * @return zero on success, nonzero on failure
+ */
+int daemon_signal_init(int s, ...);
+
+/** Install a  signal handler for the specified signal
+ * @param s The signalto install handler for
+ * @return zero onsuccess,nonzero on failure
+ */
+int daemon_signal_install(int s);
+
+/** Free resources of signal handling, should be called before daemon exit
+ */
+void daemon_signal_done(void);
+
+/** Return the next signal recieved. This function will not
+ * block. Instead it returns 0 if no signal is queued.
+ * @return The next queued signal if one is queued, zero if none is
+ * queued, negative on failure.
+ */
+int daemon_signal_next(void);
+
+/** Return the file descriptor the daemon should select() on for
+ * reading. Whenever the descriptor is ready you should call
+ * daemon_signal_next() to get the next signal queued.
+ * @return The file descriptor or negative on failure
+ */
+int daemon_signal_fd(void);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/libdaemon/m4/attributes.m4 b/libdaemon/m4/attributes.m4
new file mode 100644
index 0000000..e86456a
--- /dev/null
+++ b/libdaemon/m4/attributes.m4
@@ -0,0 +1,311 @@
+dnl Macros to check the presence of generic (non-typed) symbols.
+dnl Copyright (c) 2006-2007 Diego Pettenò <flameeyes@gmail.com>
+dnl Copyright (c) 2006-2007 xine project
+dnl
+dnl This program is free software; you can redistribute it and/or modify
+dnl it under the terms of the GNU General Public License as published by
+dnl the Free Software Foundation; either version 2, or (at your option)
+dnl any later version.
+dnl
+dnl This program is distributed in the hope that it will be useful,
+dnl but WITHOUT ANY WARRANTY; without even the implied warranty of
+dnl MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+dnl GNU General Public License for more details.
+dnl
+dnl You should have received a copy of the GNU General Public License
+dnl along with this program; if not, write to the Free Software
+dnl Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+dnl 02110-1301, USA.
+dnl
+dnl As a special exception, the copyright owners of the
+dnl macro gives unlimited permission to copy, distribute and modify the
+dnl configure scripts that are the output of Autoconf when processing the
+dnl Macro. You need not follow the terms of the GNU General Public
+dnl License when using or distributing such scripts, even though portions
+dnl of the text of the Macro appear in them. The GNU General Public
+dnl License (GPL) does govern all other use of the material that
+dnl constitutes the Autoconf Macro.
+dnl 
+dnl This special exception to the GPL applies to versions of the
+dnl Autoconf Macro released by this project. When you make and
+dnl distribute a modified version of the Autoconf Macro, you may extend
+dnl this special exception to the GPL to apply to your modified version as
+dnl well.
+
+dnl Check if the flag is supported by compiler
+dnl CC_CHECK_CFLAGS_SILENT([FLAG], [ACTION-IF-FOUND],[ACTION-IF-NOT-FOUND])
+
+AC_DEFUN([CC_CHECK_CFLAGS_SILENT], [
+  AC_CACHE_VAL(AS_TR_SH([cc_cv_cflags_$1]),
+    [ac_save_CFLAGS="$CFLAGS"
+     CFLAGS="$CFLAGS $1"
+     AC_COMPILE_IFELSE([int a;],
+       [eval "AS_TR_SH([cc_cv_cflags_$1])='yes'"],
+       [eval "AS_TR_SH([cc_cv_cflags_$1])='no'"])
+     CFLAGS="$ac_save_CFLAGS"
+    ])
+
+  AS_IF([eval test x$]AS_TR_SH([cc_cv_cflags_$1])[ = xyes],
+    [$2], [$3])
+])
+
+dnl Check if the flag is supported by compiler (cacheable)
+dnl CC_CHECK_CFLAGS([FLAG], [ACTION-IF-FOUND],[ACTION-IF-NOT-FOUND])
+
+AC_DEFUN([CC_CHECK_CFLAGS], [
+  AC_CACHE_CHECK([if $CC supports $1 flag],
+    AS_TR_SH([cc_cv_cflags_$1]),
+    CC_CHECK_CFLAGS_SILENT([$1]) dnl Don't execute actions here!
+  )
+
+  AS_IF([eval test x$]AS_TR_SH([cc_cv_cflags_$1])[ = xyes],
+    [$2], [$3])
+])
+
+dnl CC_CHECK_CFLAG_APPEND(FLAG, [action-if-found], [action-if-not-found])
+dnl Check for CFLAG and appends them to CFLAGS if supported
+AC_DEFUN([CC_CHECK_CFLAG_APPEND], [
+  AC_CACHE_CHECK([if $CC supports $1 flag],
+    AS_TR_SH([cc_cv_cflags_$1]),
+    CC_CHECK_CFLAGS_SILENT([$1]) dnl Don't execute actions here!
+  )
+
+  AS_IF([eval test x$]AS_TR_SH([cc_cv_cflags_$1])[ = xyes],
+    [CFLAGS="$CFLAGS $1"; $2], [$3])
+])
+
+dnl CC_CHECK_CFLAGS_APPEND([FLAG1 FLAG2], [action-if-found], [action-if-not])
+AC_DEFUN([CC_CHECK_CFLAGS_APPEND], [
+  for flag in $1; do
+    CC_CHECK_CFLAG_APPEND($flag, [$2], [$3])
+  done
+])
+
+dnl Check if the flag is supported by linker (cacheable)
+dnl CC_CHECK_LDFLAGS([FLAG], [ACTION-IF-FOUND],[ACTION-IF-NOT-FOUND])
+
+AC_DEFUN([CC_CHECK_LDFLAGS], [
+  AC_CACHE_CHECK([if $CC supports $1 flag],
+    AS_TR_SH([cc_cv_ldflags_$1]),
+    [ac_save_LDFLAGS="$LDFLAGS"
+     LDFLAGS="$LDFLAGS $1"
+     AC_LINK_IFELSE([int main() { return 1; }],
+       [eval "AS_TR_SH([cc_cv_ldflags_$1])='yes'"],
+       [eval "AS_TR_SH([cc_cv_ldflags_$1])="])
+     LDFLAGS="$ac_save_LDFLAGS"
+    ])
+
+  AS_IF([eval test x$]AS_TR_SH([cc_cv_ldflags_$1])[ = xyes],
+    [$2], [$3])
+])
+
+dnl define the LDFLAGS_NOUNDEFINED variable with the correct value for
+dnl the current linker to avoid undefined references in a shared object.
+AC_DEFUN([CC_NOUNDEFINED], [
+  dnl We check $host for which systems to enable this for.
+  AC_REQUIRE([AC_CANONICAL_HOST])
+
+  case $host in
+     dnl FreeBSD (et al.) does not complete linking for shared objects when pthreads
+     dnl are requested, as different implementations are present; to avoid problems
+     dnl use -Wl,-z,defs only for those platform not behaving this way.
+     *-freebsd*) ;;
+     *)
+        dnl First of all check for the --no-undefined variant of GNU ld. This allows
+        dnl for a much more readable commandline, so that people can understand what
+        dnl it does without going to look for what the heck -z defs does.
+   	for possible_flags in "-Wl,--no-undefined" "-Wl,-z,defs"; do
+          CC_CHECK_LDFLAGS([$possible_flags], [LDFLAGS_NOUNDEFINED="$possible_flags"])
+	  break
+        done
+	;;
+  esac
+
+  AC_SUBST([LDFLAGS_NOUNDEFINED])
+])
+
+dnl Check for a -Werror flag or equivalent. -Werror is the GCC
+dnl and ICC flag that tells the compiler to treat all the warnings
+dnl as fatal. We usually need this option to make sure that some
+dnl constructs (like attributes) are not simply ignored.
+dnl
+dnl Other compilers don't support -Werror per se, but they support
+dnl an equivalent flag:
+dnl  - Sun Studio compiler supports -errwarn=%all
+AC_DEFUN([CC_CHECK_WERROR], [
+  AC_CACHE_CHECK(
+    [for $CC way to treat warnings as errors],
+    [cc_cv_werror],
+    [CC_CHECK_CFLAGS_SILENT([-Werror], [cc_cv_werror=-Werror],
+      [CC_CHECK_CFLAGS_SILENT([-errwarn=%all], [cc_cv_werror=-errwarn=%all])])
+    ])
+])
+
+AC_DEFUN([CC_CHECK_ATTRIBUTE], [
+  AC_REQUIRE([CC_CHECK_WERROR])
+  AC_CACHE_CHECK([if $CC supports __attribute__(( ifelse([$2], , [$1], [$2]) ))],
+    AS_TR_SH([cc_cv_attribute_$1]),
+    [ac_save_CFLAGS="$CFLAGS"
+     CFLAGS="$CFLAGS $cc_cv_werror"
+     AC_COMPILE_IFELSE([$3],
+       [eval "AS_TR_SH([cc_cv_attribute_$1])='yes'"],
+       [eval "AS_TR_SH([cc_cv_attribute_$1])='no'"])
+     CFLAGS="$ac_save_CFLAGS"
+    ])
+
+  AS_IF([eval test x$]AS_TR_SH([cc_cv_attribute_$1])[ = xyes],
+    [AC_DEFINE(
+       AS_TR_CPP([SUPPORT_ATTRIBUTE_$1]), 1,
+         [Define this if the compiler supports __attribute__(( ifelse([$2], , [$1], [$2]) ))]
+         )
+     $4],
+    [$5])
+])
+
+AC_DEFUN([CC_ATTRIBUTE_CONSTRUCTOR], [
+  CC_CHECK_ATTRIBUTE(
+    [constructor],,
+    [void __attribute__((constructor)) ctor() { int a; }],
+    [$1], [$2])
+])
+
+AC_DEFUN([CC_ATTRIBUTE_FORMAT], [
+  CC_CHECK_ATTRIBUTE(
+    [format], [format(printf, n, n)],
+    [void __attribute__((format(printf, 1, 2))) printflike(const char *fmt, ...) { fmt = (void *)0; }],
+    [$1], [$2])
+])
+
+AC_DEFUN([CC_ATTRIBUTE_FORMAT_ARG], [
+  CC_CHECK_ATTRIBUTE(
+    [format_arg], [format_arg(printf)],
+    [char *__attribute__((format_arg(1))) gettextlike(const char *fmt) { fmt = (void *)0; }],
+    [$1], [$2])
+])
+
+AC_DEFUN([CC_ATTRIBUTE_VISIBILITY], [
+  CC_CHECK_ATTRIBUTE(
+    [visibility_$1], [visibility("$1")],
+    [void __attribute__((visibility("$1"))) $1_function() { }],
+    [$2], [$3])
+])
+
+AC_DEFUN([CC_ATTRIBUTE_NONNULL], [
+  CC_CHECK_ATTRIBUTE(
+    [nonnull], [nonnull()],
+    [void __attribute__((nonnull())) some_function(void *foo, void *bar) { foo = (void*)0; bar = (void*)0; }],
+    [$1], [$2])
+])
+
+AC_DEFUN([CC_ATTRIBUTE_UNUSED], [
+  CC_CHECK_ATTRIBUTE(
+    [unused], ,
+    [void some_function(void *foo, __attribute__((unused)) void *bar);],
+    [$1], [$2])
+])
+
+AC_DEFUN([CC_ATTRIBUTE_SENTINEL], [
+  CC_CHECK_ATTRIBUTE(
+    [sentinel], ,
+    [void some_function(void *foo, ...) __attribute__((sentinel));],
+    [$1], [$2])
+])
+
+AC_DEFUN([CC_ATTRIBUTE_DEPRECATED], [
+  CC_CHECK_ATTRIBUTE(
+    [deprecated], ,
+    [void some_function(void *foo, ...) __attribute__((deprecated));],
+    [$1], [$2])
+])
+
+AC_DEFUN([CC_ATTRIBUTE_ALIAS], [
+  CC_CHECK_ATTRIBUTE(
+    [alias], [weak, alias],
+    [void other_function(void *foo) { }
+     void some_function(void *foo) __attribute__((weak, alias("other_function")));],
+    [$1], [$2])
+])
+
+AC_DEFUN([CC_ATTRIBUTE_MALLOC], [
+  CC_CHECK_ATTRIBUTE(
+    [malloc], ,
+    [void * __attribute__((malloc)) my_alloc(int n);],
+    [$1], [$2])
+])
+
+AC_DEFUN([CC_ATTRIBUTE_PACKED], [
+  CC_CHECK_ATTRIBUTE(
+    [packed], ,
+    [struct astructure { char a; int b; long c; void *d; } __attribute__((packed));],
+    [$1], [$2])
+])
+
+AC_DEFUN([CC_ATTRIBUTE_CONST], [
+  CC_CHECK_ATTRIBUTE(
+    [const], ,
+    [int __attribute__((const)) twopow(int n) { return 1 << n; } ],
+    [$1], [$2])
+])
+
+AC_DEFUN([CC_FLAG_VISIBILITY], [
+  AC_REQUIRE([CC_CHECK_WERROR])
+  AC_CACHE_CHECK([if $CC supports -fvisibility=hidden],
+    [cc_cv_flag_visibility],
+    [cc_flag_visibility_save_CFLAGS="$CFLAGS"
+     CFLAGS="$CFLAGS $cc_cv_werror"
+     CC_CHECK_CFLAGS_SILENT([-fvisibility=hidden],
+	cc_cv_flag_visibility='yes',
+	cc_cv_flag_visibility='no')
+     CFLAGS="$cc_flag_visibility_save_CFLAGS"])
+  
+  AS_IF([test "x$cc_cv_flag_visibility" = "xyes"],
+    [AC_DEFINE([SUPPORT_FLAG_VISIBILITY], 1,
+       [Define this if the compiler supports the -fvisibility flag])
+     $1],
+    [$2])
+])
+
+AC_DEFUN([CC_FUNC_EXPECT], [
+  AC_REQUIRE([CC_CHECK_WERROR])
+  AC_CACHE_CHECK([if compiler has __builtin_expect function],
+    [cc_cv_func_expect],
+    [ac_save_CFLAGS="$CFLAGS"
+     CFLAGS="$CFLAGS $cc_cv_werror"
+     AC_COMPILE_IFELSE(
+       [int some_function() {
+        int a = 3;
+        return (int)__builtin_expect(a, 3);
+	}],
+       [cc_cv_func_expect=yes],
+       [cc_cv_func_expect=no])
+     CFLAGS="$ac_save_CFLAGS"
+    ])
+
+  AS_IF([test "x$cc_cv_func_expect" = "xyes"],
+    [AC_DEFINE([SUPPORT__BUILTIN_EXPECT], 1,
+     [Define this if the compiler supports __builtin_expect() function])
+     $1],
+    [$2])
+])
+
+AC_DEFUN([CC_ATTRIBUTE_ALIGNED], [
+  AC_REQUIRE([CC_CHECK_WERROR])
+  AC_CACHE_CHECK([highest __attribute__ ((aligned ())) supported],
+    [cc_cv_attribute_aligned],
+    [ac_save_CFLAGS="$CFLAGS"
+     CFLAGS="$CFLAGS $cc_cv_werror"
+     for cc_attribute_align_try in 64 32 16 8 4 2; do
+        AC_COMPILE_IFELSE([
+          int main() {
+            static char c __attribute__ ((aligned($cc_attribute_align_try))) = 0;
+            return c;
+          }], [cc_cv_attribute_aligned=$cc_attribute_align_try; break])
+     done
+     CFLAGS="$ac_save_CFLAGS"
+  ])
+
+  if test "x$cc_cv_attribute_aligned" != "x"; then
+     AC_DEFINE_UNQUOTED([ATTRIBUTE_ALIGNED_MAX], [$cc_cv_attribute_aligned],
+       [Define the highest alignment supported])
+  fi
+])
diff --git a/libdaemon/m4/zp_lynx_doc.m4 b/libdaemon/m4/zp_lynx_doc.m4
new file mode 100644
index 0000000..955a6ca
--- /dev/null
+++ b/libdaemon/m4/zp_lynx_doc.m4
@@ -0,0 +1,24 @@
+dnl Macro for enabling LYNX-based documentation generation
+
+AC_DEFUN([ZP_LYNX_DOC], [
+  AC_ARG_ENABLE(lynx,
+     AS_HELP_STRING([--disable-lynx],
+        [Turn off lynx usage for documentation generation]),,
+     [enable_lynx=yes])
+
+  case "${enable_lynx}" in
+    yes)
+      AC_CHECK_PROG(have_lynx, lynx, yes, no)
+
+      if test x$have_lynx = xno ; then
+         AC_MSG_WARN([*** lynx not found, plain text README will not be built ***])
+      fi
+      ;;
+    no)
+      have_lynx=no ;;
+    *)
+      AC_MSG_ERROR(bad value ${enableval} for --disable-lynx) ;;
+  esac
+
+  AM_CONDITIONAL([USE_LYNX], [test "x$have_lynx" = xyes])
+])
diff --git a/libdaemon/pkgconfig/libdaemon-uninstalled.pc.in b/libdaemon/pkgconfig/libdaemon-uninstalled.pc.in
new file mode 100644
index 0000000..3ceb71b
--- /dev/null
+++ b/libdaemon/pkgconfig/libdaemon-uninstalled.pc.in
@@ -0,0 +1,8 @@
+libdir=@abs_top_builddir@/libdaemon/.libs
+includedir=@abs_top_srcdir@
+
+Name: libdaemon
+Description: a lightweight C library that eases the writing of UNIX daemons
+Version: @PACKAGE_VERSION@
+Libs: -L${libdir} -R${libdir} -ldaemon
+Cflags: -D_REENTRANT -I${includedir}
diff --git a/libdaemon/pkgconfig/libdaemon.pc.in b/libdaemon/pkgconfig/libdaemon.pc.in
new file mode 100644
index 0000000..835dcf1
--- /dev/null
+++ b/libdaemon/pkgconfig/libdaemon.pc.in
@@ -0,0 +1,10 @@
+prefix=@prefix@
+exec_prefix=${prefix}
+libdir=@libdir@
+includedir=${prefix}/include
+
+Name: libdaemon
+Description: a lightweight C library that eases the writing of UNIX daemons
+Version: @PACKAGE_VERSION@
+Libs: -L${libdir} -ldaemon
+Cflags: -D_REENTRANT -I${includedir}
