summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorElliott Hughes <enh@google.com>2020-03-26 09:32:38 -0700
committerElliott Hughes <enh@google.com>2020-03-27 08:12:33 -0700
commit21f191b94c4fc3dcb94dcec1d45890c7bc381057 (patch)
tree864c52fff91ada9d6a095df9ed49786356575bf6
parent28f3a699e35dffda867713c10981027f60f2a245 (diff)
downloadlibdaemon-main.tar.gz
Empty out dead project.HEADmastermain
And leave a janitorial OWNERS to prevent necromancy. Test: treehugger Change-Id: I33f5f419909f6c48d56449f7daebd80f9561bc2e
-rw-r--r--.gitignore28
-rw-r--r--Android.bp23
-rw-r--r--LICENSE19
-rw-r--r--MODULE_LICENSE_MIT0
-rw-r--r--Makefile.am59
-rw-r--r--OWNERS1
-rwxr-xr-xbootstrap.sh71
-rw-r--r--config.h209
-rw-r--r--configure.ac94
-rw-r--r--doc/.gitignore5
-rw-r--r--doc/Makefile.am47
-rw-r--r--doc/README.html.in177
-rw-r--r--doc/doxygen.conf.in1161
-rw-r--r--doc/style.css30
-rw-r--r--examples/.gitignore2
-rw-r--r--examples/Makefile.am28
-rw-r--r--examples/testd.c194
-rw-r--r--libdaemon/Makefile.am47
-rw-r--r--libdaemon/daemon.h41
-rw-r--r--libdaemon/dexec.c232
-rw-r--r--libdaemon/dexec.h84
-rw-r--r--libdaemon/dfork.c730
-rw-r--r--libdaemon/dfork.h165
-rw-r--r--libdaemon/dlog.c93
-rw-r--r--libdaemon/dlog.h119
-rw-r--r--libdaemon/dnonblock.c49
-rw-r--r--libdaemon/dnonblock.h52
-rw-r--r--libdaemon/dpid.c281
-rw-r--r--libdaemon/dpid.h106
-rw-r--r--libdaemon/dsignal.c160
-rw-r--r--libdaemon/dsignal.h80
-rw-r--r--m4/.gitignore5
-rw-r--r--m4/attributes.m4311
-rw-r--r--m4/zp_lynx_doc.m424
-rw-r--r--pkgconfig/libdaemon-uninstalled.pc.in8
-rw-r--r--pkgconfig/libdaemon.pc.in10
36 files changed, 1 insertions, 4744 deletions
diff --git a/.gitignore b/.gitignore
deleted file mode 100644
index e723211..0000000
--- a/.gitignore
+++ /dev/null
@@ -1,28 +0,0 @@
-compile
-*~
-*.tar.gz
-config.rpath
-Makefile
-Makefile.in
-*.lo
-*.la
-*.o
-.deps/
-.libs/
-*.cache
-stamp-*
-README
-aclocal.m4
-config.guess
-config.h.in
-config.log
-config.status
-config.sub
-configure
-depcomp
-install-sh
-libdaemon.spec
-libtool
-ltmain.sh
-missing
-*.pc
diff --git a/Android.bp b/Android.bp
deleted file mode 100644
index 452fd2a..0000000
--- a/Android.bp
+++ /dev/null
@@ -1,23 +0,0 @@
-cc_library_shared {
- name: "libdaemon",
-
- srcs: [
- "libdaemon/dexec.c",
- "libdaemon/dfork.c",
- "libdaemon/dlog.c",
- "libdaemon/dnonblock.c",
- "libdaemon/dpid.c",
- "libdaemon/dsignal.c",
- ],
-
- export_include_dirs: ["."],
-
- cflags: [
- "-Wall",
- "-Werror",
- "-Wno-error=user-defined-warnings",
- "-Wno-unused-parameter",
- "-DHAVE_CONFIG_H",
- "-DLOCALSTATEDIR=\"/var\"",
- ],
-}
diff --git a/LICENSE b/LICENSE
deleted file mode 100644
index 9fefbba..0000000
--- a/LICENSE
+++ /dev/null
@@ -1,19 +0,0 @@
-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/MODULE_LICENSE_MIT b/MODULE_LICENSE_MIT
deleted file mode 100644
index e69de29..0000000
--- a/MODULE_LICENSE_MIT
+++ /dev/null
diff --git a/Makefile.am b/Makefile.am
deleted file mode 100644
index ef13592..0000000
--- a/Makefile.am
+++ /dev/null
@@ -1,59 +0,0 @@
-# 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/OWNERS b/OWNERS
new file mode 100644
index 0000000..7529cb9
--- /dev/null
+++ b/OWNERS
@@ -0,0 +1 @@
+include platform/system/core:/janitors/OWNERS
diff --git a/bootstrap.sh b/bootstrap.sh
deleted file mode 100755
index 381f31c..0000000
--- a/bootstrap.sh
+++ /dev/null
@@ -1,71 +0,0 @@
-#!/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/config.h b/config.h
deleted file mode 100644
index f3aede4..0000000
--- a/config.h
+++ /dev/null
@@ -1,209 +0,0 @@
-/* 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/configure.ac b/configure.ac
deleted file mode 100644
index c659e37..0000000
--- a/configure.ac
+++ /dev/null
@@ -1,94 +0,0 @@
-# -*- 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/doc/.gitignore b/doc/.gitignore
deleted file mode 100644
index 54af4f6..0000000
--- a/doc/.gitignore
+++ /dev/null
@@ -1,5 +0,0 @@
-reference
-README
-README.html
-doxygen.conf
-
diff --git a/doc/Makefile.am b/doc/Makefile.am
deleted file mode 100644
index 140ad1a..0000000
--- a/doc/Makefile.am
+++ /dev/null
@@ -1,47 +0,0 @@
-# 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/doc/README.html.in b/doc/README.html.in
deleted file mode 100644
index 2c2cccd..0000000
--- a/doc/README.html.in
+++ /dev/null
@@ -1,177 +0,0 @@
-<?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/doc/doxygen.conf.in b/doc/doxygen.conf.in
deleted file mode 100644
index cace988..0000000
--- a/doc/doxygen.conf.in
+++ /dev/null
@@ -1,1161 +0,0 @@
-# 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/doc/style.css b/doc/style.css
deleted file mode 100644
index 15efaec..0000000
--- a/doc/style.css
+++ /dev/null
@@ -1,30 +0,0 @@
-/***
- 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/examples/.gitignore b/examples/.gitignore
deleted file mode 100644
index db50de7..0000000
--- a/examples/.gitignore
+++ /dev/null
@@ -1,2 +0,0 @@
-testd
-
diff --git a/examples/Makefile.am b/examples/Makefile.am
deleted file mode 100644
index 930c3bf..0000000
--- a/examples/Makefile.am
+++ /dev/null
@@ -1,28 +0,0 @@
-# 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/examples/testd.c b/examples/testd.c
deleted file mode 100644
index 9154f7b..0000000
--- a/examples/testd.c
+++ /dev/null
@@ -1,194 +0,0 @@
-/***
- 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/Makefile.am b/libdaemon/Makefile.am
deleted file mode 100644
index 9c56611..0000000
--- a/libdaemon/Makefile.am
+++ /dev/null
@@ -1,47 +0,0 @@
-# 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/daemon.h b/libdaemon/daemon.h
deleted file mode 100644
index 3d3573a..0000000
--- a/libdaemon/daemon.h
+++ /dev/null
@@ -1,41 +0,0 @@
-#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/dexec.c b/libdaemon/dexec.c
deleted file mode 100644
index 7a89b62..0000000
--- a/libdaemon/dexec.c
+++ /dev/null
@@ -1,232 +0,0 @@
-/***
- 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/dexec.h b/libdaemon/dexec.h
deleted file mode 100644
index 7c03017..0000000
--- a/libdaemon/dexec.h
+++ /dev/null
@@ -1,84 +0,0 @@
-#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/dfork.c b/libdaemon/dfork.c
deleted file mode 100644
index 783033f..0000000
--- a/libdaemon/dfork.c
+++ /dev/null
@@ -1,730 +0,0 @@
-/***
- 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/dfork.h b/libdaemon/dfork.h
deleted file mode 100644
index 47b1630..0000000
--- a/libdaemon/dfork.h
+++ /dev/null
@@ -1,165 +0,0 @@
-#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/dlog.c b/libdaemon/dlog.c
deleted file mode 100644
index 1cc0566..0000000
--- a/libdaemon/dlog.c
+++ /dev/null
@@ -1,93 +0,0 @@
-/***
- 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/dlog.h b/libdaemon/dlog.h
deleted file mode 100644
index deea520..0000000
--- a/libdaemon/dlog.h
+++ /dev/null
@@ -1,119 +0,0 @@
-#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/dnonblock.c b/libdaemon/dnonblock.c
deleted file mode 100644
index 003514e..0000000
--- a/libdaemon/dnonblock.c
+++ /dev/null
@@ -1,49 +0,0 @@
-/***
- 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/dnonblock.h b/libdaemon/dnonblock.h
deleted file mode 100644
index e39da4e..0000000
--- a/libdaemon/dnonblock.h
+++ /dev/null
@@ -1,52 +0,0 @@
-#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/dpid.c b/libdaemon/dpid.c
deleted file mode 100644
index 7f66d0b..0000000
--- a/libdaemon/dpid.c
+++ /dev/null
@@ -1,281 +0,0 @@
-/***
- 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/dpid.h b/libdaemon/dpid.h
deleted file mode 100644
index 66cdbb1..0000000
--- a/libdaemon/dpid.h
+++ /dev/null
@@ -1,106 +0,0 @@
-#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/dsignal.c b/libdaemon/dsignal.c
deleted file mode 100644
index e60fb38..0000000
--- a/libdaemon/dsignal.c
+++ /dev/null
@@ -1,160 +0,0 @@
-/***
- 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/dsignal.h b/libdaemon/dsignal.h
deleted file mode 100644
index 1edfdcc..0000000
--- a/libdaemon/dsignal.h
+++ /dev/null
@@ -1,80 +0,0 @@
-#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/m4/.gitignore b/m4/.gitignore
deleted file mode 100644
index 464ba5c..0000000
--- a/m4/.gitignore
+++ /dev/null
@@ -1,5 +0,0 @@
-libtool.m4
-lt~obsolete.m4
-ltoptions.m4
-ltsugar.m4
-ltversion.m4
diff --git a/m4/attributes.m4 b/m4/attributes.m4
deleted file mode 100644
index e86456a..0000000
--- a/m4/attributes.m4
+++ /dev/null
@@ -1,311 +0,0 @@
-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/m4/zp_lynx_doc.m4 b/m4/zp_lynx_doc.m4
deleted file mode 100644
index 955a6ca..0000000
--- a/m4/zp_lynx_doc.m4
+++ /dev/null
@@ -1,24 +0,0 @@
-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/pkgconfig/libdaemon-uninstalled.pc.in b/pkgconfig/libdaemon-uninstalled.pc.in
deleted file mode 100644
index 3ceb71b..0000000
--- a/pkgconfig/libdaemon-uninstalled.pc.in
+++ /dev/null
@@ -1,8 +0,0 @@
-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/pkgconfig/libdaemon.pc.in b/pkgconfig/libdaemon.pc.in
deleted file mode 100644
index 835dcf1..0000000
--- a/pkgconfig/libdaemon.pc.in
+++ /dev/null
@@ -1,10 +0,0 @@
-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}