diff --git a/Makefile.am b/Makefile.am index c135236..65b6ba2 100644 --- a/Makefile.am +++ b/Makefile.am @@ -39,7 +39,7 @@ edit_cmd = sed \ $(PATHFILES): Makefile @ rm -f $@ $@.tmp - $(AM_V_at) mkdir -p $(dir $@) + $(AM_V_at) mkdir -p $$(dirname $@) $(AM_V_GEN) srcdir=''; \ test -f ./$@.in || srcdir=$(srcdir)/; \ $(edit_cmd) $${srcdir}$@.in >$@.tmp diff --git a/NEWS b/NEWS index ec50e67..624e0f2 100644 --- a/NEWS +++ b/NEWS @@ -7,6 +7,28 @@ Please send dhcpd-pools bug reports to kerolasa@iki.fi. gpg: Signature is crated using RSA key ID 8ED396E37E38D471A00530D3A9553245FDE9B739. + +Version 3.3 +Belkacem Daheb (2): + add start, end and hostname printing support for xml and json + getdata output: add start, end and hostname printing support for xml and json + +M. van Brummelen (1): + docs: fix manual page groff warning + +Sami Kerola (9): + update project web page + website: use https + chore: update web links + getdata: only emit warning when config include file cannot be read + gnulib: update bootstrap and gitignore files + build-sys: quote subshell execution in the autotools file + build-sys: update bootstrap from gnulib + output: update html javascripts + release: 3.3 + +luisδμ (1): + fix: avoid generation of unvalid JSON in summary Version 3.2 Jean Benoit (1): diff --git a/README b/README index 6a9ae41..5953fba 100644 --- a/README +++ b/README @@ -28,7 +28,7 @@ Quick start. Dependencies to other projects. - http://www.gnu.org/software/gnulib/ + https://www.gnu.org/software/gnulib/ You can avoid repeated gnulib downloads by setting GNULIB_SRCDIR environment variable. For example: @@ -39,7 +39,7 @@ Dependencies to other projects. Assumign detached gnulib please remember to git pull the latest updates before building dhcpd-pools. - http://uthash.sourceforge.net/ + https://troydhanson.github.io/uthash/ See quick start. diff --git a/THANKS b/THANKS index 4bb123d..2aec631 100644 --- a/THANKS +++ b/THANKS @@ -49,3 +49,6 @@ Mark Sangster Brent Swingle Mathieu Morier Jean Benoit +Belkacem Daheb +Björn Lässig +Luisδμ diff --git a/bootstrap b/bootstrap index 864856a..6f289d7 100755 --- a/bootstrap +++ b/bootstrap @@ -1,34 +1,67 @@ #! /bin/sh -# Print a version string. -scriptversion=2022-06-04.00; # UTC +# DO NOT EDIT! GENERATED AUTOMATICALLY! # Bootstrap this package from checked-out sources. -# Copyright (C) 2003-2022 Free Software Foundation, Inc. +scriptversion=2024-07-04.10; # UTC +# Copyright (C) 2003-2025 Free Software Foundation, Inc. +# # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. - +# # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. - +# # You should have received a copy of the GNU General Public License # along with this program. If not, see . # Originally written by Paul Eggert. The canonical version of this -# script is maintained as build-aux/bootstrap in gnulib, however, to -# be useful to your project, you should place a copy of it under -# version control in the top-level directory of your project. The +# script is maintained as top/bootstrap in gnulib. However, to be +# useful to your package, you should place a copy of it under version +# control in the top-level directory of your package. The intent is +# that all customization can be done with a bootstrap.conf file also +# maintained in your version control; gnulib comes with a template +# build-aux/bootstrap.conf to get you started. + +# Please report bugs or propose patches to bug-gnulib@gnu.org. + +me="$0" +medir=`dirname "$me"` + +# Read the function library and the configuration. + +# A library of shell functions for autopull.sh, autogen.sh, and bootstrap. + +scriptlibversion=2025-02-16.12; # UTC + +# Copyright (C) 2003-2025 Free Software Foundation, Inc. +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . + +# Originally written by Paul Eggert. The canonical version of this +# script is maintained as top/bootstrap-funclib.sh in gnulib. However, +# to be useful to your package, you should place a copy of it under +# version control in the top-level directory of your package. The # intent is that all customization can be done with a bootstrap.conf # file also maintained in your version control; gnulib comes with a # template build-aux/bootstrap.conf to get you started. -# Please report bugs or propose patches to bug-gnulib@gnu.org. - nl=' ' @@ -36,86 +69,13 @@ nl=' LC_ALL=C export LC_ALL -# Ensure that CDPATH is not set. Otherwise, the output from cd -# would cause trouble in at least one use below. -(unset CDPATH) >/dev/null 2>&1 && unset CDPATH - -local_gl_dir=gl - # Honor $PERL, but work even if there is none. PERL="${PERL-perl}" -me=$0 - default_gnulib_url=https://git.savannah.gnu.org/git/gnulib.git -usage() { - cat </dev/null) +normalize_package_name=' + s/^GNU // + y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/ + s/[^abcdefghijklmnopqrstuvwxyz0123456789_]/-/g +' +package=$(${AUTOCONF:-autoconf} --trace 'AC_INIT:$4' configure.ac 2>/dev/null) if test -z "$package"; then package=$(sed -n "$extract_package_name" configure.ac) \ || die 'cannot find package name in configure.ac' fi +package=$(echo "$package" | sed "$normalize_package_name") gnulib_name=lib$package build_aux=build-aux @@ -248,14 +215,12 @@ COPYRIGHT_HOLDER='Free Software Foundation, Inc.' MSGID_BUGS_ADDRESS=bug-$package@gnu.org # Files we don't want to import. +# XXX Not used. excluded_files= # File that should exist in the top directory of a checked out hierarchy, # but not in a distribution tarball. -checkout_only_file=src/dhcpd-pools.c - -# Whether to use copies instead of symlinks. -copy=false +checkout_only_file=project.doap # Set this to '.cvsignore .gitignore' in bootstrap.conf if you want # those files to be generated in directories like lib/, m4/, and po/. @@ -267,8 +232,13 @@ vc_ignore=auto # default. bootstrap_sync=false -# Use git to update gnulib sources -use_git=true +# Override the default configuration, if necessary. +# Make sure that bootstrap.conf is sourced from the current directory +# if we were invoked as "sh bootstrap". +conffile=`dirname "$me"`/bootstrap.conf +test -r "$conffile" && . "$conffile" + +# ------------------------- Build-time prerequisites ------------------------- check_exists() { if test "$1" = "--verbose"; then @@ -285,6 +255,202 @@ check_exists() { test $? -lt 126 } +# Note this deviates from the version comparison in automake +# in that it treats 1.5 < 1.5.0, and treats 1.4.4a < 1.4-p3a +# but this should suffice as we won't be specifying old +# version formats or redundant trailing .0 in bootstrap.conf. +# If we did want full compatibility then we should probably +# use m4_version_compare from autoconf. +sort_ver() { # sort -V is not generally available + ver1="$1" + ver2="$2" + + # split on '.' and compare each component + i=1 + while : ; do + p1=$(echo "$ver1" | cut -d. -f$i) + p2=$(echo "$ver2" | cut -d. -f$i) + if [ ! "$p1" ]; then + echo "$1 $2" + break + elif [ ! "$p2" ]; then + echo "$2 $1" + break + elif [ ! "$p1" = "$p2" ]; then + if [ "$p1" -gt "$p2" ] 2>/dev/null; then # numeric comparison + echo "$2 $1" + elif [ "$p2" -gt "$p1" ] 2>/dev/null; then # numeric comparison + echo "$1 $2" + else # numeric, then lexicographic comparison + lp=$(printf "%s\n%s\n" "$p1" "$p2" | LANG=C sort -n | tail -n1) + if [ "$lp" = "$p2" ]; then + echo "$1 $2" + else + echo "$2 $1" + fi + fi + break + fi + i=$(($i+1)) + done +} + +get_version_sed=' +# Move version to start of line. +s/.*[v ]\([0-9]\)/\1/ + +# Skip lines that do not start with version. +/^[0-9]/!d + +# Remove characters after the version. +s/[^.a-z0-9-].*// + +# The first component must be digits only. +s/^\([0-9]*\)[a-z-].*/\1/ + +#the following essentially does s/5.005/5.5/ +s/\.0*\([1-9]\)/.\1/g +p +q' + +get_version() { + app=$1 + + $app --version >/dev/null 2>&1 || { $app --version; return 1; } + + $app --version 2>&1 | sed -n "$get_version_sed" +} + +check_versions() { + ret=0 + + while read app req_ver; do + # We only need libtoolize from the libtool package. + if test "$app" = libtool; then + app=libtoolize + fi + # Exempt git if git is not needed. + if test "$app" = git; then + $check_git || continue + fi + # Honor $APP variables ($TAR, $AUTOCONF, etc.) + appvar=$(echo $app | LC_ALL=C tr '[a-z]-' '[A-Z]_') + test "$appvar" = TAR && appvar=AMTAR + case $appvar in + GZIP) ;; # Do not use $GZIP: it contains gzip options. + PERL::*) ;; # Keep perl modules as-is + *) eval "app=\${$appvar-$app}" ;; + esac + + # Handle the still-experimental Automake-NG programs specially. + # They remain named as the mainstream Automake programs ("automake", + # and "aclocal") to avoid gratuitous incompatibilities with + # preexisting usages (by, say, autoreconf, or custom autogen.sh + # scripts), but correctly identify themselves (as being part of + # "GNU automake-ng") when asked their version. + case $app in + automake-ng|aclocal-ng) + app=${app%-ng} + ($app --version | grep '(GNU automake-ng)') >/dev/null 2>&1 || { + warn_ "Error: '$app' not found or not from Automake-NG" + ret=1 + continue + } ;; + # Another check is for perl modules. These can be written as + # e.g. perl::XML::XPath in case of XML::XPath module, etc. + perl::*) + # Extract module name + app="${app#perl::}" + if ! $PERL -m"$app" -e 'exit 0' >/dev/null 2>&1; then + warn_ "Error: perl module '$app' not found" + ret=1 + fi + continue + ;; + esac + if [ "$req_ver" = "-" ]; then + # Merely require app to exist; not all prereq apps are well-behaved + # so we have to rely on $? rather than get_version. + if ! check_exists --verbose $app; then + warn_ "Error: '$app' not found" + ret=1 + fi + else + # Require app to produce a new enough version string. + inst_ver=$(get_version $app) + if [ ! "$inst_ver" ]; then + warn_ "Error: '$app' not found" + ret=1 + else + latest_ver=$(sort_ver $req_ver $inst_ver | cut -d' ' -f2) + if [ ! "$latest_ver" = "$inst_ver" ]; then + warnf_ '%s\n' \ + "Error: '$app' version == $inst_ver is too old" \ + " '$app' version >= $req_ver is required" + ret=1 + fi + fi + fi + done + + return $ret +} + +print_versions() { + echo "Program Min_version" + echo "----------------------" + printf %s "$buildreq" + echo "----------------------" + # can't depend on column -t +} + +# check_build_prerequisites check_git +check_build_prerequisites() +{ + check_git="$1" + + # gnulib-tool requires at least automake and autoconf. + # If either is not listed, add it (with minimum version) as a prerequisite. + case $buildreq in + *automake*) ;; + *) buildreq="automake 1.9 +$buildreq" ;; + esac + case $buildreq in + *autoconf*) ;; + *) buildreq="autoconf 2.59 +$buildreq" ;; + esac + + # When we can deduce that gnulib-tool will require patch, + # and when patch is not already listed as a prerequisite, add it, too. + if test -d "$local_gl_dir" \ + && ! find "$local_gl_dir" -name '*.diff' -exec false {} +; then + case $buildreq in + *patch*) ;; + *) buildreq="patch - +$buildreq" ;; + esac + fi + + if ! printf '%s' "$buildreq" | check_versions; then + echo >&2 + if test -f README-prereq; then + die "See README-prereq for how to get the prerequisite programs" + else + die "Please install the prerequisite programs" + fi + fi + + # Warn the user if autom4te appears to be broken; this causes known + # issues with at least gettext 0.18.3. + probe=$(echo 'm4_quote([hi])' | autom4te -l M4sugar -t 'm4_quote:$%' -) + if test "x$probe" != xhi; then + warn_ "WARNING: your autom4te wrapper eats stdin;" + warn_ "if bootstrap fails, consider upgrading your autotools" + fi +} + # find_tool ENVVAR NAMES... # ------------------------- # Search for a required program. Use the value of ENVVAR, if set, @@ -314,6 +480,530 @@ find_tool () eval "export $find_tool_envvar" } +# --------------------- Preparing GNULIB_SRCDIR for use. --------------------- +# This is part of autopull.sh, but bootstrap needs it too, for self-upgrading. + +# cleanup_gnulib fails, removing the directory $gnulib_path first. +cleanup_gnulib() { + status=$? + rm -fr "$gnulib_path" + exit $status +} + +git_modules_config () { + test -f .gitmodules && git config --file .gitmodules "$@" +} + +prepare_GNULIB_SRCDIR () +{ + if test -n "$GNULIB_SRCDIR"; then + # Use GNULIB_SRCDIR directly. + # We already checked that $GNULIB_SRCDIR references a directory. + # Verify that it contains a gnulib checkout. + test -f "$GNULIB_SRCDIR/gnulib-tool" \ + || die "Error: --gnulib-srcdir or \$GNULIB_SRCDIR is specified," \ + "but does not contain gnulib-tool" + if test -n "$GNULIB_REVISION" && $use_git; then + # The 'git checkout "$GNULIB_REVISION"' command succeeds if the + # GNULIB_REVISION is a commit hash that exists locally, or if it is + # branch name that can be fetched from origin. It fails, however, + # if the GNULIB_REVISION is a commit hash that only exists in + # origin. In this case, we need a 'git fetch' and then retry + # 'git checkout "$GNULIB_REVISION"'. + git -C "$GNULIB_SRCDIR" checkout "$GNULIB_REVISION" 2>/dev/null \ + || { git -C "$GNULIB_SRCDIR" fetch origin \ + && git -C "$GNULIB_SRCDIR" checkout "$GNULIB_REVISION"; } \ + || exit $? + fi + else + if ! $use_git; then + die "Error: --no-git is specified," \ + "but neither --gnulib-srcdir nor \$GNULIB_SRCDIR is specified" + fi + if git submodule -h | grep -- --reference > /dev/null; then + : + else + die "git version is too old, git >= 1.6.4 is required" + fi + gnulib_path=$(git_modules_config submodule.gnulib.path) + if test -n "$gnulib_path"; then + # A submodule 'gnulib' is configured. + # Get gnulib files. Populate $gnulib_path, updating the submodule. + if test -n "$GNULIB_REFDIR" && test -d "$GNULIB_REFDIR"/.git; then + # Use GNULIB_REFDIR as a reference. + echo "$0: getting gnulib files..." + git submodule update --init --reference "$GNULIB_REFDIR" "$gnulib_path"\ + || exit $? + else + # GNULIB_REFDIR is not set or not usable. Ignore it. + if git_modules_config submodule.gnulib.url >/dev/null; then + echo "$0: getting gnulib files..." + git submodule init -- "$gnulib_path" || exit $? + git submodule update -- "$gnulib_path" || exit $? + else + die "Error: submodule 'gnulib' has no configured url" + fi + fi + else + gnulib_path='gnulib' + if test ! -d "$gnulib_path"; then + # The subdirectory 'gnulib' does not yet exist. Clone into it. + echo "$0: getting gnulib files..." + trap cleanup_gnulib HUP INT PIPE TERM + gnulib_url=${GNULIB_URL:-$default_gnulib_url} + if test -n "$GNULIB_REFDIR" && test -d "$GNULIB_REFDIR"/.git; then + # Use GNULIB_REFDIR as a reference. + git clone "$GNULIB_REFDIR" "$gnulib_path" \ + && git -C "$gnulib_path" remote set-url origin "$gnulib_url" \ + && if test -z "$GNULIB_REVISION"; then + git -C "$gnulib_path" pull origin \ + && { + # We want the default branch of "$gnulib_url" (since that's + # the behaviour if GNULIB_REFDIR is not specified), not the + # current branch of "$GNULIB_REFDIR". + default_branch=`LC_ALL=C git -C "$gnulib_path" \ + remote show origin \ + | sed -n -e 's/^ *HEAD branch: //p'` + test -n "$default_branch" || default_branch='master' + git -C "$gnulib_path" checkout "$default_branch" + } + else + # The 'git checkout "$GNULIB_REVISION"' command succeeds if the + # GNULIB_REVISION is a commit hash that exists locally, or if it + # is a branch name that can be fetched from origin. It fails, + # however, if the GNULIB_REVISION is a commit hash that only + # exists in origin. In this case, we need a 'git fetch' and then + # retry 'git checkout "$GNULIB_REVISION"'. + git -C "$gnulib_path" checkout "$GNULIB_REVISION" 2>/dev/null \ + || { git -C "$gnulib_path" fetch origin \ + && git -C "$gnulib_path" checkout "$GNULIB_REVISION"; } + fi \ + || cleanup_gnulib + else + # GNULIB_REFDIR is not set or not usable. Ignore it. + shallow='--depth 2' + if test -z "$GNULIB_REVISION"; then + git clone $shallow "$gnulib_url" "$gnulib_path" \ + || cleanup_gnulib + else + # Only want a shallow checkout of $GNULIB_REVISION, but git does not + # support cloning by commit hash. So attempt a shallow fetch by + # commit hash to minimize the amount of data downloaded and changes + # needed to be processed, which can drastically reduce download and + # processing time for checkout. If the fetch by commit fails, a + # shallow fetch cannot be performed because we do not know what the + # depth of the commit is without fetching all commits. So fall back + # to fetching all commits. + # $GNULIB_REVISION can be a commit id, a tag name, or a branch name. + mkdir -p "$gnulib_path" + # Use a -c option to silence an annoying message + # "hint: Using 'master' as the name for the initial branch." + # (cf. ). + git -C "$gnulib_path" -c init.defaultBranch=master init + git -C "$gnulib_path" remote add origin "$gnulib_url" + if git -C "$gnulib_path" fetch $shallow origin "$GNULIB_REVISION" + then + # "git fetch" of the specific commit succeeded. + git -C "$gnulib_path" reset --hard FETCH_HEAD \ + || cleanup_gnulib + # "git fetch" does not fetch tags (at least in git version 2.43). + # If $GNULIB_REVISION is a tag (not a commit id or branch name), + # add the tag explicitly. + revision=`git -C "$gnulib_path" log -1 --pretty=format:%H` + branch=`LC_ALL=C git -C "$gnulib_path" remote show origin \ + | sed -n -e 's/^ \([^ ]*\) * tracked$/\1/p'` + test "$revision" = "$GNULIB_REVISION" \ + || test "$branch" = "$GNULIB_REVISION" \ + || git -C "$gnulib_path" tag "$GNULIB_REVISION" + else + # Fetch the entire repository. + git -C "$gnulib_path" fetch origin \ + || cleanup_gnulib + git -C "$gnulib_path" checkout "$GNULIB_REVISION" \ + || cleanup_gnulib + fi + fi + fi + trap - HUP INT PIPE TERM + else + # The subdirectory 'gnulib' already exists. + if test -n "$GNULIB_REVISION"; then + if test -d "$gnulib_path/.git"; then + # The 'git checkout "$GNULIB_REVISION"' command succeeds if the + # GNULIB_REVISION is a commit hash that exists locally, or if it + # is a branch name that can be fetched from origin. It fails, + # however, if the GNULIB_REVISION is a commit hash that only + # exists in origin. In this case, we need a 'git fetch' and then + # retry 'git checkout "$GNULIB_REVISION"'. + git -C "$gnulib_path" checkout "$GNULIB_REVISION" 2>/dev/null \ + || { git -C "$gnulib_path" fetch origin \ + && git -C "$gnulib_path" checkout "$GNULIB_REVISION"; } \ + || exit $? + else + die "Error: GNULIB_REVISION is specified in bootstrap.conf," \ + "but '$gnulib_path' contains no git history" + fi + fi + fi + fi + # Verify that $gnulib_path contains a gnulib checkout. + test -f "$gnulib_path/gnulib-tool" \ + || die "Error: '$gnulib_path' is supposed to contain a gnulib checkout," \ + "but does not contain gnulib-tool" + GNULIB_SRCDIR=$gnulib_path + fi + # $GNULIB_SRCDIR now points to the version of gnulib to use, and + # we no longer need to use git or $gnulib_path below here. +} + +# -------- Upgrading bootstrap to the version found in GNULIB_SRCDIR. -------- + +upgrade_bootstrap () +{ + if test -f "$medir"/bootstrap-funclib.sh; then + update_lib=true + { cmp -s "$medir"/bootstrap "$GNULIB_SRCDIR/top/bootstrap" \ + && cmp -s "$medir"/bootstrap-funclib.sh \ + "$GNULIB_SRCDIR/top/bootstrap-funclib.sh" \ + && cmp -s "$medir"/autopull.sh "$GNULIB_SRCDIR/top/autopull.sh" \ + && cmp -s "$medir"/autogen.sh "$GNULIB_SRCDIR/top/autogen.sh"; \ + } + else + update_lib=false + cmp -s "$medir"/bootstrap "$GNULIB_SRCDIR/build-aux/bootstrap" + fi || { + if $update_lib; then + echo "$0: updating bootstrap & companions and restarting..." + else + echo "$0: updating bootstrap and restarting..." + fi + case $(sh -c 'echo "$1"' -- a) in + a) ignored=--;; + *) ignored=ignored;; + esac + u=$update_lib + exec sh -c \ + '{ if '$u' && test -f "$1"; then cp "$1" "$3"; else cp "$2" "$3"; fi; } && + { if '$u' && test -f "$4"; then cp "$4" "$5"; else rm -f "$5"; fi; } && + { if '$u' && test -f "$6"; then cp "$6" "$7"; else rm -f "$7"; fi; } && + { if '$u' && test -f "$8"; then cp "$8" "$9"; else rm -f "$9"; fi; } && + shift && shift && shift && shift && shift && + shift && shift && shift && shift && + exec "${CONFIG_SHELL-/bin/sh}" "$@"' \ + $ignored \ + "$GNULIB_SRCDIR/top/bootstrap" "$GNULIB_SRCDIR/build-aux/bootstrap" \ + "$medir/bootstrap" \ + "$GNULIB_SRCDIR/top/bootstrap-funclib.sh" "$medir/bootstrap-funclib.sh" \ + "$GNULIB_SRCDIR/top/autopull.sh" "$medir/autopull.sh" \ + "$GNULIB_SRCDIR/top/autogen.sh" "$medir/autogen.sh" \ + "$0" "$@" --no-bootstrap-sync + } +} + +# ---------------------------------------------------------------------------- + +if test x"$gnulib_modules$gnulib_files$gnulib_extra_files" = x; then + use_gnulib=false +else + use_gnulib=true +fi + +# -------- Fetch auxiliary files from the network. -------------------------- + +autopull_usage() { + cat </dev/null 2>&1 && unset CDPATH + + # Parse options. + + # Use git to update gnulib sources + use_git=true + + for option + do + case $option in + --help) + autopull_usage + return;; + --version) + set -e + echo "autopull.sh $scriptlibversion" + echo "$copyright" + return 0 + ;; + --skip-po) + SKIP_PO=t;; + --force) + checkout_only_file=;; + --bootstrap-sync) + bootstrap_sync=true;; + --no-bootstrap-sync) + bootstrap_sync=false;; + --no-git) + use_git=false;; + *) + bootstrap_option_hook $option || die "$option: unknown option";; + esac + done + + $use_git || test -n "$GNULIB_SRCDIR" \ + || die "Error: --no-git requires \$GNULIB_SRCDIR environment variable" \ + "or --gnulib-srcdir option" + test -z "$GNULIB_SRCDIR" || test -d "$GNULIB_SRCDIR" \ + || die "Error: \$GNULIB_SRCDIR environment variable" \ + "or --gnulib-srcdir option is specified," \ + "but does not denote a directory" + + if test -n "$checkout_only_file" && test ! -r "$checkout_only_file"; then + die "Running this script from a non-checked-out distribution is risky." + fi + + check_build_prerequisites $use_git + + if $use_gnulib || $bootstrap_sync; then + prepare_GNULIB_SRCDIR + if $bootstrap_sync; then + upgrade_bootstrap "$@" + fi + fi + + # Find sha1sum, named gsha1sum on MacPorts, shasum on Mac OS X 10.6. + # Also find the compatible sha1 utility on the BSDs + if test x"$SKIP_PO" = x; then + find_tool SHA1SUM sha1sum gsha1sum shasum sha1 + fi + + # See if we can use gnulib's git-merge-changelog merge driver. + if $use_git && test -d .git && check_exists git; then + if git config merge.merge-changelog.driver >/dev/null ; then + : + elif check_exists git-merge-changelog; then + echo "$0: initializing git-merge-changelog driver" + git config merge.merge-changelog.name 'GNU-style ChangeLog merge driver' + git config merge.merge-changelog.driver 'git-merge-changelog %O %A %B' + else + echo "$0: consider installing git-merge-changelog from gnulib" + fi + fi + + case $SKIP_PO in + '') + if test -d po; then + update_po_files po $package || return + fi + + if test -d runtime-po; then + update_po_files runtime-po $package-runtime || return + fi;; + esac + + # --------------------------------------------------------------------------- + + bootstrap_post_pull_hook \ + || die "bootstrap_post_pull_hook failed" + + # Don't proceed if there are uninitialized submodules. In particular, + # autogen.sh will remove dangling links, which might be links into + # uninitialized submodules. + # But it's OK if the 'gnulib' submodule is uninitialized, as long as + # GNULIB_SRCDIR is set. + if $use_git; then + # Uninitialized submodules are listed with an initial dash. + uninitialized=`git submodule | grep '^-' | awk '{ print $2 }'` + if test -n "$GNULIB_SRCDIR"; then + uninitialized=`echo "$uninitialized" | grep -v '^gnulib$'` + fi + if test -n "$uninitialized"; then + uninit_comma=`echo "$uninitialized" | tr '\n' ',' | sed -e 's|,$|.|'` + die "Some git submodules are not initialized: "$uninit_comma \ + "Either use option '--no-git'," \ + "or run 'git submodule update --init' and bootstrap again." + fi + fi + + if test -f "$medir"/autogen.sh; then + echo "$0: done. Now you can run '$medir/autogen.sh'." + fi +} + +# ----------------------------- Get translations. ----------------------------- + +download_po_files() { + subdir=$1 + domain=$2 + echo "$me: getting translations into $subdir for $domain..." + cmd=$(printf "$po_download_command_format" "$subdir" "$domain") + eval "$cmd" +} + +# Mirror .po files to $po_dir/.reference and copy only the new +# or modified ones into $po_dir. Also update $po_dir/LINGUAS. +# Note po files that exist locally only are left in $po_dir but will +# not be included in LINGUAS and hence will not be distributed. +update_po_files() { + # Directory containing primary .po files. + # Overwrite them only when we're sure a .po file is new. + po_dir=$1 + domain=$2 + + # Mirror *.po files into this dir. + # Usually contains *.s1 checksum files. + ref_po_dir="$po_dir/.reference" + + test -d $ref_po_dir || mkdir $ref_po_dir || return + download_po_files $ref_po_dir $domain \ + && ls "$ref_po_dir"/*.po 2>/dev/null | + sed 's|.*/||; s|\.po$||' > "$po_dir/LINGUAS" || return + + for po in x $(ls $ref_po_dir | sed -n 's/\.po$//p'); do + case $po in x) continue;; esac + new_po="$ref_po_dir/$po.po" + cksum_file="$ref_po_dir/$po.s1" + if ! test -f "$cksum_file" || + ! test -f "$po_dir/$po.po" || + ! $SHA1SUM -c "$cksum_file" < "$new_po" > /dev/null 2>&1; then + echo "$me: updated $po_dir/$po.po..." + cp "$new_po" "$po_dir/$po.po" \ + && $SHA1SUM < "$new_po" > "$cksum_file" || return + fi + done +} + +# -------- Generate files automatically from existing sources. -------------- + +autogen_usage() { + cat < /dev/null 2>&1 + elif test -d .svn; then + svn log -r HEAD "$file" > /dev/null 2>&1 + elif test -d CVS; then + grep -F "/${file##*/}/" "$parent/CVS/Entries" 2>/dev/null | + grep '^/[^/]*/[0-9]' > /dev/null + else + warn_ "no version control for $file?" + false + fi +} + # Strip blank and comment lines to leave significant entries. gitignore_entries() { sed '/^#/d; /^$/d' "$@" @@ -375,7 +1065,7 @@ symlink_to_dir() for dot_ig in x $vc_ignore; do test $dot_ig = x && continue ig=$parent/$dot_ig - insert_vc_ignore $ig "${dst_dir##*/}" + insert_vc_ignore $ig "${dst_dir##*/}/" done fi @@ -424,30 +1114,426 @@ symlink_to_dir() } } -# Override the default configuration, if necessary. -# Make sure that bootstrap.conf is sourced from the current directory -# if we were invoked as "sh bootstrap". -case "$0" in - */*) test -r "$0.conf" && . "$0.conf" ;; - *) test -r "$0.conf" && . ./"$0.conf" ;; -esac +# Regenerate all autogeneratable files that are omitted from the +# version control repository. In particular, regenerate all +# aclocal.m4, config.h.in, Makefile.in, configure files with new +# versions of autoconf or automake. +autogen() +{ + # Ensure that CDPATH is not set. Otherwise, the output from cd + # would cause trouble in at least one use below. + (unset CDPATH) >/dev/null 2>&1 && unset CDPATH -if test "$vc_ignore" = auto; then - vc_ignore= - test -d .git && vc_ignore=.gitignore - test -d CVS && vc_ignore="$vc_ignore .cvsignore" -fi + # Environment variables that may be set by the user. + : "${AUTOPOINT=autopoint}" + : "${AUTORECONF=autoreconf}" -if test x"$gnulib_modules$gnulib_files$gnulib_extra_files" = x; then - use_gnulib=false -else - use_gnulib=true -fi + if test "$vc_ignore" = auto; then + vc_ignore= + test -d .git && vc_ignore=.gitignore + test -d CVS && vc_ignore="$vc_ignore .cvsignore" + fi -# Translate configuration into internal form. + + # Parse options. + + # Whether to use copies instead of symlinks. + copy=false + + for option + do + case $option in + --help) + autogen_usage + return;; + --version) + set -e + echo "autogen.sh $scriptlibversion" + echo "$copyright" + return 0 + ;; + --force) + checkout_only_file=;; + --copy) + copy=true;; + *) + bootstrap_option_hook $option || die "$option: unknown option";; + esac + done + + test -z "$GNULIB_SRCDIR" || test -d "$GNULIB_SRCDIR" \ + || die "Error: \$GNULIB_SRCDIR environment variable or --gnulib-srcdir" \ + "option is specified, but does not denote a directory" + + if test -n "$checkout_only_file" && test ! -r "$checkout_only_file"; then + die "Running this script from a non-checked-out distribution is risky." + fi + + if $use_gnulib; then + if test -z "$GNULIB_SRCDIR"; then + gnulib_path=$(test -f .gitmodules && + git config --file .gitmodules submodule.gnulib.path) + test -z "$gnulib_path" && gnulib_path=gnulib + GNULIB_SRCDIR=$gnulib_path + fi + fi + + # Die if there is no AC_CONFIG_AUX_DIR($build_aux) line in configure.ac. + found_aux_dir=no + grep '^[ ]*AC_CONFIG_AUX_DIR(\['"$build_aux"'])' configure.ac \ + >/dev/null && found_aux_dir=yes + grep '^[ ]*AC_CONFIG_AUX_DIR('"$build_aux"')' configure.ac \ + >/dev/null && found_aux_dir=yes + test $found_aux_dir = yes \ + || die "configure.ac lacks 'AC_CONFIG_AUX_DIR([$build_aux])'; add it" + + # If $build_aux doesn't exist, create it now, otherwise some bits + # below will malfunction. If creating it, also mark it as ignored. + if test ! -d $build_aux; then + mkdir $build_aux + for dot_ig in x $vc_ignore; do + test $dot_ig = x && continue + insert_vc_ignore $dot_ig $build_aux/ + done + fi + + check_build_prerequisites false + + use_libtool=0 + # We'd like to use grep -E, to see if any of LT_INIT, + # AC_PROG_LIBTOOL, AM_PROG_LIBTOOL is used in configure.ac, + # but that's not portable enough (e.g., for Solaris). + grep '^[ ]*A[CM]_PROG_LIBTOOL' configure.ac >/dev/null \ + && use_libtool=1 + grep '^[ ]*LT_INIT' configure.ac >/dev/null \ + && use_libtool=1 + if test $use_libtool = 1; then + find_tool LIBTOOLIZE glibtoolize libtoolize + fi + + if $use_gnulib; then + gnulib_tool=$GNULIB_SRCDIR/gnulib-tool + <$gnulib_tool || return + fi + + # NOTE: we have to be careful to run both autopoint and libtoolize + # before gnulib-tool, since gnulib-tool is likely to provide newer + # versions of files "installed" by these two programs. + # Then, *after* gnulib-tool (see below), we have to be careful to + # run autoreconf in such a way that it does not run either of these + # two just-pre-run programs. + + # Import from gettext. + with_gettext=yes + grep '^[ ]*AM_GNU_GETTEXT_VERSION(' configure.ac >/dev/null || \ + with_gettext=no + + if test $with_gettext = yes || test $use_libtool = 1; then + + tempbase=.bootstrap$$ + trap "rm -f $tempbase.0 $tempbase.1" HUP INT PIPE TERM + + > $tempbase.0 > $tempbase.1 && + find . ! -type d -print | sort > $tempbase.0 || return + + if test $with_gettext = yes; then + # Released autopoint has the tendency to install macros that have been + # obsoleted in current gnulib, so run this before gnulib-tool. + echo "$0: $AUTOPOINT --force" + $AUTOPOINT --force || return + fi + + # Autoreconf runs aclocal before libtoolize, which causes spurious + # warnings if the initial aclocal is confused by the libtoolized + # (or worse out-of-date) macro directory. + # libtoolize 1.9b added the --install option; but we support back + # to libtoolize 1.5.22, where the install action was default. + if test $use_libtool = 1; then + install= + case $($LIBTOOLIZE --help) in + *--install*) install=--install ;; + esac + echo "running: $LIBTOOLIZE $install --copy" + $LIBTOOLIZE $install --copy + fi + + find . ! -type d -print | sort >$tempbase.1 + old_IFS=$IFS + IFS=$nl + for file in $(comm -13 $tempbase.0 $tempbase.1); do + IFS=$old_IFS + parent=${file%/*} + version_controlled_file "$parent" "$file" || { + for dot_ig in x $vc_ignore; do + test $dot_ig = x && continue + ig=$parent/$dot_ig + insert_vc_ignore "$ig" "${file##*/}" + done + } + done + IFS=$old_IFS + + rm -f $tempbase.0 $tempbase.1 + trap - HUP INT PIPE TERM + fi + + # Import from gnulib. + + if $use_gnulib; then + gnulib_tool_options="\ + --no-changelog\ + --aux-dir=$build_aux\ + --doc-base=$doc_base\ + --lib=$gnulib_name\ + --m4-base=$m4_base/\ + --source-base=$source_base/\ + --tests-base=$tests_base\ + --local-dir=$local_gl_dir\ + $gnulib_tool_option_extras\ + " + if test $use_libtool = 1; then + case "$gnulib_tool_options " in + *' --libtool '*) ;; + *) gnulib_tool_options="$gnulib_tool_options --libtool" ;; + esac + fi + echo "$0: $gnulib_tool $gnulib_tool_options --import ..." + $gnulib_tool $gnulib_tool_options --import $gnulib_modules \ + || die "gnulib-tool failed" + + if test $with_gettext = yes && test ! -f $m4_base/gettext.m4; then + # The gnulib-tool invocation has removed $m4_base/gettext.m4, that the + # AUTOPOINT invocation had installed. This can occur when the gnulib + # module 'gettext' was previously present but is now not present any more. + # Repeat the AUTOPOINT invocation and the gnulib-tool invocation. + + echo "$0: $AUTOPOINT --force" + $AUTOPOINT --force || return + + echo "$0: $gnulib_tool $gnulib_tool_options --import ..." + $gnulib_tool $gnulib_tool_options --import $gnulib_modules \ + || die "gnulib-tool failed" + fi + + for file in $gnulib_files; do + symlink_to_dir "$GNULIB_SRCDIR" $file \ + || die "failed to symlink $file" + done + fi + + bootstrap_post_import_hook \ + || die "bootstrap_post_import_hook failed" + + # Remove any dangling symlink matching "*.m4" or "*.[ch]" in some + # gnulib-populated directories. Such .m4 files would cause aclocal to fail. + # The following requires GNU find 4.2.3 or newer. Considering the usual + # portability constraints of this script, that may seem a very demanding + # requirement, but it should be ok. Ignore any failure, which is fine, + # since this is only a convenience to help developers avoid the relatively + # unusual case in which a symlinked-to .m4 file is git-removed from gnulib + # between successive runs of this script. + find "$m4_base" "$source_base" \ + -depth \( -name '*.m4' -o -name '*.[ch]' \) \ + -type l -xtype l -delete > /dev/null 2>&1 + + # Invoke autoreconf with --force --install to ensure upgrades of tools + # such as ylwrap. + AUTORECONFFLAGS="--verbose --install --force -I $m4_base $ACLOCAL_FLAGS" + AUTORECONFFLAGS="$AUTORECONFFLAGS --no-recursive" + + # Tell autoreconf not to invoke autopoint or libtoolize; they were run above. + echo "running: AUTOPOINT=true LIBTOOLIZE=true $AUTORECONF $AUTORECONFFLAGS" + AUTOPOINT=true LIBTOOLIZE=true $AUTORECONF $AUTORECONFFLAGS \ + || die "autoreconf failed" + + # Get some extra files from gnulib, overriding existing files. + for file in $gnulib_extra_files; do + case $file in + */INSTALL) dst=INSTALL;; + build-aux/*) dst=$build_aux/${file#build-aux/};; + *) dst=$file;; + esac + symlink_to_dir "$GNULIB_SRCDIR" $file $dst \ + || die "failed to symlink $file" + done + + if test $with_gettext = yes; then + # Create gettext configuration. + echo "$0: Creating po/Makevars from po/Makevars.template ..." + rm -f po/Makevars + sed ' + /^EXTRA_LOCALE_CATEGORIES *=/s/=.*/= '"$EXTRA_LOCALE_CATEGORIES"'/ + /^COPYRIGHT_HOLDER *=/s/=.*/= '"$COPYRIGHT_HOLDER"'/ + /^MSGID_BUGS_ADDRESS *=/s|=.*|= '"$MSGID_BUGS_ADDRESS"'| + /^XGETTEXT_OPTIONS *=/{ + s/$/ \\/ + a\ + '"$XGETTEXT_OPTIONS"' $${end_of_xgettext_options+} + } + ' po/Makevars.template >po/Makevars \ + || die 'cannot generate po/Makevars' + + # If the 'gettext' module is in use, grab the latest Makefile.in.in. + # If only the 'gettext-h' module is in use, assume autopoint already + # put the correct version of this file into place. + case $gnulib_modules in + *gettext-h*) ;; + *gettext*) + cp $GNULIB_SRCDIR/build-aux/po/Makefile.in.in po/Makefile.in.in \ + || die "cannot create po/Makefile.in.in" + ;; + esac + + if test -d runtime-po; then + # Similarly for runtime-po/Makevars, but not quite the same. + rm -f runtime-po/Makevars + sed ' + /^DOMAIN *=.*/s/=.*/= '"$package"'-runtime/ + /^subdir *=.*/s/=.*/= runtime-po/ + /^MSGID_BUGS_ADDRESS *=/s/=.*/= bug-'"$package"'@gnu.org/ + /^XGETTEXT_OPTIONS *=/{ + s/$/ \\/ + a\ + '"$XGETTEXT_OPTIONS_RUNTIME"' $${end_of_xgettext_options+} + } + ' po/Makevars.template >runtime-po/Makevars \ + || die 'cannot generate runtime-po/Makevars' + + # Copy identical files from po to runtime-po. + cp -p po/Makefile.in.in po/*-quot po/*.header po/*.sed po/*.sin runtime-po + fi + fi + + bootstrap_epilogue + + echo "$0: done. Now you can run './configure'." +} + +# ---------------------------------------------------------------------------- + +# Local Variables: +# eval: (add-hook 'before-save-hook 'time-stamp nil t) +# time-stamp-start: "scriptlibversion=" +# time-stamp-format: "%:y-%02m-%02d.%02H" +# time-stamp-time-zone: "UTC0" +# time-stamp-end: "; # UTC" +# End: + +usage() { + cat </dev/null && found_aux_dir=yes -grep '^[ ]*AC_CONFIG_AUX_DIR('"$build_aux"')' configure.ac \ - >/dev/null && found_aux_dir=yes -test $found_aux_dir = yes \ - || die "configure.ac lacks 'AC_CONFIG_AUX_DIR([$build_aux])'; add it" +check_build_prerequisites $use_git -# If $build_aux doesn't exist, create it now, otherwise some bits -# below will malfunction. If creating it, also mark it as ignored. -if test ! -d $build_aux; then - mkdir $build_aux - for dot_ig in x $vc_ignore; do - test $dot_ig = x && continue - insert_vc_ignore $dot_ig $build_aux - done -fi - -# Note this deviates from the version comparison in automake -# in that it treats 1.5 < 1.5.0, and treats 1.4.4a < 1.4-p3a -# but this should suffice as we won't be specifying old -# version formats or redundant trailing .0 in bootstrap.conf. -# If we did want full compatibility then we should probably -# use m4_version_compare from autoconf. -sort_ver() { # sort -V is not generally available - ver1="$1" - ver2="$2" - - # split on '.' and compare each component - i=1 - while : ; do - p1=$(echo "$ver1" | cut -d. -f$i) - p2=$(echo "$ver2" | cut -d. -f$i) - if [ ! "$p1" ]; then - echo "$1 $2" - break - elif [ ! "$p2" ]; then - echo "$2 $1" - break - elif [ ! "$p1" = "$p2" ]; then - if [ "$p1" -gt "$p2" ] 2>/dev/null; then # numeric comparison - echo "$2 $1" - elif [ "$p2" -gt "$p1" ] 2>/dev/null; then # numeric comparison - echo "$1 $2" - else # numeric, then lexicographic comparison - lp=$(printf "$p1\n$p2\n" | LANG=C sort -n | tail -n1) - if [ "$lp" = "$p2" ]; then - echo "$1 $2" - else - echo "$2 $1" - fi - fi - break - fi - i=$(($i+1)) - done -} - -get_version_sed=' -# Move version to start of line. -s/.*[v ]\([0-9]\)/\1/ - -# Skip lines that do not start with version. -/^[0-9]/!d - -# Remove characters after the version. -s/[^.a-z0-9-].*// - -# The first component must be digits only. -s/^\([0-9]*\)[a-z-].*/\1/ - -#the following essentially does s/5.005/5.5/ -s/\.0*\([1-9]\)/.\1/g -p -q' - -get_version() { - app=$1 - - $app --version >/dev/null 2>&1 || { $app --version; return 1; } - - $app --version 2>&1 | sed -n "$get_version_sed" -} - -check_versions() { - ret=0 - - while read app req_ver; do - # We only need libtoolize from the libtool package. - if test "$app" = libtool; then - app=libtoolize - fi - # Exempt git if --no-git is in effect. - if test "$app" = git; then - $use_git || continue - fi - # Honor $APP variables ($TAR, $AUTOCONF, etc.) - appvar=$(echo $app | LC_ALL=C tr '[a-z]-' '[A-Z]_') - test "$appvar" = TAR && appvar=AMTAR - case $appvar in - GZIP) ;; # Do not use $GZIP: it contains gzip options. - PERL::*) ;; # Keep perl modules as-is - *) eval "app=\${$appvar-$app}" ;; - esac - - # Handle the still-experimental Automake-NG programs specially. - # They remain named as the mainstream Automake programs ("automake", - # and "aclocal") to avoid gratuitous incompatibilities with - # pre-existing usages (by, say, autoreconf, or custom autogen.sh - # scripts), but correctly identify themselves (as being part of - # "GNU automake-ng") when asked their version. - case $app in - automake-ng|aclocal-ng) - app=${app%-ng} - ($app --version | grep '(GNU automake-ng)') >/dev/null 2>&1 || { - warn_ "Error: '$app' not found or not from Automake-NG" - ret=1 - continue - } ;; - # Another check is for perl modules. These can be written as - # e.g. perl::XML::XPath in case of XML::XPath module, etc. - perl::*) - # Extract module name - app="${app#perl::}" - if ! $PERL -m"$app" -e 'exit 0' >/dev/null 2>&1; then - warn_ "Error: perl module '$app' not found" - ret=1 - fi - continue - ;; - esac - if [ "$req_ver" = "-" ]; then - # Merely require app to exist; not all prereq apps are well-behaved - # so we have to rely on $? rather than get_version. - if ! check_exists --verbose $app; then - warn_ "Error: '$app' not found" - ret=1 - fi - else - # Require app to produce a new enough version string. - inst_ver=$(get_version $app) - if [ ! "$inst_ver" ]; then - warn_ "Error: '$app' not found" - ret=1 - else - latest_ver=$(sort_ver $req_ver $inst_ver | cut -d' ' -f2) - if [ ! "$latest_ver" = "$inst_ver" ]; then - warnf_ '%s\n' \ - "Error: '$app' version == $inst_ver is too old" \ - " '$app' version >= $req_ver is required" - ret=1 - fi - fi - fi - done - - return $ret -} - -print_versions() { - echo "Program Min_version" - echo "----------------------" - printf %s "$buildreq" - echo "----------------------" - # can't depend on column -t -} - -# Find sha1sum, named gsha1sum on MacPorts, shasum on Mac OS X 10.6. -# Also find the compatible sha1 utility on the BSDs -if test x"$SKIP_PO" = x; then - find_tool SHA1SUM sha1sum gsha1sum shasum sha1 -fi - -use_libtool=0 -# We'd like to use grep -E, to see if any of LT_INIT, -# AC_PROG_LIBTOOL, AM_PROG_LIBTOOL is used in configure.ac, -# but that's not portable enough (e.g., for Solaris). -grep '^[ ]*A[CM]_PROG_LIBTOOL' configure.ac >/dev/null \ - && use_libtool=1 -grep '^[ ]*LT_INIT' configure.ac >/dev/null \ - && use_libtool=1 -if test $use_libtool = 1; then - find_tool LIBTOOLIZE glibtoolize libtoolize -fi - -# gnulib-tool requires at least automake and autoconf. -# If either is not listed, add it (with minimum version) as a prerequisite. -case $buildreq in - *automake*) ;; - *) buildreq="automake 1.9 -$buildreq" ;; -esac -case $buildreq in - *autoconf*) ;; - *) buildreq="autoconf 2.59 -$buildreq" ;; -esac - -# When we can deduce that gnulib-tool will require patch, -# and when patch is not already listed as a prerequisite, add it, too. -if test -d "$local_gl_dir" \ - && ! find "$local_gl_dir" -name '*.diff' -exec false {} +; then - case $buildreq in - *patch*) ;; - *) buildreq="patch - -$buildreq" ;; - esac -fi - -if ! printf "$buildreq" | check_versions; then - echo >&2 - if test -f README-prereq; then - die "See README-prereq for how to get the prerequisite programs" - else - die "Please install the prerequisite programs" - fi -fi - -# Warn the user if autom4te appears to be broken; this causes known -# issues with at least gettext 0.18.3. -probe=$(echo 'm4_quote([hi])' | autom4te -l M4sugar -t 'm4_quote:$%' -) -if test "x$probe" != xhi; then - warn_ "WARNING: your autom4te wrapper eats stdin;" - warn_ "if bootstrap fails, consider upgrading your autotools" +if $bootstrap_sync; then + prepare_GNULIB_SRCDIR + upgrade_bootstrap "$@" + # Since we have now upgraded if needed, no need to try it a second time below. + bootstrap_sync=false fi echo "$0: Bootstrapping from checked-out $package sources..." -# See if we can use gnulib's git-merge-changelog merge driver. -if $use_git && test -d .git && check_exists git; then - if git config merge.merge-changelog.driver >/dev/null ; then - : - elif check_exists git-merge-changelog; then - echo "$0: initializing git-merge-changelog driver" - git config merge.merge-changelog.name 'GNU-style ChangeLog merge driver' - git config merge.merge-changelog.driver 'git-merge-changelog %O %A %B' - else - echo "$0: consider installing git-merge-changelog from gnulib" - fi +# Pass GNULIB_SRCDIR and GNULIB_REFDIR to any subsidiary commands that care. +export GNULIB_SRCDIR +export GNULIB_REFDIR + +if $pull && { $use_git || test -z "$SKIP_PO"; }; then + autopull \ + `if $bootstrap_sync; then + echo ' --bootstrap-sync' + else + echo ' --no-bootstrap-sync' + fi` \ + `if test -z "$checkout_only_file"; then echo ' --force'; fi` \ + `if ! $use_git; then echo ' --no-git'; fi` \ + `if test -n "$SKIP_PO"; then echo ' --skip-po'; fi` \ + || die "could not fetch auxiliary files" fi - -cleanup_gnulib() { - status=$? - rm -fr "$gnulib_path" - exit $status -} - -git_modules_config () { - test -f .gitmodules && git config --file .gitmodules "$@" -} - -if $use_gnulib; then - if $use_git; then - gnulib_path=$(git_modules_config submodule.gnulib.path) - test -z "$gnulib_path" && gnulib_path=gnulib - fi - - # Get gnulib files. Populate $GNULIB_SRCDIR, possibly updating a - # submodule, for use in the rest of the script. - - case ${GNULIB_SRCDIR--} in - -) - # Note that $use_git is necessarily true in this case. - if git_modules_config submodule.gnulib.url >/dev/null; then - echo "$0: getting gnulib files..." - git submodule init -- "$gnulib_path" || exit $? - git submodule update -- "$gnulib_path" || exit $? - - elif [ ! -d "$gnulib_path" ]; then - echo "$0: getting gnulib files..." - - trap cleanup_gnulib 1 2 13 15 - - shallow= - if test -z "$GNULIB_REVISION"; then - git clone -h 2>&1 | grep -- --depth > /dev/null && shallow='--depth 2' - git clone $shallow ${GNULIB_URL:-$default_gnulib_url} "$gnulib_path" \ - || cleanup_gnulib - else - git fetch -h 2>&1 | grep -- --depth > /dev/null && shallow='--depth 2' - mkdir -p "$gnulib_path" - # Only want a shallow checkout of $GNULIB_REVISION, but git does not - # support cloning by commit hash. So attempt a shallow fetch by commit - # hash to minimize the amount of data downloaded and changes needed to - # be processed, which can drastically reduce download and processing - # time for checkout. If the fetch by commit fails, a shallow fetch can - # not be performed because we do not know what the depth of the commit - # is without fetching all commits. So fallback to fetching all commits. - git -C "$gnulib_path" init - git -C "$gnulib_path" remote add origin \ - ${GNULIB_URL:-$default_gnulib_url} - git -C "$gnulib_path" fetch $shallow origin "$GNULIB_REVISION" \ - || git -C "$gnulib_path" fetch origin \ - || cleanup_gnulib - git -C "$gnulib_path" reset --hard FETCH_HEAD - fi - - trap - 1 2 13 15 - fi - GNULIB_SRCDIR=$gnulib_path - ;; - *) - # Use GNULIB_SRCDIR directly or as a reference. - if $use_git && test -d "$GNULIB_SRCDIR"/.git && \ - git_modules_config submodule.gnulib.url >/dev/null; then - echo "$0: getting gnulib files..." - if git submodule -h|grep -- --reference > /dev/null; then - # Prefer the one-liner available in git 1.6.4 or newer. - git submodule update --init --reference "$GNULIB_SRCDIR" \ - "$gnulib_path" || exit $? - else - # This fallback allows at least git 1.5.5. - if test -f "$gnulib_path"/gnulib-tool; then - # Since file already exists, assume submodule init already complete. - git submodule update -- "$gnulib_path" || exit $? - else - # Older git can't clone into an empty directory. - rmdir "$gnulib_path" 2>/dev/null - git clone --reference "$GNULIB_SRCDIR" \ - "$(git_modules_config submodule.gnulib.url)" "$gnulib_path" \ - && git submodule init -- "$gnulib_path" \ - && git submodule update -- "$gnulib_path" \ - || exit $? - fi - fi - GNULIB_SRCDIR=$gnulib_path - fi - ;; - esac - - if test -d "$GNULIB_SRCDIR"/.git && test -n "$GNULIB_REVISION" \ - && ! git_modules_config submodule.gnulib.url >/dev/null; then - (cd "$GNULIB_SRCDIR" && git checkout "$GNULIB_REVISION") || cleanup_gnulib - fi - - # $GNULIB_SRCDIR now points to the version of gnulib to use, and - # we no longer need to use git or $gnulib_path below here. - - if $bootstrap_sync; then - cmp -s "$0" "$GNULIB_SRCDIR/build-aux/bootstrap" || { - echo "$0: updating bootstrap and restarting..." - case $(sh -c 'echo "$1"' -- a) in - a) ignored=--;; - *) ignored=ignored;; - esac - exec sh -c \ - 'cp "$1" "$2" && shift && exec "${CONFIG_SHELL-/bin/sh}" "$@"' \ - $ignored "$GNULIB_SRCDIR/build-aux/bootstrap" \ - "$0" "$@" --no-bootstrap-sync - } - fi - - gnulib_tool=$GNULIB_SRCDIR/gnulib-tool - <$gnulib_tool || exit $? +if $gen; then + autogen \ + `if $copy; then echo ' --copy'; fi` \ + `if test -z "$checkout_only_file"; then echo ' --force'; fi` \ + || die "could not generate auxiliary files" fi -# Get translations. - -download_po_files() { - subdir=$1 - domain=$2 - echo "$me: getting translations into $subdir for $domain..." - cmd=$(printf "$po_download_command_format" "$subdir" "$domain") - eval "$cmd" -} - -# Mirror .po files to $po_dir/.reference and copy only the new -# or modified ones into $po_dir. Also update $po_dir/LINGUAS. -# Note po files that exist locally only are left in $po_dir but will -# not be included in LINGUAS and hence will not be distributed. -update_po_files() { - # Directory containing primary .po files. - # Overwrite them only when we're sure a .po file is new. - po_dir=$1 - domain=$2 - - # Mirror *.po files into this dir. - # Usually contains *.s1 checksum files. - ref_po_dir="$po_dir/.reference" - - test -d $ref_po_dir || mkdir $ref_po_dir || return - download_po_files $ref_po_dir $domain \ - && ls "$ref_po_dir"/*.po 2>/dev/null | - sed 's|.*/||; s|\.po$||' > "$po_dir/LINGUAS" || return - - langs=$(cd $ref_po_dir && echo *.po | sed 's/\.po//g') - test "$langs" = '*' && langs=x - for po in $langs; do - case $po in x) continue;; esac - new_po="$ref_po_dir/$po.po" - cksum_file="$ref_po_dir/$po.s1" - if ! test -f "$cksum_file" || - ! test -f "$po_dir/$po.po" || - ! $SHA1SUM -c "$cksum_file" < "$new_po" > /dev/null 2>&1; then - echo "$me: updated $po_dir/$po.po..." - cp "$new_po" "$po_dir/$po.po" \ - && $SHA1SUM < "$new_po" > "$cksum_file" || return - fi - done -} - -case $SKIP_PO in -'') - if test -d po; then - update_po_files po $package || exit - fi - - if test -d runtime-po; then - update_po_files runtime-po $package-runtime || exit - fi;; -esac - -version_controlled_file() { - parent=$1 - file=$2 - if test -d .git; then - git rm -n "$file" > /dev/null 2>&1 - elif test -d .svn; then - svn log -r HEAD "$file" > /dev/null 2>&1 - elif test -d CVS; then - grep -F "/${file##*/}/" "$parent/CVS/Entries" 2>/dev/null | - grep '^/[^/]*/[0-9]' > /dev/null - else - warn_ "no version control for $file?" - false - fi -} - -# NOTE: we have to be careful to run both autopoint and libtoolize -# before gnulib-tool, since gnulib-tool is likely to provide newer -# versions of files "installed" by these two programs. -# Then, *after* gnulib-tool (see below), we have to be careful to -# run autoreconf in such a way that it does not run either of these -# two just-pre-run programs. - -# Import from gettext. -with_gettext=yes -grep '^[ ]*AM_GNU_GETTEXT_VERSION(' configure.ac >/dev/null || \ - with_gettext=no - -if test $with_gettext = yes || test $use_libtool = 1; then - - tempbase=.bootstrap$$ - trap "rm -f $tempbase.0 $tempbase.1" 1 2 13 15 - - > $tempbase.0 > $tempbase.1 && - find . ! -type d -print | sort > $tempbase.0 || exit - - if test $with_gettext = yes; then - # Released autopoint has the tendency to install macros that have been - # obsoleted in current gnulib, so run this before gnulib-tool. - echo "$0: $AUTOPOINT --force" - $AUTOPOINT --force || exit - fi - - # Autoreconf runs aclocal before libtoolize, which causes spurious - # warnings if the initial aclocal is confused by the libtoolized - # (or worse out-of-date) macro directory. - # libtoolize 1.9b added the --install option; but we support back - # to libtoolize 1.5.22, where the install action was default. - if test $use_libtool = 1; then - install= - case $($LIBTOOLIZE --help) in - *--install*) install=--install ;; - esac - echo "running: $LIBTOOLIZE $install --copy" - $LIBTOOLIZE $install --copy - fi - - find . ! -type d -print | sort >$tempbase.1 - old_IFS=$IFS - IFS=$nl - for file in $(comm -13 $tempbase.0 $tempbase.1); do - IFS=$old_IFS - parent=${file%/*} - version_controlled_file "$parent" "$file" || { - for dot_ig in x $vc_ignore; do - test $dot_ig = x && continue - ig=$parent/$dot_ig - insert_vc_ignore "$ig" "${file##*/}" - done - } - done - IFS=$old_IFS - - rm -f $tempbase.0 $tempbase.1 - trap - 1 2 13 15 -fi - -# Import from gnulib. - -if $use_gnulib; then - gnulib_tool_options="\ - --no-changelog\ - --aux-dir=$build_aux\ - --doc-base=$doc_base\ - --lib=$gnulib_name\ - --m4-base=$m4_base/\ - --source-base=$source_base/\ - --tests-base=$tests_base\ - --local-dir=$local_gl_dir\ - $gnulib_tool_option_extras\ - " - if test $use_libtool = 1; then - case "$gnulib_tool_options " in - *' --libtool '*) ;; - *) gnulib_tool_options="$gnulib_tool_options --libtool" ;; - esac - fi - echo "$0: $gnulib_tool $gnulib_tool_options --import ..." - $gnulib_tool $gnulib_tool_options --import $gnulib_modules \ - || die "gnulib-tool failed" - - for file in $gnulib_files; do - symlink_to_dir "$GNULIB_SRCDIR" $file \ - || die "failed to symlink $file" - done -fi - -bootstrap_post_import_hook \ - || die "bootstrap_post_import_hook failed" - -# Don't proceed if there are uninitialized submodules. In particular, -# the next step will remove dangling links, which might be links into -# uninitialized submodules. -# -# Uninitialized submodules are listed with an initial dash. -if $use_git && git submodule | grep '^-' >/dev/null; then - die "some git submodules are not initialized. " \ - "Run 'git submodule update --init' and bootstrap again." -fi - -# Remove any dangling symlink matching "*.m4" or "*.[ch]" in some -# gnulib-populated directories. Such .m4 files would cause aclocal to fail. -# The following requires GNU find 4.2.3 or newer. Considering the usual -# portability constraints of this script, that may seem a very demanding -# requirement, but it should be ok. Ignore any failure, which is fine, -# since this is only a convenience to help developers avoid the relatively -# unusual case in which a symlinked-to .m4 file is git-removed from gnulib -# between successive runs of this script. -find "$m4_base" "$source_base" \ - -depth \( -name '*.m4' -o -name '*.[ch]' \) \ - -type l -xtype l -delete > /dev/null 2>&1 - -# Invoke autoreconf with --force --install to ensure upgrades of tools -# such as ylwrap. -AUTORECONFFLAGS="--verbose --install --force -I $m4_base $ACLOCAL_FLAGS" - -# Some systems (RHEL 5) are using ancient autotools, for which the -# --no-recursive option had not been invented. Detect that lack and -# omit the option when it's not supported. FIXME in 2017: remove this -# hack when RHEL 5 autotools are updated, or when they become irrelevant. -case $($AUTORECONF --help) in - *--no-recursive*) AUTORECONFFLAGS="$AUTORECONFFLAGS --no-recursive";; -esac - -# Tell autoreconf not to invoke autopoint or libtoolize; they were run above. -echo "running: AUTOPOINT=true LIBTOOLIZE=true $AUTORECONF $AUTORECONFFLAGS" -AUTOPOINT=true LIBTOOLIZE=true $AUTORECONF $AUTORECONFFLAGS \ - || die "autoreconf failed" - -# Get some extra files from gnulib, overriding existing files. -for file in $gnulib_extra_files; do - case $file in - */INSTALL) dst=INSTALL;; - build-aux/*) dst=$build_aux/${file#build-aux/};; - *) dst=$file;; - esac - symlink_to_dir "$GNULIB_SRCDIR" $file $dst \ - || die "failed to symlink $file" -done - -if test $with_gettext = yes; then - # Create gettext configuration. - echo "$0: Creating po/Makevars from po/Makevars.template ..." - rm -f po/Makevars - sed ' - /^EXTRA_LOCALE_CATEGORIES *=/s/=.*/= '"$EXTRA_LOCALE_CATEGORIES"'/ - /^COPYRIGHT_HOLDER *=/s/=.*/= '"$COPYRIGHT_HOLDER"'/ - /^MSGID_BUGS_ADDRESS *=/s|=.*|= '"$MSGID_BUGS_ADDRESS"'| - /^XGETTEXT_OPTIONS *=/{ - s/$/ \\/ - a\ - '"$XGETTEXT_OPTIONS"' $${end_of_xgettext_options+} - } - ' po/Makevars.template >po/Makevars \ - || die 'cannot generate po/Makevars' - - # If the 'gettext' module is in use, grab the latest Makefile.in.in. - # If only the 'gettext-h' module is in use, assume autopoint already - # put the correct version of this file into place. - case $gnulib_modules in - *gettext-h*) ;; - *gettext*) - cp $GNULIB_SRCDIR/build-aux/po/Makefile.in.in po/Makefile.in.in \ - || die "cannot create po/Makefile.in.in" - ;; - esac - - if test -d runtime-po; then - # Similarly for runtime-po/Makevars, but not quite the same. - rm -f runtime-po/Makevars - sed ' - /^DOMAIN *=.*/s/=.*/= '"$package"'-runtime/ - /^subdir *=.*/s/=.*/= runtime-po/ - /^MSGID_BUGS_ADDRESS *=/s/=.*/= bug-'"$package"'@gnu.org/ - /^XGETTEXT_OPTIONS *=/{ - s/$/ \\/ - a\ - '"$XGETTEXT_OPTIONS_RUNTIME"' $${end_of_xgettext_options+} - } - ' po/Makevars.template >runtime-po/Makevars \ - || die 'cannot generate runtime-po/Makevars' - - # Copy identical files from po to runtime-po. - (cd po && cp -p Makefile.in.in *-quot *.header *.sed *.sin ../runtime-po) - fi -fi - -bootstrap_epilogue - -echo "$0: done. Now you can run './configure'." +# ---------------------------------------------------------------------------- # Local Variables: -# eval: (add-hook 'before-save-hook 'time-stamp) +# eval: (add-hook 'before-save-hook 'time-stamp nil t) # time-stamp-start: "scriptversion=" # time-stamp-format: "%:y-%02m-%02d.%02H" # time-stamp-time-zone: "UTC0" diff --git a/bootstrap.conf b/bootstrap.conf index 98d0e1c..c9038c9 100644 --- a/bootstrap.conf +++ b/bootstrap.conf @@ -1,6 +1,6 @@ -# Bootstrap configuration. +# Bootstrap configuration. -*- sh -*- -# Copyright (C) 2006-2022 Free Software Foundation, Inc. +# Copyright (C) 2006-2025 Free Software Foundation, Inc. # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff --git a/configure.ac b/configure.ac index 8e4eba6..818bee9 100644 --- a/configure.ac +++ b/configure.ac @@ -6,7 +6,7 @@ AC_CONFIG_MACRO_DIRS([m4]) AC_INIT([dhcpd-pools], [m4_esyscmd([build-aux/git-version-gen .tarball-version])], [kerolasa@iki.fi],[], - [http://dhcpd-pools.sourceforge.net/]) + [https://dhcpd-pools.sourceforge.net/]) PACKAGE_MAINTAINER="Sami Kerola" AC_SUBST([PACKAGE_MAINTAINER]) AC_CONFIG_AUX_DIR([build-aux]) diff --git a/contrib/PKGBUILD b/contrib/PKGBUILD index 6fbb5cf..08770a4 100644 --- a/contrib/PKGBUILD +++ b/contrib/PKGBUILD @@ -7,7 +7,7 @@ pkgver=0 pkgrel=1 pkgdesc="ISC dhcpd lease status utility" arch=('i686' 'x86_64') -url=http://dhcpd-pools.sourceforge.net/ +url=https://dhcpd-pools.sourceforge.net/ license=('BSD') depends=('pacman') makedepends=('uthash' 'git') diff --git a/lib/.gitignore b/lib/.gitignore index daef416..e2e741c 100644 --- a/lib/.gitignore +++ b/lib/.gitignore @@ -1,11 +1,15 @@ /alloca.h /alloca.in.h /arg-nonnull.h -/arpa/inet.h +/arpa/ +/arpa_inet.c /arpa_inet.in.h +/assert.in.h /attribute.h /basename-lgpl.c /basename-lgpl.h +/c32is-impl.h +/c32isprint.c /calloc.c /c-ctype.c /c-ctype.h @@ -22,13 +26,11 @@ /c-strcaseeq.h /c-strcase.h /c-strncasecmp.c -/dirname.h -/dirname-lgpl.c -/dosname.h /dup2.c /errno.in.h /error.c /error.h +/error.in.h /exitfail.c /exitfail.h /fclose.c @@ -43,6 +45,7 @@ /flexmember.h /float.c /float+.h +/float.h /float.in.h /fopen.c /fpending.c @@ -57,6 +60,8 @@ /ftell.c /ftello.c /getdtablesize.c +/getlocalename_l-unsafe.c +/getlocalename_l-unsafe.h /getopt1.c /getopt.c /getopt-cdefs.in.h @@ -69,8 +74,6 @@ /getprogname.c /getprogname.h /gettext.h -/.gitignore~ -/glthread/* /hard-locale.c /hard-locale.h /ialloc.c @@ -78,6 +81,7 @@ /idx.h /inet_pton.c /intprops.h +/intprops-internal.h /inttypes.h /inttypes.in.h /isnan.c @@ -89,16 +93,60 @@ /lc-charset-dispatch.h /libc-config.h /libdhcpd_pools.la +/libdhcpd_pools_la-arpa_inet.lo +/libdhcpd_pools_la-basename-lgpl.lo +/libdhcpd_pools_la-c32isprint.lo +/libdhcpd_pools_la-c-ctype.lo +/libdhcpd_pools_la-cloexec.lo +/libdhcpd_pools_la-closeout.lo +/libdhcpd_pools_la-close-stream.lo +/libdhcpd_pools_la-c-strcasecmp.lo +/libdhcpd_pools_la-exitfail.lo +/libdhcpd_pools_la-fclose.lo +/libdhcpd_pools_la-fcntl.lo +/libdhcpd_pools_la-fd-hook.lo +/libdhcpd_pools_la-fflush.lo +/libdhcpd_pools_la-float.lo +/libdhcpd_pools_la-fopen.lo +/libdhcpd_pools_la-fpurge.lo +/libdhcpd_pools_la-freading.lo +/libdhcpd_pools_la-fseek.lo +/libdhcpd_pools_la-fseeko.lo +/libdhcpd_pools_la-getprogname.lo +/libdhcpd_pools_la-hard-locale.lo +/libdhcpd_pools_la-ialloc.lo +/libdhcpd_pools_la-localcharset.lo +/libdhcpd_pools_la-malloca.lo +/libdhcpd_pools_la-math.lo +/libdhcpd_pools_la-mbrtoc32.lo +/libdhcpd_pools_la-mbrtowc.lo +/libdhcpd_pools_la-mbszero.lo +/libdhcpd_pools_la-mktime.lo +/libdhcpd_pools_la-nstrftime.lo +/libdhcpd_pools_la-progname.lo +/libdhcpd_pools_la-quotearg.lo +/libdhcpd_pools_la-reallocarray.lo +/libdhcpd_pools_la-realloc.lo +/libdhcpd_pools_la-setlocale_null.lo +/libdhcpd_pools_la-setlocale_null-unlocked.lo +/libdhcpd_pools_la-stat-time.lo +/libdhcpd_pools_la-stdlib.lo +/libdhcpd_pools_la-sys_socket.lo +/libdhcpd_pools_la-timegm.lo +/libdhcpd_pools_la-time_rz.lo +/libdhcpd_pools_la-unistd.lo +/libdhcpd_pools_la-wctype-h.lo +/libdhcpd_pools_la-xalloc-die.lo +/libdhcpd_pools_la-xmalloc.lo /.libs/ /limits.h /limits.in.h -/*.lo /localcharset.c /localcharset.h /locale.h /locale.in.h -/localtime-buffer.c -/localtime-buffer.h +/localename.h +/localename-unsafe.c /lseek.c /Makefile.am /malloca.c @@ -107,10 +155,12 @@ /math.c /math.h /math.in.h +/mbrtoc32.c /mbrtowc.c /mbrtowc-impl.h /mbrtowc-impl-utf8.h /mbsinit.c +/mbszero.c /mbtowc-lock.c /mbtowc-lock.h /memchr.c @@ -138,13 +188,15 @@ /setlocale-lock.c /setlocale_null.c /setlocale_null.h +/setlocale_null-unlocked.c /stat.c /stat-time.c /stat-time.h /stat-w32.c /stat-w32.h -/stdalign.in.h -/stdbool.in.h +/stdckdint.h +/stdckdint.in.h +/stddef.h /stddef.in.h /stdint.in.h /stdio.h @@ -152,6 +204,7 @@ /stdio.in.h /stdio-read.c /stdio-write.c +/stdlib.c /stdlib.h /stdlib.in.h /stpncpy.c @@ -160,21 +213,18 @@ /strerror.c /strerror-override.c /strerror-override.h +/strftime.c /strftime.h /string.h /string.in.h -/stripslash.c /strstr.c /strtod.c /str-two-way.h +/sys/ /sys_socket.c -/sys/socket.h /sys_socket.in.h -/sys/stat.h /sys_stat.in.h -/sys/types.h /sys_types.in.h -/sys/uio.h /sys_uio.in.h /timegm.c /time.h @@ -183,11 +233,21 @@ /time_r.c /time_rz.c /tzset.c +/uchar.h +/uchar.in.h +/unictype/ +/unictype/bitmap.h +/unictype/ctype_print.c +/unictype/ctype_print.h +/unictype/.gitignore +/unictype.h +/unictype.in.h /unistd.c /unistd.h /unistd.in.h +/unitypes.h +/unitypes.in.h /unsetenv.c -/unused-parameter.h /verify.h /warn-on-use.h /wchar.h @@ -196,14 +256,6 @@ /wctype-h.c /wctype.in.h /windows-initguard.h -/windows-mutex.c -/windows-mutex.h -/windows-once.c -/windows-once.h -/windows-recmutex.c -/windows-recmutex.h -/windows-rwlock.c -/windows-rwlock.h /xalloc-die.c /xalloc.h /xalloc-oversized.h diff --git a/man/dhcpd-pools.1.in b/man/dhcpd-pools.1.in index 2179163..5001e24 100644 --- a/man/dhcpd-pools.1.in +++ b/man/dhcpd-pools.1.in @@ -1,4 +1,5 @@ -.TH DHCPD-POOLS "1" "2017-11-15" "@VERSION@" "User Commands" +'\" t +.TH DHCPD-POOLS "1" "2024-08-09" "@VERSION@" "User Commands" .SH NAME dhcpd-pools \- ISC dhcpd pools usage analysis .SH SYNOPSIS diff --git a/project.doap b/project.doap index e3cf0f6..b9f0a8a 100644 --- a/project.doap +++ b/project.doap @@ -3,9 +3,9 @@ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#" xmlns:foaf="http://xmlns.com/foaf/0.1/"> - + dhcpd-pools - + This is dhcpd-pools ISC dhcp shared network and pool range usage analysis tool. Purpose of command is to count usage ratio of each diff --git a/src/dhcpd-pools.h b/src/dhcpd-pools.h index 0f93b80..aff6b6a 100644 --- a/src/dhcpd-pools.h +++ b/src/dhcpd-pools.h @@ -102,6 +102,9 @@ enum prefix_t { PREFIX_BINDING_STATE_ACTIVE, PREFIX_BINDING_STATE_BACKUP, PREFIX_HARDWARE_ETHERNET, + PREFIX_STARTS, + PREFIX_ENDS, + PREFIX_HOSTNAME, NUM_OF_PREFIX }; @@ -180,6 +183,9 @@ struct leases_t { char *ethernet; UT_hash_handle hh; enum ltype type; + char *ends; + char *starts; + char *hostname; }; /*! \enum limbits diff --git a/src/getdata.c b/src/getdata.c index 7863a6b..31734de 100644 --- a/src/getdata.c +++ b/src/getdata.c @@ -83,7 +83,7 @@ enum isc_conf_parser { int parse_leases(struct conf_t *state) { FILE *dhcpd_leases; - char *line, *ipstring, macstring[20], *stop; + char *line, *ipstring, macstring[20], *stop, endsstr[30], startsstr[30], hostnamestr[MAXLEN]; union ipaddr_t addr; struct leases_t *lease; @@ -100,6 +100,9 @@ int parse_leases(struct conf_t *state) line[0] = '\0'; ipstring = xmalloc(sizeof(char) * MAXLEN); ipstring[0] = '\0'; + endsstr[0] = '\0'; + startsstr[0] = '\0'; + hostnamestr[0] = '\0'; while (!feof(dhcpd_leases)) { if (!fgets(line, MAXLEN, dhcpd_leases) && ferror(dhcpd_leases)) error(EXIT_FAILURE, errno, "parse_leases: %s", state->dhcpdlease_file); @@ -142,8 +145,35 @@ int parse_leases(struct conf_t *state) break; memcpy(macstring, line + 20, 17); macstring[17] = '\0'; - if ((lease = find_lease(state, &addr)) != NULL) + if ((lease = find_lease(state, &addr)) != NULL) { lease->ethernet = xstrdup(macstring); + lease->starts = xstrdup(startsstr); + startsstr[0] = '\0'; + lease->ends = xstrdup(endsstr); + endsstr[0] = '\0'; + } + break; + case PREFIX_ENDS: + if (state->print_mac_addreses == 0) + break; + strncpy(endsstr, line + 7, sizeof(endsstr)-1); + endsstr[strlen(endsstr)-2] = '\0'; + break; + case PREFIX_STARTS: + if (state->print_mac_addreses == 0) + break; + strncpy(startsstr, line + 9, sizeof(startsstr)-1); + startsstr[strlen(startsstr)-2] = '\0'; + break; + case PREFIX_HOSTNAME: + if (state->print_mac_addreses == 0) + break; + strncpy(hostnamestr, line + 19, sizeof(hostnamestr)-1); + hostnamestr[strlen(hostnamestr)-3] = '\0'; + if ((lease = find_lease(state, &addr)) != NULL) { + lease->hostname = xstrdup(hostnamestr); + } + hostnamestr[0] = '\0'; break; default: /* do nothing */ ; @@ -211,8 +241,14 @@ void parse_config(struct conf_t *state, const int is_include, const char *restri shared_p->name = state->shared_net_root->name; /* Open configuration file */ dhcpd_config = fopen(config_file, "r"); - if (dhcpd_config == NULL) + if (dhcpd_config == NULL) { + if (is_include) { + error(0, errno, "cannot open inlude: %s", config_file); + return; + } + /* config if from command line, just exit with error */ error(EXIT_FAILURE, errno, "parse_config: %s", config_file); + } #ifdef HAVE_POSIX_FADVISE # ifdef POSIX_FADV_SEQUENTIAL if (posix_fadvise(fileno(dhcpd_config), 0, 0, POSIX_FADV_SEQUENTIAL) != 0) diff --git a/src/hash.c b/src/hash.c index 77ecd79..eb434df 100644 --- a/src/hash.c +++ b/src/hash.c @@ -66,6 +66,9 @@ void add_lease_v4(struct conf_t *state, union ipaddr_t *addr, enum ltype type) l->type = type; HASH_ADD_INT(state->leases, ip.v4, l); l->ethernet = NULL; + l->ends = NULL; + l->starts = NULL; + l->hostname = NULL; } void add_lease_v6(struct conf_t *state, union ipaddr_t *addr, enum ltype type) @@ -77,6 +80,9 @@ void add_lease_v6(struct conf_t *state, union ipaddr_t *addr, enum ltype type) l->type = type; HASH_ADD_V6(state->leases, ip.v6, l); l->ethernet = NULL; + l->ends = NULL; + l->starts = NULL; + l->hostname = NULL; } /*! \brief Find pointer to lease from hash array. @@ -110,6 +116,9 @@ struct leases_t *find_lease_v6(struct conf_t *state, union ipaddr_t *addr) void delete_lease(struct conf_t *state, struct leases_t *lease) { free(lease->ethernet); + free(lease->ends); + free(lease->starts); + free(lease->hostname); HASH_DEL(state->leases, lease); free(lease); } @@ -122,6 +131,9 @@ void delete_all_leases(struct conf_t *state) HASH_ITER(hh, state->leases, l, tmp) { free(l->ethernet); + free(l->ends); + free(l->starts); + free(l->hostname); HASH_DEL(state->leases, l); free(l); } @@ -134,6 +146,9 @@ void delete_all_leases(struct conf_t *state) l = state->leases; free(l->ethernet); + free(l->ends); + free(l->starts); + free(l->hostname); HASH_DEL(state->leases, l); /* leases advances to next on delete */ free(l); } diff --git a/src/mustach.c b/src/mustach.c index 45eb7a4..b197a83 100644 --- a/src/mustach.c +++ b/src/mustach.c @@ -8,7 +8,7 @@ you may not use this file except in compliance with the License. You may obtain a copy of the License at - http://www.apache.org/licenses/LICENSE-2.0 + https://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, @@ -19,6 +19,8 @@ #define _GNU_SOURCE +#include "config.h" + #include #include #include diff --git a/src/mustach.h b/src/mustach.h index 32288a1..0ceba16 100644 --- a/src/mustach.h +++ b/src/mustach.h @@ -8,7 +8,7 @@ you may not use this file except in compliance with the License. You may obtain a copy of the License at - http://www.apache.org/licenses/LICENSE-2.0 + https://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, diff --git a/src/other.c b/src/other.c index 21a19f4..b319a2d 100644 --- a/src/other.c +++ b/src/other.c @@ -417,6 +417,12 @@ int } if (!memcmp("lease ", str, 6)) return PREFIX_LEASE; + else if (!memcmp(" starts ", str, 9)) + return PREFIX_STARTS; + else if (!memcmp(" ends ", str, 7)) + return PREFIX_ENDS; + else if (!memcmp(" client-hostname ", str, 18)) + return PREFIX_HOSTNAME; return NUM_OF_PREFIX; } @@ -472,6 +478,12 @@ int } if (!memcmp(" iaaddr ", str, 9)) return PREFIX_LEASE; + else if (!memcmp(" starts ", str, 9)) + return PREFIX_STARTS; + else if (!memcmp(" ends ", str, 7)) + return PREFIX_ENDS; + else if (!memcmp(" client-hostname ", str, 18)) + return PREFIX_HOSTNAME; return NUM_OF_PREFIX; } diff --git a/src/output.c b/src/output.c index 4cd0226..4ff0a90 100644 --- a/src/output.c +++ b/src/output.c @@ -387,7 +387,19 @@ static int output_xml(struct conf_t *state) if (l->ethernet != NULL) { fputs(l->ethernet, outfile); } - fputs("\n\n", outfile); + fputs("\n\t", outfile); + if (l->starts != NULL) { + fputs(l->starts, outfile); + } + fputs("\n\t", outfile); + if (l->ends != NULL) { + fputs(l->ends, outfile); + } + fputs("\n\t", outfile); + if (l->hostname != NULL) { + fputs(l->hostname, outfile); + } + fputs("\n\n", outfile); } } } @@ -481,6 +493,18 @@ static int output_json(struct conf_t *state) if (l->ethernet != NULL) { fputs(l->ethernet, outfile); } + fputs("\", \"starts\":\"", outfile); + if (l->starts != NULL) { + fputs(l->starts, outfile); + } + fputs("\", \"ends\":\"", outfile); + if (l->ends != NULL) { + fputs(l->ends, outfile); + } + fputs("\", \"hostname\":\"", outfile); + if (l->hostname != NULL) { + fputs(l->hostname, outfile); + } fputs("\" }", outfile); } } @@ -587,9 +611,15 @@ static int output_json(struct conf_t *state) fprintf(outfile, " \"touched\":%g,\n", state->shared_net_root->touched); fprintf(outfile, " \"free\":%g,\n", state->shared_net_root->available - state->shared_net_root->used); - fprintf(outfile, " \"percent\":%g,\n", oh.percent); + if (fpclassify(state->shared_net_root->available) == FP_ZERO) + fprintf(outfile, " \"percent\":\"%g\",\n", oh.percent); + else + fprintf(outfile, " \"percent\":%g,\n", oh.percent); fprintf(outfile, " \"touch_count\":%g,\n", oh.tc); - fprintf(outfile, " \"touch_percent\":%g,\n", oh.tcp); + if (fpclassify(state->shared_net_root->available) == FP_ZERO) + fprintf(outfile, " \"touch_percent\":\"%g\",\n", oh.tcp); + else + fprintf(outfile, " \"touch_percent\":%g,\n", oh.tcp); if (state->backups_found == 1) { fprintf(outfile, " \"backup_count\":%g,\n", state->shared_net_root->backups); @@ -628,8 +658,8 @@ static void html_header(struct conf_t *state, FILE *restrict f) fprintf(f, "\n"); fprintf(f, "\n"); fprintf(f, "\n"); - fprintf(f, "\n"); - fprintf(f, "\n"); + fprintf(f, "\n"); + fprintf(f, "\n"); fprintf(f, "\n"); @@ -652,8 +682,8 @@ static void html_footer(FILE *restrict f) fprintf(f, "Generated using %s
\n", PACKAGE_STRING); fprintf(f, "More info at %s\n", PACKAGE_URL, PACKAGE_URL); fprintf(f, "
\n"); - fprintf(f, "\n"); - fprintf(f, "\n"); + fprintf(f, "\n"); + fprintf(f, "\n"); fprintf(f, "\n"); fprintf(f, "\n"); fprintf(f, "\n"); diff --git a/tests/expected/errors b/tests/expected/errors index b85e282..6903ac6 100644 --- a/tests/expected/errors +++ b/tests/expected/errors @@ -7,7 +7,16 @@ dhcpd-pools: unknown color mode: 'sometimes' === IPv5 dhcpd-pools: unknown --ip-version argument: 5 === missing conf -dhcpd-pools: parse_config: ./tests/confs/complete_NXFILE: No such file or directory +dhcpd-pools: cannot open inlude: ./tests/confs/complete_NXFILE: No such file or directory +Ranges: +shared net name first ip last ip max cur percent touch t+c t+c perc + +Shared networks: +name max cur percent touch t+c t+c perc + +Sum of all ranges: +name max cur percent touch t+c t+c perc +All networks 0 0 nan 0 0 nan === missing leases dhcpd-pools: parse_leases: ./tests/leases/complete_NXFILE: No such file or directory === html table diff --git a/tests/expected/formats b/tests/expected/formats index 9948c70..4023f89 100644 --- a/tests/expected/formats +++ b/tests/expected/formats @@ -23,8 +23,8 @@ All networks 100 43 43.000 0 43 43.000 - - + + @@ -176,10 +176,10 @@ table.dhcpd-pools th { text-transform: capitalize }
- - + + diff --git a/tests/expected/same-twice-json b/tests/expected/same-twice-json index f572972..f23d1b0 100644 --- a/tests/expected/same-twice-json +++ b/tests/expected/same-twice-json @@ -1,6 +1,6 @@ { "active_leases": [ - { "ip":"10.0.0.5", "macaddress":"00:00:00:00:00:00" } + { "ip":"10.0.0.5", "macaddress":"00:00:00:00:00:00", "starts":"", "ends":"", "hostname":"" } ], "subnets": [ { "location":"All networks", "range":"10.0.0.1 - 10.0.0.10", "first_ip":"10.0.0.1", "last_ip":"10.0.0.10", "defined":10, "used":1, "touched":0, "free":9, "percent":10, "touch_count":1, "touch_percent":10, "status":0 } diff --git a/tests/expected/same-twice-xml b/tests/expected/same-twice-xml index 93612d6..7897f7f 100644 --- a/tests/expected/same-twice-xml +++ b/tests/expected/same-twice-xml @@ -2,6 +2,9 @@ 10.0.0.5 00:00:00:00:00:00 + + + All networks diff --git a/webpages/dhcpd-pools.awk b/webpages/dhcpd-pools.awk index 38d5f18..9c1f299 100644 --- a/webpages/dhcpd-pools.awk +++ b/webpages/dhcpd-pools.awk @@ -4,12 +4,11 @@ # analysis algorithm is sane. This script is no longer # maintained, and can be considered as historic reference. # -# Licensed under the Open Software License version 1.1 -# http://opensource.org/licenses/osl.php +# Licensed under the Open Software License version 1.0 +# https://opensource.org/license/osl-1-0/ # # Sami Kerola # -# Latest version is available from http://www.iki.fi/kerolasa/dhcp/ # This is version 1.4 BEGIN { diff --git a/webpages/index.html b/webpages/index.html index 088c546..7d5b748 100644 --- a/webpages/index.html +++ b/webpages/index.html @@ -30,7 +30,7 @@ font-variant: normal; -
+

ISC dhcpd lease analysis and reporting

This is dhcpd-pools ISC dhcp @@ -49,9 +49,18 @@ any significant difference in getting analysis done.

prompt> ./dhcpd-pools --config=/etc/dhcpd.conf --leases=/var/lib/dhcp/dhcpd.leases --format=H --color=always --warning=40 --critical=50 --output=sampleoutput.html +href="https://dhcpd-pools.sourceforge.net/sampleoutput.html">sampleoutput.html

+

Is dhcpd-pools still developed?

+

In short no, it is not.

+

+ISC DHCPD has reached +EOL. Users are Kea DHCP server instead. Kea has native +statistics, so it does not require this tool and therefore the +dhcpd-pools is obsolte. +

Where I can get dhcpd-pools?

Download release package @@ -61,11 +70,11 @@ file.

git clone git://git.code.sf.net/p/dhcpd-pools/code dhcpd-pools

See also -SourceForge project page.

+SourceForge project page.

Documentation

The dhcpd-pools -manual page, and -Doxygen software +manual page, and +Doxygen software reference documentation are available online.

Getting the output you need

    @@ -80,8 +89,8 @@ try:
  1. Start filtering output. Options to try:
    --skip --limit
  2. Change --format -option to what you need, and maybe include --perfdata if you want nagios alarm +option to what you need, and maybe include +--perfdata if you want nagios alarm format.
  3. Done.
@@ -90,33 +99,33 @@ format.

The program was written because -DHCPStatus, -DHCP Usage Statistics, -reportdhcp.pl, -lease_analyzer and -dhcpd-snmp +DHCPStatus, +DHCP Usage Statistics, +reportdhcp.pl, +lease_analyzer and +dhcpd-snmp where too slow to handle huge number of leases. There is also difference in printed details. The dhcpd-pools does not print quite as much information as some other tools.

Notice that this utility is not the same as -dhcpd-pool +dhcpd-pool that is maintained by Trond Hasle Amundsen.

Just for laugh, obsolete awk proof of concept (version 1.4) -dhcpd-pools.awk

+dhcpd-pools.awk

Where to send questions, bug reports, code contributions...

-

Sami Kerola +

Sami Kerola <kerolasa@iki.fi>

-Wed Nov 15 12:47:30 GMT 2017 +Sat Nov 26 09:58:28 GMT 2022 3.0 FreeBSD License - -
+ +
0
-
+
5 ( 2 ratings )
diff --git a/webpages/robots.txt b/webpages/robots.txt index 25e6762..c9eedb4 100644 --- a/webpages/robots.txt +++ b/webpages/robots.txt @@ -1,3 +1,3 @@ -Sitemap: http://dhcpd-pools.sourceforge.net/sitemap.txt +Sitemap: https://dhcpd-pools.sourceforge.net/sitemap.txt User-agent: * Disallow: diff --git a/webpages/sampleoutput.html b/webpages/sampleoutput.html index af4d3d8..d27d3b6 100644 --- a/webpages/sampleoutput.html +++ b/webpages/sampleoutput.html @@ -5,8 +5,8 @@ - - + + @@ -14,7 +14,7 @@ table.dhcpd-pools th { text-transform: capitalize }

ISC DHCPD status

-File samples/dhcpd.leases was last modified at 2017-11-11T23:59:04+0000
+File tests/leases/formats was last modified at 2025-04-15T14:32:48+0100

Sum of all

@@ -27,8 +27,6 @@ table.dhcpd-pools th { text-transform: capitalize } - - @@ -41,8 +39,6 @@ table.dhcpd-pools th { text-transform: capitalize } - -
touch t+c t+c percbubu perc
0 43 43.000243.000
@@ -58,8 +54,6 @@ table.dhcpd-pools th { text-transform: capitalize } touch t+c t+c perc -bu -bu perc @@ -72,8 +66,6 @@ table.dhcpd-pools th { text-transform: capitalize } 0 21 52.500 -1 -2.500 example2 @@ -84,8 +76,6 @@ table.dhcpd-pools th { text-transform: capitalize } 0 17 42.500 -0 -0.000 @@ -103,8 +93,6 @@ table.dhcpd-pools th { text-transform: capitalize } touch t+c t+c perc -bu -bu perc @@ -119,8 +107,6 @@ table.dhcpd-pools th { text-transform: capitalize } 0 11 55.000 -1 -5.000 example1 @@ -133,8 +119,6 @@ table.dhcpd-pools th { text-transform: capitalize } 0 10 50.000 -0 -0.000 example2 @@ -147,8 +131,6 @@ table.dhcpd-pools th { text-transform: capitalize } 0 8 40.000 -0 -0.000 example2 @@ -161,8 +143,6 @@ table.dhcpd-pools th { text-transform: capitalize } 0 9 45.000 -0 -0.000 All networks @@ -175,17 +155,15 @@ table.dhcpd-pools th { text-transform: capitalize } 0 5 25.000 -1 -5.000
-Generated using dhcpd-pools 3.0
-More info at http://dhcpd-pools.sourceforge.net/ +Generated using dhcpd-pools 3.3
+More info at https://dhcpd-pools.sourceforge.net/
- - + + diff --git a/webpages/sitemap.txt b/webpages/sitemap.txt index f1f9fb4..28f6306 100644 --- a/webpages/sitemap.txt +++ b/webpages/sitemap.txt @@ -1,546 +1,546 @@ -http://dhcpd-pools.sourceforge.net/ -http://dhcpd-pools.sourceforge.net/dhcpd-pools.awk -http://dhcpd-pools.sourceforge.net/man.html -http://dhcpd-pools.sourceforge.net/doxygen/alloca_8h.html -http://dhcpd-pools.sourceforge.net/doxygen/alloca_8h_source.html -http://dhcpd-pools.sourceforge.net/doxygen/alloca_8in_8h.html -http://dhcpd-pools.sourceforge.net/doxygen/alloca_8in_8h_source.html -http://dhcpd-pools.sourceforge.net/doxygen/analyze_8c.html -http://dhcpd-pools.sourceforge.net/doxygen/annotated.html -http://dhcpd-pools.sourceforge.net/doxygen/arg-nonnull_8h.html -http://dhcpd-pools.sourceforge.net/doxygen/arg-nonnull_8h_source.html -http://dhcpd-pools.sourceforge.net/doxygen/arpa__inet_8in_8h.html -http://dhcpd-pools.sourceforge.net/doxygen/arpa__inet_8in_8h_source.html -http://dhcpd-pools.sourceforge.net/doxygen/basename-lgpl_8c.html -http://dhcpd-pools.sourceforge.net/doxygen/c_09_09defs_8h.html -http://dhcpd-pools.sourceforge.net/doxygen/c_09_09defs_8h_source.html -http://dhcpd-pools.sourceforge.net/doxygen/c-ctype_8c.html -http://dhcpd-pools.sourceforge.net/doxygen/c-ctype_8h.html -http://dhcpd-pools.sourceforge.net/doxygen/c-ctype_8h_source.html -http://dhcpd-pools.sourceforge.net/doxygen/classes.html -http://dhcpd-pools.sourceforge.net/doxygen/close_8c.html -http://dhcpd-pools.sourceforge.net/doxygen/closeout_8c.html -http://dhcpd-pools.sourceforge.net/doxygen/closeout_8h.html -http://dhcpd-pools.sourceforge.net/doxygen/closeout_8h_source.html -http://dhcpd-pools.sourceforge.net/doxygen/close-stream_8c.html -http://dhcpd-pools.sourceforge.net/doxygen/close-stream_8h.html -http://dhcpd-pools.sourceforge.net/doxygen/close-stream_8h_source.html -http://dhcpd-pools.sourceforge.net/doxygen/config_8h.html -http://dhcpd-pools.sourceforge.net/doxygen/config_8h_source.html -http://dhcpd-pools.sourceforge.net/doxygen/configmake_8h.html -http://dhcpd-pools.sourceforge.net/doxygen/configmake_8h_source.html -http://dhcpd-pools.sourceforge.net/doxygen/c-strcase_8h.html -http://dhcpd-pools.sourceforge.net/doxygen/c-strcase_8h_source.html -http://dhcpd-pools.sourceforge.net/doxygen/c-strcasecmp_8c.html -http://dhcpd-pools.sourceforge.net/doxygen/c-strcaseeq_8h.html -http://dhcpd-pools.sourceforge.net/doxygen/c-strcaseeq_8h_source.html -http://dhcpd-pools.sourceforge.net/doxygen/c-strncasecmp_8c.html -http://dhcpd-pools.sourceforge.net/doxygen/dhcpd-pools_8c.html -http://dhcpd-pools.sourceforge.net/doxygen/dhcpd-pools_8h.html -http://dhcpd-pools.sourceforge.net/doxygen/dhcpd-pools_8h_source.html -http://dhcpd-pools.sourceforge.net/doxygen/dir_000000_000001.html -http://dhcpd-pools.sourceforge.net/doxygen/dir_000001_000002.html -http://dhcpd-pools.sourceforge.net/doxygen/dir_1dacc5f4fcb865f1d9e042339dad3519.html -http://dhcpd-pools.sourceforge.net/doxygen/dir_97aefd0d527b934f1d99a682da8fe6a9.html -http://dhcpd-pools.sourceforge.net/doxygen/dir_fb441f6c77667ce4c9ebd4a5c47eafac.html -http://dhcpd-pools.sourceforge.net/doxygen/dirname_8h.html -http://dhcpd-pools.sourceforge.net/doxygen/dirname_8h_source.html -http://dhcpd-pools.sourceforge.net/doxygen/dirname-lgpl_8c.html -http://dhcpd-pools.sourceforge.net/doxygen/dosname_8h.html -http://dhcpd-pools.sourceforge.net/doxygen/dosname_8h_source.html -http://dhcpd-pools.sourceforge.net/doxygen/doxygen.css -http://dhcpd-pools.sourceforge.net/doxygen/errno_8in_8h.html -http://dhcpd-pools.sourceforge.net/doxygen/errno_8in_8h_source.html -http://dhcpd-pools.sourceforge.net/doxygen/error_8c.html -http://dhcpd-pools.sourceforge.net/doxygen/error_8h.html -http://dhcpd-pools.sourceforge.net/doxygen/error_8h_source.html -http://dhcpd-pools.sourceforge.net/doxygen/exitfail_8c.html -http://dhcpd-pools.sourceforge.net/doxygen/exitfail_8h.html -http://dhcpd-pools.sourceforge.net/doxygen/exitfail_8h_source.html -http://dhcpd-pools.sourceforge.net/doxygen/fclose_8c.html -http://dhcpd-pools.sourceforge.net/doxygen/fcntl_8h.html -http://dhcpd-pools.sourceforge.net/doxygen/fcntl_8h_source.html -http://dhcpd-pools.sourceforge.net/doxygen/fcntl_8in_8h.html -http://dhcpd-pools.sourceforge.net/doxygen/fcntl_8in_8h_source.html -http://dhcpd-pools.sourceforge.net/doxygen/fd-hook_8c.html -http://dhcpd-pools.sourceforge.net/doxygen/fd-hook_8h.html -http://dhcpd-pools.sourceforge.net/doxygen/fd-hook_8h_source.html -http://dhcpd-pools.sourceforge.net/doxygen/fdopen_8c.html -http://dhcpd-pools.sourceforge.net/doxygen/fflush_8c.html -http://dhcpd-pools.sourceforge.net/doxygen/filename_8h.html -http://dhcpd-pools.sourceforge.net/doxygen/filename_8h_source.html -http://dhcpd-pools.sourceforge.net/doxygen/files.html -http://dhcpd-pools.sourceforge.net/doxygen/flexmember_8h.html -http://dhcpd-pools.sourceforge.net/doxygen/flexmember_8h_source.html -http://dhcpd-pools.sourceforge.net/doxygen/float_09_8h.html -http://dhcpd-pools.sourceforge.net/doxygen/float_09_8h_source.html -http://dhcpd-pools.sourceforge.net/doxygen/float_8c.html -http://dhcpd-pools.sourceforge.net/doxygen/float_8in_8h.html -http://dhcpd-pools.sourceforge.net/doxygen/float_8in_8h_source.html -http://dhcpd-pools.sourceforge.net/doxygen/fopen_8c.html -http://dhcpd-pools.sourceforge.net/doxygen/fpending_8c.html -http://dhcpd-pools.sourceforge.net/doxygen/fpending_8h.html -http://dhcpd-pools.sourceforge.net/doxygen/fpending_8h_source.html -http://dhcpd-pools.sourceforge.net/doxygen/fpurge_8c.html -http://dhcpd-pools.sourceforge.net/doxygen/freading_8c.html -http://dhcpd-pools.sourceforge.net/doxygen/freading_8h.html -http://dhcpd-pools.sourceforge.net/doxygen/freading_8h_source.html -http://dhcpd-pools.sourceforge.net/doxygen/fseek_8c.html -http://dhcpd-pools.sourceforge.net/doxygen/fseeko_8c.html -http://dhcpd-pools.sourceforge.net/doxygen/fstat_8c.html -http://dhcpd-pools.sourceforge.net/doxygen/ftell_8c.html -http://dhcpd-pools.sourceforge.net/doxygen/ftello_8c.html -http://dhcpd-pools.sourceforge.net/doxygen/functions_func.html -http://dhcpd-pools.sourceforge.net/doxygen/functions.html -http://dhcpd-pools.sourceforge.net/doxygen/functions_vars.html -http://dhcpd-pools.sourceforge.net/doxygen/getdata_8c.html -http://dhcpd-pools.sourceforge.net/doxygen/getopt1_8c.html -http://dhcpd-pools.sourceforge.net/doxygen/getopt_8c.html -http://dhcpd-pools.sourceforge.net/doxygen/getopt_8in_8h.html -http://dhcpd-pools.sourceforge.net/doxygen/getopt_8in_8h_source.html -http://dhcpd-pools.sourceforge.net/doxygen/getopt-cdefs_8in_8h.html -http://dhcpd-pools.sourceforge.net/doxygen/getopt-cdefs_8in_8h_source.html -http://dhcpd-pools.sourceforge.net/doxygen/getopt-core_8h.html -http://dhcpd-pools.sourceforge.net/doxygen/getopt-core_8h_source.html -http://dhcpd-pools.sourceforge.net/doxygen/getopt-ext_8h.html -http://dhcpd-pools.sourceforge.net/doxygen/getopt-ext_8h_source.html -http://dhcpd-pools.sourceforge.net/doxygen/getopt__int_8h.html -http://dhcpd-pools.sourceforge.net/doxygen/getopt__int_8h_source.html -http://dhcpd-pools.sourceforge.net/doxygen/getopt-pfx-core_8h.html -http://dhcpd-pools.sourceforge.net/doxygen/getopt-pfx-core_8h_source.html -http://dhcpd-pools.sourceforge.net/doxygen/getopt-pfx-ext_8h.html -http://dhcpd-pools.sourceforge.net/doxygen/getopt-pfx-ext_8h_source.html -http://dhcpd-pools.sourceforge.net/doxygen/getprogname_8c.html -http://dhcpd-pools.sourceforge.net/doxygen/getprogname_8h.html -http://dhcpd-pools.sourceforge.net/doxygen/getprogname_8h_source.html -http://dhcpd-pools.sourceforge.net/doxygen/gettext_8h.html -http://dhcpd-pools.sourceforge.net/doxygen/gettext_8h_source.html -http://dhcpd-pools.sourceforge.net/doxygen/globals_a.html -http://dhcpd-pools.sourceforge.net/doxygen/globals_b.html -http://dhcpd-pools.sourceforge.net/doxygen/globals_c.html -http://dhcpd-pools.sourceforge.net/doxygen/globals_defs_a.html -http://dhcpd-pools.sourceforge.net/doxygen/globals_defs_b.html -http://dhcpd-pools.sourceforge.net/doxygen/globals_defs_c.html -http://dhcpd-pools.sourceforge.net/doxygen/globals_defs_d.html -http://dhcpd-pools.sourceforge.net/doxygen/globals_defs_e.html -http://dhcpd-pools.sourceforge.net/doxygen/globals_defs_f.html -http://dhcpd-pools.sourceforge.net/doxygen/globals_defs_g.html -http://dhcpd-pools.sourceforge.net/doxygen/globals_defs_h.html -http://dhcpd-pools.sourceforge.net/doxygen/globals_defs.html -http://dhcpd-pools.sourceforge.net/doxygen/globals_defs_i.html -http://dhcpd-pools.sourceforge.net/doxygen/globals_defs_k.html -http://dhcpd-pools.sourceforge.net/doxygen/globals_defs_l.html -http://dhcpd-pools.sourceforge.net/doxygen/globals_defs_m.html -http://dhcpd-pools.sourceforge.net/doxygen/globals_defs_n.html -http://dhcpd-pools.sourceforge.net/doxygen/globals_defs_o.html -http://dhcpd-pools.sourceforge.net/doxygen/globals_defs_p.html -http://dhcpd-pools.sourceforge.net/doxygen/globals_defs_r.html -http://dhcpd-pools.sourceforge.net/doxygen/globals_defs_s.html -http://dhcpd-pools.sourceforge.net/doxygen/globals_defs_t.html -http://dhcpd-pools.sourceforge.net/doxygen/globals_defs_u.html -http://dhcpd-pools.sourceforge.net/doxygen/globals_defs_v.html -http://dhcpd-pools.sourceforge.net/doxygen/globals_defs_w.html -http://dhcpd-pools.sourceforge.net/doxygen/globals_defs_x.html -http://dhcpd-pools.sourceforge.net/doxygen/globals_defs_y.html -http://dhcpd-pools.sourceforge.net/doxygen/globals_d.html -http://dhcpd-pools.sourceforge.net/doxygen/globals_e.html -http://dhcpd-pools.sourceforge.net/doxygen/globals_enum.html -http://dhcpd-pools.sourceforge.net/doxygen/globals_eval.html -http://dhcpd-pools.sourceforge.net/doxygen/globals_f.html -http://dhcpd-pools.sourceforge.net/doxygen/globals_func_a.html -http://dhcpd-pools.sourceforge.net/doxygen/globals_func_b.html -http://dhcpd-pools.sourceforge.net/doxygen/globals_func_c.html -http://dhcpd-pools.sourceforge.net/doxygen/globals_func_d.html -http://dhcpd-pools.sourceforge.net/doxygen/globals_func_e.html -http://dhcpd-pools.sourceforge.net/doxygen/globals_func_f.html -http://dhcpd-pools.sourceforge.net/doxygen/globals_func_g.html -http://dhcpd-pools.sourceforge.net/doxygen/globals_func_h.html -http://dhcpd-pools.sourceforge.net/doxygen/globals_func.html -http://dhcpd-pools.sourceforge.net/doxygen/globals_func_i.html -http://dhcpd-pools.sourceforge.net/doxygen/globals_func_l.html -http://dhcpd-pools.sourceforge.net/doxygen/globals_func_m.html -http://dhcpd-pools.sourceforge.net/doxygen/globals_func_n.html -http://dhcpd-pools.sourceforge.net/doxygen/globals_func_o.html -http://dhcpd-pools.sourceforge.net/doxygen/globals_func_p.html -http://dhcpd-pools.sourceforge.net/doxygen/globals_func_q.html -http://dhcpd-pools.sourceforge.net/doxygen/globals_func_r.html -http://dhcpd-pools.sourceforge.net/doxygen/globals_func_s.html -http://dhcpd-pools.sourceforge.net/doxygen/globals_func_t.html -http://dhcpd-pools.sourceforge.net/doxygen/globals_func_u.html -http://dhcpd-pools.sourceforge.net/doxygen/globals_func_x.html -http://dhcpd-pools.sourceforge.net/doxygen/globals_g.html -http://dhcpd-pools.sourceforge.net/doxygen/globals_h.html -http://dhcpd-pools.sourceforge.net/doxygen/globals.html -http://dhcpd-pools.sourceforge.net/doxygen/globals_i.html -http://dhcpd-pools.sourceforge.net/doxygen/globals_k.html -http://dhcpd-pools.sourceforge.net/doxygen/globals_l.html -http://dhcpd-pools.sourceforge.net/doxygen/globals_m.html -http://dhcpd-pools.sourceforge.net/doxygen/globals_n.html -http://dhcpd-pools.sourceforge.net/doxygen/globals_o.html -http://dhcpd-pools.sourceforge.net/doxygen/globals_p.html -http://dhcpd-pools.sourceforge.net/doxygen/globals_q.html -http://dhcpd-pools.sourceforge.net/doxygen/globals_r.html -http://dhcpd-pools.sourceforge.net/doxygen/globals_s.html -http://dhcpd-pools.sourceforge.net/doxygen/globals_t.html -http://dhcpd-pools.sourceforge.net/doxygen/globals_type.html -http://dhcpd-pools.sourceforge.net/doxygen/globals_u.html -http://dhcpd-pools.sourceforge.net/doxygen/globals_vars.html -http://dhcpd-pools.sourceforge.net/doxygen/globals_v.html -http://dhcpd-pools.sourceforge.net/doxygen/globals_w.html -http://dhcpd-pools.sourceforge.net/doxygen/globals_x.html -http://dhcpd-pools.sourceforge.net/doxygen/globals_y.html -http://dhcpd-pools.sourceforge.net/doxygen/graph_legend.html -http://dhcpd-pools.sourceforge.net/doxygen/hard-locale_8c.html -http://dhcpd-pools.sourceforge.net/doxygen/hard-locale_8h.html -http://dhcpd-pools.sourceforge.net/doxygen/hard-locale_8h_source.html -http://dhcpd-pools.sourceforge.net/doxygen/hash_8c.html -http://dhcpd-pools.sourceforge.net/doxygen/index.html -http://dhcpd-pools.sourceforge.net/doxygen/inet_8h.html -http://dhcpd-pools.sourceforge.net/doxygen/inet_8h_source.html -http://dhcpd-pools.sourceforge.net/doxygen/inet__pton_8c.html -http://dhcpd-pools.sourceforge.net/doxygen/intprops_8h.html -http://dhcpd-pools.sourceforge.net/doxygen/intprops_8h_source.html -http://dhcpd-pools.sourceforge.net/doxygen/introduction_8dox.html -http://dhcpd-pools.sourceforge.net/doxygen/isnan_8c.html -http://dhcpd-pools.sourceforge.net/doxygen/isnand_8c.html -http://dhcpd-pools.sourceforge.net/doxygen/isnanf_8c.html -http://dhcpd-pools.sourceforge.net/doxygen/isnanl_8c.html -http://dhcpd-pools.sourceforge.net/doxygen/itold_8c.html -http://dhcpd-pools.sourceforge.net/doxygen/limits_8h.html -http://dhcpd-pools.sourceforge.net/doxygen/limits_8h_source.html -http://dhcpd-pools.sourceforge.net/doxygen/limits_8in_8h.html -http://dhcpd-pools.sourceforge.net/doxygen/limits_8in_8h_source.html -http://dhcpd-pools.sourceforge.net/doxygen/localcharset_8c.html -http://dhcpd-pools.sourceforge.net/doxygen/localcharset_8h.html -http://dhcpd-pools.sourceforge.net/doxygen/localcharset_8h_source.html -http://dhcpd-pools.sourceforge.net/doxygen/localtime-buffer_8c.html -http://dhcpd-pools.sourceforge.net/doxygen/localtime-buffer_8h.html -http://dhcpd-pools.sourceforge.net/doxygen/localtime-buffer_8h_source.html -http://dhcpd-pools.sourceforge.net/doxygen/lseek_8c.html -http://dhcpd-pools.sourceforge.net/doxygen/malloc_8c.html -http://dhcpd-pools.sourceforge.net/doxygen/malloca_8c.html -http://dhcpd-pools.sourceforge.net/doxygen/malloca_8h.html -http://dhcpd-pools.sourceforge.net/doxygen/malloca_8h_source.html -http://dhcpd-pools.sourceforge.net/doxygen/math_8c.html -http://dhcpd-pools.sourceforge.net/doxygen/math_8h.html -http://dhcpd-pools.sourceforge.net/doxygen/math_8h_source.html -http://dhcpd-pools.sourceforge.net/doxygen/math_8in_8h.html -http://dhcpd-pools.sourceforge.net/doxygen/math_8in_8h_source.html -http://dhcpd-pools.sourceforge.net/doxygen/mbrtowc_8c.html -http://dhcpd-pools.sourceforge.net/doxygen/mbsinit_8c.html -http://dhcpd-pools.sourceforge.net/doxygen/memchr_8c.html -http://dhcpd-pools.sourceforge.net/doxygen/minmax_8h.html -http://dhcpd-pools.sourceforge.net/doxygen/minmax_8h_source.html -http://dhcpd-pools.sourceforge.net/doxygen/mktime_8c.html -http://dhcpd-pools.sourceforge.net/doxygen/mktime-internal_8h.html -http://dhcpd-pools.sourceforge.net/doxygen/mktime-internal_8h_source.html -http://dhcpd-pools.sourceforge.net/doxygen/msvc-inval_8c.html -http://dhcpd-pools.sourceforge.net/doxygen/msvc-inval_8h.html -http://dhcpd-pools.sourceforge.net/doxygen/msvc-inval_8h_source.html -http://dhcpd-pools.sourceforge.net/doxygen/msvc-nothrow_8c.html -http://dhcpd-pools.sourceforge.net/doxygen/msvc-nothrow_8h.html -http://dhcpd-pools.sourceforge.net/doxygen/msvc-nothrow_8h_source.html -http://dhcpd-pools.sourceforge.net/doxygen/mustach_8c.html -http://dhcpd-pools.sourceforge.net/doxygen/mustach_8h.html -http://dhcpd-pools.sourceforge.net/doxygen/mustach_8h_source.html -http://dhcpd-pools.sourceforge.net/doxygen/mustach-dhcpd-pools_8c.html -http://dhcpd-pools.sourceforge.net/doxygen/netinet__in_8in_8h.html -http://dhcpd-pools.sourceforge.net/doxygen/netinet__in_8in_8h_source.html -http://dhcpd-pools.sourceforge.net/doxygen/__Noreturn_8h.html -http://dhcpd-pools.sourceforge.net/doxygen/__Noreturn_8h_source.html -http://dhcpd-pools.sourceforge.net/doxygen/nstrftime_8c.html -http://dhcpd-pools.sourceforge.net/doxygen/other_8c.html -http://dhcpd-pools.sourceforge.net/doxygen/output_8c.html -http://dhcpd-pools.sourceforge.net/doxygen/pathmax_8h.html -http://dhcpd-pools.sourceforge.net/doxygen/pathmax_8h_source.html -http://dhcpd-pools.sourceforge.net/doxygen/progname_8c.html -http://dhcpd-pools.sourceforge.net/doxygen/progname_8h.html -http://dhcpd-pools.sourceforge.net/doxygen/progname_8h_source.html -http://dhcpd-pools.sourceforge.net/doxygen/quote_8h.html -http://dhcpd-pools.sourceforge.net/doxygen/quote_8h_source.html -http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8c.html -http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8h.html -http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8h_source.html -http://dhcpd-pools.sourceforge.net/doxygen/realloc_8c.html -http://dhcpd-pools.sourceforge.net/doxygen/sampleoutput.html -http://dhcpd-pools.sourceforge.net/doxygen/search -http://dhcpd-pools.sourceforge.net/doxygen/search/all_0.html -http://dhcpd-pools.sourceforge.net/doxygen/search/all_10.html -http://dhcpd-pools.sourceforge.net/doxygen/search/all_11.html -http://dhcpd-pools.sourceforge.net/doxygen/search/all_12.html -http://dhcpd-pools.sourceforge.net/doxygen/search/all_13.html -http://dhcpd-pools.sourceforge.net/doxygen/search/all_14.html -http://dhcpd-pools.sourceforge.net/doxygen/search/all_15.html -http://dhcpd-pools.sourceforge.net/doxygen/search/all_16.html -http://dhcpd-pools.sourceforge.net/doxygen/search/all_17.html -http://dhcpd-pools.sourceforge.net/doxygen/search/all_18.html -http://dhcpd-pools.sourceforge.net/doxygen/search/all_1.html -http://dhcpd-pools.sourceforge.net/doxygen/search/all_2.html -http://dhcpd-pools.sourceforge.net/doxygen/search/all_3.html -http://dhcpd-pools.sourceforge.net/doxygen/search/all_4.html -http://dhcpd-pools.sourceforge.net/doxygen/search/all_5.html -http://dhcpd-pools.sourceforge.net/doxygen/search/all_6.html -http://dhcpd-pools.sourceforge.net/doxygen/search/all_7.html -http://dhcpd-pools.sourceforge.net/doxygen/search/all_8.html -http://dhcpd-pools.sourceforge.net/doxygen/search/all_9.html -http://dhcpd-pools.sourceforge.net/doxygen/search/all_a.html -http://dhcpd-pools.sourceforge.net/doxygen/search/all_b.html -http://dhcpd-pools.sourceforge.net/doxygen/search/all_c.html -http://dhcpd-pools.sourceforge.net/doxygen/search/all_d.html -http://dhcpd-pools.sourceforge.net/doxygen/search/all_e.html -http://dhcpd-pools.sourceforge.net/doxygen/search/all_f.html -http://dhcpd-pools.sourceforge.net/doxygen/search/classes_0.html -http://dhcpd-pools.sourceforge.net/doxygen/search/classes_1.html -http://dhcpd-pools.sourceforge.net/doxygen/search/classes_2.html -http://dhcpd-pools.sourceforge.net/doxygen/search/classes_3.html -http://dhcpd-pools.sourceforge.net/doxygen/search/classes_4.html -http://dhcpd-pools.sourceforge.net/doxygen/search/classes_5.html -http://dhcpd-pools.sourceforge.net/doxygen/search/classes_6.html -http://dhcpd-pools.sourceforge.net/doxygen/search/classes_7.html -http://dhcpd-pools.sourceforge.net/doxygen/search/classes_8.html -http://dhcpd-pools.sourceforge.net/doxygen/search/classes_9.html -http://dhcpd-pools.sourceforge.net/doxygen/search/classes_a.html -http://dhcpd-pools.sourceforge.net/doxygen/search/defines_0.html -http://dhcpd-pools.sourceforge.net/doxygen/search/defines_10.html -http://dhcpd-pools.sourceforge.net/doxygen/search/defines_11.html -http://dhcpd-pools.sourceforge.net/doxygen/search/defines_12.html -http://dhcpd-pools.sourceforge.net/doxygen/search/defines_13.html -http://dhcpd-pools.sourceforge.net/doxygen/search/defines_14.html -http://dhcpd-pools.sourceforge.net/doxygen/search/defines_15.html -http://dhcpd-pools.sourceforge.net/doxygen/search/defines_16.html -http://dhcpd-pools.sourceforge.net/doxygen/search/defines_17.html -http://dhcpd-pools.sourceforge.net/doxygen/search/defines_1.html -http://dhcpd-pools.sourceforge.net/doxygen/search/defines_2.html -http://dhcpd-pools.sourceforge.net/doxygen/search/defines_3.html -http://dhcpd-pools.sourceforge.net/doxygen/search/defines_4.html -http://dhcpd-pools.sourceforge.net/doxygen/search/defines_5.html -http://dhcpd-pools.sourceforge.net/doxygen/search/defines_6.html -http://dhcpd-pools.sourceforge.net/doxygen/search/defines_7.html -http://dhcpd-pools.sourceforge.net/doxygen/search/defines_8.html -http://dhcpd-pools.sourceforge.net/doxygen/search/defines_9.html -http://dhcpd-pools.sourceforge.net/doxygen/search/defines_a.html -http://dhcpd-pools.sourceforge.net/doxygen/search/defines_b.html -http://dhcpd-pools.sourceforge.net/doxygen/search/defines_c.html -http://dhcpd-pools.sourceforge.net/doxygen/search/defines_d.html -http://dhcpd-pools.sourceforge.net/doxygen/search/defines_e.html -http://dhcpd-pools.sourceforge.net/doxygen/search/defines_f.html -http://dhcpd-pools.sourceforge.net/doxygen/search/enums_0.html -http://dhcpd-pools.sourceforge.net/doxygen/search/enums_1.html -http://dhcpd-pools.sourceforge.net/doxygen/search/enums_2.html -http://dhcpd-pools.sourceforge.net/doxygen/search/enums_3.html -http://dhcpd-pools.sourceforge.net/doxygen/search/enums_4.html -http://dhcpd-pools.sourceforge.net/doxygen/search/enums_5.html -http://dhcpd-pools.sourceforge.net/doxygen/search/enums_6.html -http://dhcpd-pools.sourceforge.net/doxygen/search/enumvalues_0.html -http://dhcpd-pools.sourceforge.net/doxygen/search/enumvalues_1.html -http://dhcpd-pools.sourceforge.net/doxygen/search/enumvalues_2.html -http://dhcpd-pools.sourceforge.net/doxygen/search/enumvalues_3.html -http://dhcpd-pools.sourceforge.net/doxygen/search/enumvalues_4.html -http://dhcpd-pools.sourceforge.net/doxygen/search/enumvalues_5.html -http://dhcpd-pools.sourceforge.net/doxygen/search/enumvalues_6.html -http://dhcpd-pools.sourceforge.net/doxygen/search/enumvalues_7.html -http://dhcpd-pools.sourceforge.net/doxygen/search/enumvalues_8.html -http://dhcpd-pools.sourceforge.net/doxygen/search/enumvalues_9.html -http://dhcpd-pools.sourceforge.net/doxygen/search/enumvalues_a.html -http://dhcpd-pools.sourceforge.net/doxygen/search/enumvalues_b.html -http://dhcpd-pools.sourceforge.net/doxygen/search/enumvalues_c.html -http://dhcpd-pools.sourceforge.net/doxygen/search/enumvalues_d.html -http://dhcpd-pools.sourceforge.net/doxygen/search/enumvalues_e.html -http://dhcpd-pools.sourceforge.net/doxygen/search/enumvalues_f.html -http://dhcpd-pools.sourceforge.net/doxygen/search/files_0.html -http://dhcpd-pools.sourceforge.net/doxygen/search/files_10.html -http://dhcpd-pools.sourceforge.net/doxygen/search/files_11.html -http://dhcpd-pools.sourceforge.net/doxygen/search/files_12.html -http://dhcpd-pools.sourceforge.net/doxygen/search/files_13.html -http://dhcpd-pools.sourceforge.net/doxygen/search/files_14.html -http://dhcpd-pools.sourceforge.net/doxygen/search/files_15.html -http://dhcpd-pools.sourceforge.net/doxygen/search/files_16.html -http://dhcpd-pools.sourceforge.net/doxygen/search/files_1.html -http://dhcpd-pools.sourceforge.net/doxygen/search/files_2.html -http://dhcpd-pools.sourceforge.net/doxygen/search/files_3.html -http://dhcpd-pools.sourceforge.net/doxygen/search/files_4.html -http://dhcpd-pools.sourceforge.net/doxygen/search/files_5.html -http://dhcpd-pools.sourceforge.net/doxygen/search/files_6.html -http://dhcpd-pools.sourceforge.net/doxygen/search/files_7.html -http://dhcpd-pools.sourceforge.net/doxygen/search/files_8.html -http://dhcpd-pools.sourceforge.net/doxygen/search/files_9.html -http://dhcpd-pools.sourceforge.net/doxygen/search/files_a.html -http://dhcpd-pools.sourceforge.net/doxygen/search/files_b.html -http://dhcpd-pools.sourceforge.net/doxygen/search/files_c.html -http://dhcpd-pools.sourceforge.net/doxygen/search/files_d.html -http://dhcpd-pools.sourceforge.net/doxygen/search/files_e.html -http://dhcpd-pools.sourceforge.net/doxygen/search/files_f.html -http://dhcpd-pools.sourceforge.net/doxygen/search/functions_0.html -http://dhcpd-pools.sourceforge.net/doxygen/search/functions_10.html -http://dhcpd-pools.sourceforge.net/doxygen/search/functions_11.html -http://dhcpd-pools.sourceforge.net/doxygen/search/functions_12.html -http://dhcpd-pools.sourceforge.net/doxygen/search/functions_13.html -http://dhcpd-pools.sourceforge.net/doxygen/search/functions_14.html -http://dhcpd-pools.sourceforge.net/doxygen/search/functions_1.html -http://dhcpd-pools.sourceforge.net/doxygen/search/functions_2.html -http://dhcpd-pools.sourceforge.net/doxygen/search/functions_3.html -http://dhcpd-pools.sourceforge.net/doxygen/search/functions_4.html -http://dhcpd-pools.sourceforge.net/doxygen/search/functions_5.html -http://dhcpd-pools.sourceforge.net/doxygen/search/functions_6.html -http://dhcpd-pools.sourceforge.net/doxygen/search/functions_7.html -http://dhcpd-pools.sourceforge.net/doxygen/search/functions_8.html -http://dhcpd-pools.sourceforge.net/doxygen/search/functions_9.html -http://dhcpd-pools.sourceforge.net/doxygen/search/functions_a.html -http://dhcpd-pools.sourceforge.net/doxygen/search/functions_b.html -http://dhcpd-pools.sourceforge.net/doxygen/search/functions_c.html -http://dhcpd-pools.sourceforge.net/doxygen/search/functions_d.html -http://dhcpd-pools.sourceforge.net/doxygen/search/functions_e.html -http://dhcpd-pools.sourceforge.net/doxygen/search/functions_f.html -http://dhcpd-pools.sourceforge.net/doxygen/search/nomatches.html -http://dhcpd-pools.sourceforge.net/doxygen/search/search.css -http://dhcpd-pools.sourceforge.net/doxygen/search/typedefs_0.html -http://dhcpd-pools.sourceforge.net/doxygen/search/typedefs_1.html -http://dhcpd-pools.sourceforge.net/doxygen/search/typedefs_2.html -http://dhcpd-pools.sourceforge.net/doxygen/search/typedefs_3.html -http://dhcpd-pools.sourceforge.net/doxygen/search/typedefs_4.html -http://dhcpd-pools.sourceforge.net/doxygen/search/typedefs_5.html -http://dhcpd-pools.sourceforge.net/doxygen/search/typedefs_6.html -http://dhcpd-pools.sourceforge.net/doxygen/search/typedefs_7.html -http://dhcpd-pools.sourceforge.net/doxygen/search/typedefs_8.html -http://dhcpd-pools.sourceforge.net/doxygen/search/variables_0.html -http://dhcpd-pools.sourceforge.net/doxygen/search/variables_10.html -http://dhcpd-pools.sourceforge.net/doxygen/search/variables_11.html -http://dhcpd-pools.sourceforge.net/doxygen/search/variables_12.html -http://dhcpd-pools.sourceforge.net/doxygen/search/variables_13.html -http://dhcpd-pools.sourceforge.net/doxygen/search/variables_14.html -http://dhcpd-pools.sourceforge.net/doxygen/search/variables_15.html -http://dhcpd-pools.sourceforge.net/doxygen/search/variables_16.html -http://dhcpd-pools.sourceforge.net/doxygen/search/variables_1.html -http://dhcpd-pools.sourceforge.net/doxygen/search/variables_2.html -http://dhcpd-pools.sourceforge.net/doxygen/search/variables_3.html -http://dhcpd-pools.sourceforge.net/doxygen/search/variables_4.html -http://dhcpd-pools.sourceforge.net/doxygen/search/variables_5.html -http://dhcpd-pools.sourceforge.net/doxygen/search/variables_6.html -http://dhcpd-pools.sourceforge.net/doxygen/search/variables_7.html -http://dhcpd-pools.sourceforge.net/doxygen/search/variables_8.html -http://dhcpd-pools.sourceforge.net/doxygen/search/variables_9.html -http://dhcpd-pools.sourceforge.net/doxygen/search/variables_a.html -http://dhcpd-pools.sourceforge.net/doxygen/search/variables_b.html -http://dhcpd-pools.sourceforge.net/doxygen/search/variables_c.html -http://dhcpd-pools.sourceforge.net/doxygen/search/variables_d.html -http://dhcpd-pools.sourceforge.net/doxygen/search/variables_e.html -http://dhcpd-pools.sourceforge.net/doxygen/search/variables_f.html -http://dhcpd-pools.sourceforge.net/doxygen/setenv_8c.html -http://dhcpd-pools.sourceforge.net/doxygen/socket_8h.html -http://dhcpd-pools.sourceforge.net/doxygen/socket_8h_source.html -http://dhcpd-pools.sourceforge.net/doxygen/sort_8c.html -http://dhcpd-pools.sourceforge.net/doxygen/stat_8c.html -http://dhcpd-pools.sourceforge.net/doxygen/stat_8h.html -http://dhcpd-pools.sourceforge.net/doxygen/stat_8h_source.html -http://dhcpd-pools.sourceforge.net/doxygen/stat-w32_8c.html -http://dhcpd-pools.sourceforge.net/doxygen/stat-w32_8h.html -http://dhcpd-pools.sourceforge.net/doxygen/stat-w32_8h_source.html -http://dhcpd-pools.sourceforge.net/doxygen/stdalign_8in_8h.html -http://dhcpd-pools.sourceforge.net/doxygen/stdalign_8in_8h_source.html -http://dhcpd-pools.sourceforge.net/doxygen/stdbool_8in_8h.html -http://dhcpd-pools.sourceforge.net/doxygen/stdbool_8in_8h_source.html -http://dhcpd-pools.sourceforge.net/doxygen/stddef_8in_8h.html -http://dhcpd-pools.sourceforge.net/doxygen/stddef_8in_8h_source.html -http://dhcpd-pools.sourceforge.net/doxygen/stdint_8in_8h.html -http://dhcpd-pools.sourceforge.net/doxygen/stdint_8in_8h_source.html -http://dhcpd-pools.sourceforge.net/doxygen/stdio_8h.html -http://dhcpd-pools.sourceforge.net/doxygen/stdio_8h_source.html -http://dhcpd-pools.sourceforge.net/doxygen/stdio_8in_8h.html -http://dhcpd-pools.sourceforge.net/doxygen/stdio_8in_8h_source.html -http://dhcpd-pools.sourceforge.net/doxygen/stdio-impl_8h.html -http://dhcpd-pools.sourceforge.net/doxygen/stdio-impl_8h_source.html -http://dhcpd-pools.sourceforge.net/doxygen/stdlib_8h.html -http://dhcpd-pools.sourceforge.net/doxygen/stdlib_8h_source.html -http://dhcpd-pools.sourceforge.net/doxygen/stdlib_8in_8h.html -http://dhcpd-pools.sourceforge.net/doxygen/stdlib_8in_8h_source.html -http://dhcpd-pools.sourceforge.net/doxygen/stpncpy_8c.html -http://dhcpd-pools.sourceforge.net/doxygen/strdup_8c.html -http://dhcpd-pools.sourceforge.net/doxygen/streq_8h.html -http://dhcpd-pools.sourceforge.net/doxygen/streq_8h_source.html -http://dhcpd-pools.sourceforge.net/doxygen/strerror_8c.html -http://dhcpd-pools.sourceforge.net/doxygen/strerror-override_8c.html -http://dhcpd-pools.sourceforge.net/doxygen/strerror-override_8h.html -http://dhcpd-pools.sourceforge.net/doxygen/strerror-override_8h_source.html -http://dhcpd-pools.sourceforge.net/doxygen/strftime_8h.html -http://dhcpd-pools.sourceforge.net/doxygen/strftime_8h_source.html -http://dhcpd-pools.sourceforge.net/doxygen/string_8h.html -http://dhcpd-pools.sourceforge.net/doxygen/string_8h_source.html -http://dhcpd-pools.sourceforge.net/doxygen/string_8in_8h.html -http://dhcpd-pools.sourceforge.net/doxygen/string_8in_8h_source.html -http://dhcpd-pools.sourceforge.net/doxygen/stripslash_8c.html -http://dhcpd-pools.sourceforge.net/doxygen/strstr_8c.html -http://dhcpd-pools.sourceforge.net/doxygen/strtod_8c.html -http://dhcpd-pools.sourceforge.net/doxygen/str-two-way_8h.html -http://dhcpd-pools.sourceforge.net/doxygen/str-two-way_8h_source.html -http://dhcpd-pools.sourceforge.net/doxygen/structconf__t.html -http://dhcpd-pools.sourceforge.net/doxygen/structexpl.html -http://dhcpd-pools.sourceforge.net/doxygen/struct__getopt__data.html -http://dhcpd-pools.sourceforge.net/doxygen/structiovec.html -http://dhcpd-pools.sourceforge.net/doxygen/structleases__t.html -http://dhcpd-pools.sourceforge.net/doxygen/structmsghdr.html -http://dhcpd-pools.sourceforge.net/doxygen/structmustach__itf.html -http://dhcpd-pools.sourceforge.net/doxygen/structoption.html -http://dhcpd-pools.sourceforge.net/doxygen/structoutput__helper__t.html -http://dhcpd-pools.sourceforge.net/doxygen/structoutput__sort.html -http://dhcpd-pools.sourceforge.net/doxygen/structquoting__options.html -http://dhcpd-pools.sourceforge.net/doxygen/structrange__t.html -http://dhcpd-pools.sourceforge.net/doxygen/structshared__network__t.html -http://dhcpd-pools.sourceforge.net/doxygen/structslotvec.html -http://dhcpd-pools.sourceforge.net/doxygen/structsockaddr__storage.html -http://dhcpd-pools.sourceforge.net/doxygen/structtimespec.html -http://dhcpd-pools.sourceforge.net/doxygen/struct____time__t__must__be__integral.html -http://dhcpd-pools.sourceforge.net/doxygen/structtm__zone.html -http://dhcpd-pools.sourceforge.net/doxygen/sys__socket_8c.html -http://dhcpd-pools.sourceforge.net/doxygen/sys__socket_8in_8h.html -http://dhcpd-pools.sourceforge.net/doxygen/sys__socket_8in_8h_source.html -http://dhcpd-pools.sourceforge.net/doxygen/sys__stat_8in_8h.html -http://dhcpd-pools.sourceforge.net/doxygen/sys__stat_8in_8h_source.html -http://dhcpd-pools.sourceforge.net/doxygen/sys__types_8in_8h.html -http://dhcpd-pools.sourceforge.net/doxygen/sys__types_8in_8h_source.html -http://dhcpd-pools.sourceforge.net/doxygen/sys__uio_8in_8h.html -http://dhcpd-pools.sourceforge.net/doxygen/sys__uio_8in_8h_source.html -http://dhcpd-pools.sourceforge.net/doxygen/tabs.css -http://dhcpd-pools.sourceforge.net/doxygen/time_8h.html -http://dhcpd-pools.sourceforge.net/doxygen/time_8h_source.html -http://dhcpd-pools.sourceforge.net/doxygen/time_8in_8h.html -http://dhcpd-pools.sourceforge.net/doxygen/time_8in_8h_source.html -http://dhcpd-pools.sourceforge.net/doxygen/timegm_8c.html -http://dhcpd-pools.sourceforge.net/doxygen/time-internal_8h.html -http://dhcpd-pools.sourceforge.net/doxygen/time-internal_8h_source.html -http://dhcpd-pools.sourceforge.net/doxygen/time__r_8c.html -http://dhcpd-pools.sourceforge.net/doxygen/time__rz_8c.html -http://dhcpd-pools.sourceforge.net/doxygen/types_8h.html -http://dhcpd-pools.sourceforge.net/doxygen/types_8h_source.html -http://dhcpd-pools.sourceforge.net/doxygen/tzset_8c.html -http://dhcpd-pools.sourceforge.net/doxygen/uio_8h.html -http://dhcpd-pools.sourceforge.net/doxygen/uio_8h_source.html -http://dhcpd-pools.sourceforge.net/doxygen/unionipaddr__t.html -http://dhcpd-pools.sourceforge.net/doxygen/unionmemory__double.html -http://dhcpd-pools.sourceforge.net/doxygen/unionrpl__max__align__t.html -http://dhcpd-pools.sourceforge.net/doxygen/unistd_8c.html -http://dhcpd-pools.sourceforge.net/doxygen/unistd_8h.html -http://dhcpd-pools.sourceforge.net/doxygen/unistd_8h_source.html -http://dhcpd-pools.sourceforge.net/doxygen/unistd_8in_8h.html -http://dhcpd-pools.sourceforge.net/doxygen/unistd_8in_8h_source.html -http://dhcpd-pools.sourceforge.net/doxygen/unsetenv_8c.html -http://dhcpd-pools.sourceforge.net/doxygen/unused-parameter_8h.html -http://dhcpd-pools.sourceforge.net/doxygen/unused-parameter_8h_source.html -http://dhcpd-pools.sourceforge.net/doxygen/verify_8h.html -http://dhcpd-pools.sourceforge.net/doxygen/verify_8h_source.html -http://dhcpd-pools.sourceforge.net/doxygen/warn-on-use_8h.html -http://dhcpd-pools.sourceforge.net/doxygen/warn-on-use_8h_source.html -http://dhcpd-pools.sourceforge.net/doxygen/wchar_8h.html -http://dhcpd-pools.sourceforge.net/doxygen/wchar_8h_source.html -http://dhcpd-pools.sourceforge.net/doxygen/wchar_8in_8h.html -http://dhcpd-pools.sourceforge.net/doxygen/wchar_8in_8h_source.html -http://dhcpd-pools.sourceforge.net/doxygen/wctype_8h.html -http://dhcpd-pools.sourceforge.net/doxygen/wctype_8h_source.html -http://dhcpd-pools.sourceforge.net/doxygen/wctype_8in_8h.html -http://dhcpd-pools.sourceforge.net/doxygen/wctype_8in_8h_source.html -http://dhcpd-pools.sourceforge.net/doxygen/wctype-h_8c.html -http://dhcpd-pools.sourceforge.net/doxygen/xalloc_8h.html -http://dhcpd-pools.sourceforge.net/doxygen/xalloc_8h_source.html -http://dhcpd-pools.sourceforge.net/doxygen/xalloc-die_8c.html -http://dhcpd-pools.sourceforge.net/doxygen/xalloc-oversized_8h.html -http://dhcpd-pools.sourceforge.net/doxygen/xalloc-oversized_8h_source.html -http://dhcpd-pools.sourceforge.net/doxygen/xmalloc_8c.html +https://dhcpd-pools.sourceforge.net/ +https://dhcpd-pools.sourceforge.net/dhcpd-pools.awk +https://dhcpd-pools.sourceforge.net/man.html +https://dhcpd-pools.sourceforge.net/doxygen/alloca_8h.html +https://dhcpd-pools.sourceforge.net/doxygen/alloca_8h_source.html +https://dhcpd-pools.sourceforge.net/doxygen/alloca_8in_8h.html +https://dhcpd-pools.sourceforge.net/doxygen/alloca_8in_8h_source.html +https://dhcpd-pools.sourceforge.net/doxygen/analyze_8c.html +https://dhcpd-pools.sourceforge.net/doxygen/annotated.html +https://dhcpd-pools.sourceforge.net/doxygen/arg-nonnull_8h.html +https://dhcpd-pools.sourceforge.net/doxygen/arg-nonnull_8h_source.html +https://dhcpd-pools.sourceforge.net/doxygen/arpa__inet_8in_8h.html +https://dhcpd-pools.sourceforge.net/doxygen/arpa__inet_8in_8h_source.html +https://dhcpd-pools.sourceforge.net/doxygen/basename-lgpl_8c.html +https://dhcpd-pools.sourceforge.net/doxygen/c_09_09defs_8h.html +https://dhcpd-pools.sourceforge.net/doxygen/c_09_09defs_8h_source.html +https://dhcpd-pools.sourceforge.net/doxygen/c-ctype_8c.html +https://dhcpd-pools.sourceforge.net/doxygen/c-ctype_8h.html +https://dhcpd-pools.sourceforge.net/doxygen/c-ctype_8h_source.html +https://dhcpd-pools.sourceforge.net/doxygen/classes.html +https://dhcpd-pools.sourceforge.net/doxygen/close_8c.html +https://dhcpd-pools.sourceforge.net/doxygen/closeout_8c.html +https://dhcpd-pools.sourceforge.net/doxygen/closeout_8h.html +https://dhcpd-pools.sourceforge.net/doxygen/closeout_8h_source.html +https://dhcpd-pools.sourceforge.net/doxygen/close-stream_8c.html +https://dhcpd-pools.sourceforge.net/doxygen/close-stream_8h.html +https://dhcpd-pools.sourceforge.net/doxygen/close-stream_8h_source.html +https://dhcpd-pools.sourceforge.net/doxygen/config_8h.html +https://dhcpd-pools.sourceforge.net/doxygen/config_8h_source.html +https://dhcpd-pools.sourceforge.net/doxygen/configmake_8h.html +https://dhcpd-pools.sourceforge.net/doxygen/configmake_8h_source.html +https://dhcpd-pools.sourceforge.net/doxygen/c-strcase_8h.html +https://dhcpd-pools.sourceforge.net/doxygen/c-strcase_8h_source.html +https://dhcpd-pools.sourceforge.net/doxygen/c-strcasecmp_8c.html +https://dhcpd-pools.sourceforge.net/doxygen/c-strcaseeq_8h.html +https://dhcpd-pools.sourceforge.net/doxygen/c-strcaseeq_8h_source.html +https://dhcpd-pools.sourceforge.net/doxygen/c-strncasecmp_8c.html +https://dhcpd-pools.sourceforge.net/doxygen/dhcpd-pools_8c.html +https://dhcpd-pools.sourceforge.net/doxygen/dhcpd-pools_8h.html +https://dhcpd-pools.sourceforge.net/doxygen/dhcpd-pools_8h_source.html +https://dhcpd-pools.sourceforge.net/doxygen/dir_000000_000001.html +https://dhcpd-pools.sourceforge.net/doxygen/dir_000001_000002.html +https://dhcpd-pools.sourceforge.net/doxygen/dir_1dacc5f4fcb865f1d9e042339dad3519.html +https://dhcpd-pools.sourceforge.net/doxygen/dir_97aefd0d527b934f1d99a682da8fe6a9.html +https://dhcpd-pools.sourceforge.net/doxygen/dir_fb441f6c77667ce4c9ebd4a5c47eafac.html +https://dhcpd-pools.sourceforge.net/doxygen/dirname_8h.html +https://dhcpd-pools.sourceforge.net/doxygen/dirname_8h_source.html +https://dhcpd-pools.sourceforge.net/doxygen/dirname-lgpl_8c.html +https://dhcpd-pools.sourceforge.net/doxygen/dosname_8h.html +https://dhcpd-pools.sourceforge.net/doxygen/dosname_8h_source.html +https://dhcpd-pools.sourceforge.net/doxygen/doxygen.css +https://dhcpd-pools.sourceforge.net/doxygen/errno_8in_8h.html +https://dhcpd-pools.sourceforge.net/doxygen/errno_8in_8h_source.html +https://dhcpd-pools.sourceforge.net/doxygen/error_8c.html +https://dhcpd-pools.sourceforge.net/doxygen/error_8h.html +https://dhcpd-pools.sourceforge.net/doxygen/error_8h_source.html +https://dhcpd-pools.sourceforge.net/doxygen/exitfail_8c.html +https://dhcpd-pools.sourceforge.net/doxygen/exitfail_8h.html +https://dhcpd-pools.sourceforge.net/doxygen/exitfail_8h_source.html +https://dhcpd-pools.sourceforge.net/doxygen/fclose_8c.html +https://dhcpd-pools.sourceforge.net/doxygen/fcntl_8h.html +https://dhcpd-pools.sourceforge.net/doxygen/fcntl_8h_source.html +https://dhcpd-pools.sourceforge.net/doxygen/fcntl_8in_8h.html +https://dhcpd-pools.sourceforge.net/doxygen/fcntl_8in_8h_source.html +https://dhcpd-pools.sourceforge.net/doxygen/fd-hook_8c.html +https://dhcpd-pools.sourceforge.net/doxygen/fd-hook_8h.html +https://dhcpd-pools.sourceforge.net/doxygen/fd-hook_8h_source.html +https://dhcpd-pools.sourceforge.net/doxygen/fdopen_8c.html +https://dhcpd-pools.sourceforge.net/doxygen/fflush_8c.html +https://dhcpd-pools.sourceforge.net/doxygen/filename_8h.html +https://dhcpd-pools.sourceforge.net/doxygen/filename_8h_source.html +https://dhcpd-pools.sourceforge.net/doxygen/files.html +https://dhcpd-pools.sourceforge.net/doxygen/flexmember_8h.html +https://dhcpd-pools.sourceforge.net/doxygen/flexmember_8h_source.html +https://dhcpd-pools.sourceforge.net/doxygen/float_09_8h.html +https://dhcpd-pools.sourceforge.net/doxygen/float_09_8h_source.html +https://dhcpd-pools.sourceforge.net/doxygen/float_8c.html +https://dhcpd-pools.sourceforge.net/doxygen/float_8in_8h.html +https://dhcpd-pools.sourceforge.net/doxygen/float_8in_8h_source.html +https://dhcpd-pools.sourceforge.net/doxygen/fopen_8c.html +https://dhcpd-pools.sourceforge.net/doxygen/fpending_8c.html +https://dhcpd-pools.sourceforge.net/doxygen/fpending_8h.html +https://dhcpd-pools.sourceforge.net/doxygen/fpending_8h_source.html +https://dhcpd-pools.sourceforge.net/doxygen/fpurge_8c.html +https://dhcpd-pools.sourceforge.net/doxygen/freading_8c.html +https://dhcpd-pools.sourceforge.net/doxygen/freading_8h.html +https://dhcpd-pools.sourceforge.net/doxygen/freading_8h_source.html +https://dhcpd-pools.sourceforge.net/doxygen/fseek_8c.html +https://dhcpd-pools.sourceforge.net/doxygen/fseeko_8c.html +https://dhcpd-pools.sourceforge.net/doxygen/fstat_8c.html +https://dhcpd-pools.sourceforge.net/doxygen/ftell_8c.html +https://dhcpd-pools.sourceforge.net/doxygen/ftello_8c.html +https://dhcpd-pools.sourceforge.net/doxygen/functions_func.html +https://dhcpd-pools.sourceforge.net/doxygen/functions.html +https://dhcpd-pools.sourceforge.net/doxygen/functions_vars.html +https://dhcpd-pools.sourceforge.net/doxygen/getdata_8c.html +https://dhcpd-pools.sourceforge.net/doxygen/getopt1_8c.html +https://dhcpd-pools.sourceforge.net/doxygen/getopt_8c.html +https://dhcpd-pools.sourceforge.net/doxygen/getopt_8in_8h.html +https://dhcpd-pools.sourceforge.net/doxygen/getopt_8in_8h_source.html +https://dhcpd-pools.sourceforge.net/doxygen/getopt-cdefs_8in_8h.html +https://dhcpd-pools.sourceforge.net/doxygen/getopt-cdefs_8in_8h_source.html +https://dhcpd-pools.sourceforge.net/doxygen/getopt-core_8h.html +https://dhcpd-pools.sourceforge.net/doxygen/getopt-core_8h_source.html +https://dhcpd-pools.sourceforge.net/doxygen/getopt-ext_8h.html +https://dhcpd-pools.sourceforge.net/doxygen/getopt-ext_8h_source.html +https://dhcpd-pools.sourceforge.net/doxygen/getopt__int_8h.html +https://dhcpd-pools.sourceforge.net/doxygen/getopt__int_8h_source.html +https://dhcpd-pools.sourceforge.net/doxygen/getopt-pfx-core_8h.html +https://dhcpd-pools.sourceforge.net/doxygen/getopt-pfx-core_8h_source.html +https://dhcpd-pools.sourceforge.net/doxygen/getopt-pfx-ext_8h.html +https://dhcpd-pools.sourceforge.net/doxygen/getopt-pfx-ext_8h_source.html +https://dhcpd-pools.sourceforge.net/doxygen/getprogname_8c.html +https://dhcpd-pools.sourceforge.net/doxygen/getprogname_8h.html +https://dhcpd-pools.sourceforge.net/doxygen/getprogname_8h_source.html +https://dhcpd-pools.sourceforge.net/doxygen/gettext_8h.html +https://dhcpd-pools.sourceforge.net/doxygen/gettext_8h_source.html +https://dhcpd-pools.sourceforge.net/doxygen/globals_a.html +https://dhcpd-pools.sourceforge.net/doxygen/globals_b.html +https://dhcpd-pools.sourceforge.net/doxygen/globals_c.html +https://dhcpd-pools.sourceforge.net/doxygen/globals_defs_a.html +https://dhcpd-pools.sourceforge.net/doxygen/globals_defs_b.html +https://dhcpd-pools.sourceforge.net/doxygen/globals_defs_c.html +https://dhcpd-pools.sourceforge.net/doxygen/globals_defs_d.html +https://dhcpd-pools.sourceforge.net/doxygen/globals_defs_e.html +https://dhcpd-pools.sourceforge.net/doxygen/globals_defs_f.html +https://dhcpd-pools.sourceforge.net/doxygen/globals_defs_g.html +https://dhcpd-pools.sourceforge.net/doxygen/globals_defs_h.html +https://dhcpd-pools.sourceforge.net/doxygen/globals_defs.html +https://dhcpd-pools.sourceforge.net/doxygen/globals_defs_i.html +https://dhcpd-pools.sourceforge.net/doxygen/globals_defs_k.html +https://dhcpd-pools.sourceforge.net/doxygen/globals_defs_l.html +https://dhcpd-pools.sourceforge.net/doxygen/globals_defs_m.html +https://dhcpd-pools.sourceforge.net/doxygen/globals_defs_n.html +https://dhcpd-pools.sourceforge.net/doxygen/globals_defs_o.html +https://dhcpd-pools.sourceforge.net/doxygen/globals_defs_p.html +https://dhcpd-pools.sourceforge.net/doxygen/globals_defs_r.html +https://dhcpd-pools.sourceforge.net/doxygen/globals_defs_s.html +https://dhcpd-pools.sourceforge.net/doxygen/globals_defs_t.html +https://dhcpd-pools.sourceforge.net/doxygen/globals_defs_u.html +https://dhcpd-pools.sourceforge.net/doxygen/globals_defs_v.html +https://dhcpd-pools.sourceforge.net/doxygen/globals_defs_w.html +https://dhcpd-pools.sourceforge.net/doxygen/globals_defs_x.html +https://dhcpd-pools.sourceforge.net/doxygen/globals_defs_y.html +https://dhcpd-pools.sourceforge.net/doxygen/globals_d.html +https://dhcpd-pools.sourceforge.net/doxygen/globals_e.html +https://dhcpd-pools.sourceforge.net/doxygen/globals_enum.html +https://dhcpd-pools.sourceforge.net/doxygen/globals_eval.html +https://dhcpd-pools.sourceforge.net/doxygen/globals_f.html +https://dhcpd-pools.sourceforge.net/doxygen/globals_func_a.html +https://dhcpd-pools.sourceforge.net/doxygen/globals_func_b.html +https://dhcpd-pools.sourceforge.net/doxygen/globals_func_c.html +https://dhcpd-pools.sourceforge.net/doxygen/globals_func_d.html +https://dhcpd-pools.sourceforge.net/doxygen/globals_func_e.html +https://dhcpd-pools.sourceforge.net/doxygen/globals_func_f.html +https://dhcpd-pools.sourceforge.net/doxygen/globals_func_g.html +https://dhcpd-pools.sourceforge.net/doxygen/globals_func_h.html +https://dhcpd-pools.sourceforge.net/doxygen/globals_func.html +https://dhcpd-pools.sourceforge.net/doxygen/globals_func_i.html +https://dhcpd-pools.sourceforge.net/doxygen/globals_func_l.html +https://dhcpd-pools.sourceforge.net/doxygen/globals_func_m.html +https://dhcpd-pools.sourceforge.net/doxygen/globals_func_n.html +https://dhcpd-pools.sourceforge.net/doxygen/globals_func_o.html +https://dhcpd-pools.sourceforge.net/doxygen/globals_func_p.html +https://dhcpd-pools.sourceforge.net/doxygen/globals_func_q.html +https://dhcpd-pools.sourceforge.net/doxygen/globals_func_r.html +https://dhcpd-pools.sourceforge.net/doxygen/globals_func_s.html +https://dhcpd-pools.sourceforge.net/doxygen/globals_func_t.html +https://dhcpd-pools.sourceforge.net/doxygen/globals_func_u.html +https://dhcpd-pools.sourceforge.net/doxygen/globals_func_x.html +https://dhcpd-pools.sourceforge.net/doxygen/globals_g.html +https://dhcpd-pools.sourceforge.net/doxygen/globals_h.html +https://dhcpd-pools.sourceforge.net/doxygen/globals.html +https://dhcpd-pools.sourceforge.net/doxygen/globals_i.html +https://dhcpd-pools.sourceforge.net/doxygen/globals_k.html +https://dhcpd-pools.sourceforge.net/doxygen/globals_l.html +https://dhcpd-pools.sourceforge.net/doxygen/globals_m.html +https://dhcpd-pools.sourceforge.net/doxygen/globals_n.html +https://dhcpd-pools.sourceforge.net/doxygen/globals_o.html +https://dhcpd-pools.sourceforge.net/doxygen/globals_p.html +https://dhcpd-pools.sourceforge.net/doxygen/globals_q.html +https://dhcpd-pools.sourceforge.net/doxygen/globals_r.html +https://dhcpd-pools.sourceforge.net/doxygen/globals_s.html +https://dhcpd-pools.sourceforge.net/doxygen/globals_t.html +https://dhcpd-pools.sourceforge.net/doxygen/globals_type.html +https://dhcpd-pools.sourceforge.net/doxygen/globals_u.html +https://dhcpd-pools.sourceforge.net/doxygen/globals_vars.html +https://dhcpd-pools.sourceforge.net/doxygen/globals_v.html +https://dhcpd-pools.sourceforge.net/doxygen/globals_w.html +https://dhcpd-pools.sourceforge.net/doxygen/globals_x.html +https://dhcpd-pools.sourceforge.net/doxygen/globals_y.html +https://dhcpd-pools.sourceforge.net/doxygen/graph_legend.html +https://dhcpd-pools.sourceforge.net/doxygen/hard-locale_8c.html +https://dhcpd-pools.sourceforge.net/doxygen/hard-locale_8h.html +https://dhcpd-pools.sourceforge.net/doxygen/hard-locale_8h_source.html +https://dhcpd-pools.sourceforge.net/doxygen/hash_8c.html +https://dhcpd-pools.sourceforge.net/doxygen/index.html +https://dhcpd-pools.sourceforge.net/doxygen/inet_8h.html +https://dhcpd-pools.sourceforge.net/doxygen/inet_8h_source.html +https://dhcpd-pools.sourceforge.net/doxygen/inet__pton_8c.html +https://dhcpd-pools.sourceforge.net/doxygen/intprops_8h.html +https://dhcpd-pools.sourceforge.net/doxygen/intprops_8h_source.html +https://dhcpd-pools.sourceforge.net/doxygen/introduction_8dox.html +https://dhcpd-pools.sourceforge.net/doxygen/isnan_8c.html +https://dhcpd-pools.sourceforge.net/doxygen/isnand_8c.html +https://dhcpd-pools.sourceforge.net/doxygen/isnanf_8c.html +https://dhcpd-pools.sourceforge.net/doxygen/isnanl_8c.html +https://dhcpd-pools.sourceforge.net/doxygen/itold_8c.html +https://dhcpd-pools.sourceforge.net/doxygen/limits_8h.html +https://dhcpd-pools.sourceforge.net/doxygen/limits_8h_source.html +https://dhcpd-pools.sourceforge.net/doxygen/limits_8in_8h.html +https://dhcpd-pools.sourceforge.net/doxygen/limits_8in_8h_source.html +https://dhcpd-pools.sourceforge.net/doxygen/localcharset_8c.html +https://dhcpd-pools.sourceforge.net/doxygen/localcharset_8h.html +https://dhcpd-pools.sourceforge.net/doxygen/localcharset_8h_source.html +https://dhcpd-pools.sourceforge.net/doxygen/localtime-buffer_8c.html +https://dhcpd-pools.sourceforge.net/doxygen/localtime-buffer_8h.html +https://dhcpd-pools.sourceforge.net/doxygen/localtime-buffer_8h_source.html +https://dhcpd-pools.sourceforge.net/doxygen/lseek_8c.html +https://dhcpd-pools.sourceforge.net/doxygen/malloc_8c.html +https://dhcpd-pools.sourceforge.net/doxygen/malloca_8c.html +https://dhcpd-pools.sourceforge.net/doxygen/malloca_8h.html +https://dhcpd-pools.sourceforge.net/doxygen/malloca_8h_source.html +https://dhcpd-pools.sourceforge.net/doxygen/math_8c.html +https://dhcpd-pools.sourceforge.net/doxygen/math_8h.html +https://dhcpd-pools.sourceforge.net/doxygen/math_8h_source.html +https://dhcpd-pools.sourceforge.net/doxygen/math_8in_8h.html +https://dhcpd-pools.sourceforge.net/doxygen/math_8in_8h_source.html +https://dhcpd-pools.sourceforge.net/doxygen/mbrtowc_8c.html +https://dhcpd-pools.sourceforge.net/doxygen/mbsinit_8c.html +https://dhcpd-pools.sourceforge.net/doxygen/memchr_8c.html +https://dhcpd-pools.sourceforge.net/doxygen/minmax_8h.html +https://dhcpd-pools.sourceforge.net/doxygen/minmax_8h_source.html +https://dhcpd-pools.sourceforge.net/doxygen/mktime_8c.html +https://dhcpd-pools.sourceforge.net/doxygen/mktime-internal_8h.html +https://dhcpd-pools.sourceforge.net/doxygen/mktime-internal_8h_source.html +https://dhcpd-pools.sourceforge.net/doxygen/msvc-inval_8c.html +https://dhcpd-pools.sourceforge.net/doxygen/msvc-inval_8h.html +https://dhcpd-pools.sourceforge.net/doxygen/msvc-inval_8h_source.html +https://dhcpd-pools.sourceforge.net/doxygen/msvc-nothrow_8c.html +https://dhcpd-pools.sourceforge.net/doxygen/msvc-nothrow_8h.html +https://dhcpd-pools.sourceforge.net/doxygen/msvc-nothrow_8h_source.html +https://dhcpd-pools.sourceforge.net/doxygen/mustach_8c.html +https://dhcpd-pools.sourceforge.net/doxygen/mustach_8h.html +https://dhcpd-pools.sourceforge.net/doxygen/mustach_8h_source.html +https://dhcpd-pools.sourceforge.net/doxygen/mustach-dhcpd-pools_8c.html +https://dhcpd-pools.sourceforge.net/doxygen/netinet__in_8in_8h.html +https://dhcpd-pools.sourceforge.net/doxygen/netinet__in_8in_8h_source.html +https://dhcpd-pools.sourceforge.net/doxygen/__Noreturn_8h.html +https://dhcpd-pools.sourceforge.net/doxygen/__Noreturn_8h_source.html +https://dhcpd-pools.sourceforge.net/doxygen/nstrftime_8c.html +https://dhcpd-pools.sourceforge.net/doxygen/other_8c.html +https://dhcpd-pools.sourceforge.net/doxygen/output_8c.html +https://dhcpd-pools.sourceforge.net/doxygen/pathmax_8h.html +https://dhcpd-pools.sourceforge.net/doxygen/pathmax_8h_source.html +https://dhcpd-pools.sourceforge.net/doxygen/progname_8c.html +https://dhcpd-pools.sourceforge.net/doxygen/progname_8h.html +https://dhcpd-pools.sourceforge.net/doxygen/progname_8h_source.html +https://dhcpd-pools.sourceforge.net/doxygen/quote_8h.html +https://dhcpd-pools.sourceforge.net/doxygen/quote_8h_source.html +https://dhcpd-pools.sourceforge.net/doxygen/quotearg_8c.html +https://dhcpd-pools.sourceforge.net/doxygen/quotearg_8h.html +https://dhcpd-pools.sourceforge.net/doxygen/quotearg_8h_source.html +https://dhcpd-pools.sourceforge.net/doxygen/realloc_8c.html +https://dhcpd-pools.sourceforge.net/doxygen/sampleoutput.html +https://dhcpd-pools.sourceforge.net/doxygen/search +https://dhcpd-pools.sourceforge.net/doxygen/search/all_0.html +https://dhcpd-pools.sourceforge.net/doxygen/search/all_10.html +https://dhcpd-pools.sourceforge.net/doxygen/search/all_11.html +https://dhcpd-pools.sourceforge.net/doxygen/search/all_12.html +https://dhcpd-pools.sourceforge.net/doxygen/search/all_13.html +https://dhcpd-pools.sourceforge.net/doxygen/search/all_14.html +https://dhcpd-pools.sourceforge.net/doxygen/search/all_15.html +https://dhcpd-pools.sourceforge.net/doxygen/search/all_16.html +https://dhcpd-pools.sourceforge.net/doxygen/search/all_17.html +https://dhcpd-pools.sourceforge.net/doxygen/search/all_18.html +https://dhcpd-pools.sourceforge.net/doxygen/search/all_1.html +https://dhcpd-pools.sourceforge.net/doxygen/search/all_2.html +https://dhcpd-pools.sourceforge.net/doxygen/search/all_3.html +https://dhcpd-pools.sourceforge.net/doxygen/search/all_4.html +https://dhcpd-pools.sourceforge.net/doxygen/search/all_5.html +https://dhcpd-pools.sourceforge.net/doxygen/search/all_6.html +https://dhcpd-pools.sourceforge.net/doxygen/search/all_7.html +https://dhcpd-pools.sourceforge.net/doxygen/search/all_8.html +https://dhcpd-pools.sourceforge.net/doxygen/search/all_9.html +https://dhcpd-pools.sourceforge.net/doxygen/search/all_a.html +https://dhcpd-pools.sourceforge.net/doxygen/search/all_b.html +https://dhcpd-pools.sourceforge.net/doxygen/search/all_c.html +https://dhcpd-pools.sourceforge.net/doxygen/search/all_d.html +https://dhcpd-pools.sourceforge.net/doxygen/search/all_e.html +https://dhcpd-pools.sourceforge.net/doxygen/search/all_f.html +https://dhcpd-pools.sourceforge.net/doxygen/search/classes_0.html +https://dhcpd-pools.sourceforge.net/doxygen/search/classes_1.html +https://dhcpd-pools.sourceforge.net/doxygen/search/classes_2.html +https://dhcpd-pools.sourceforge.net/doxygen/search/classes_3.html +https://dhcpd-pools.sourceforge.net/doxygen/search/classes_4.html +https://dhcpd-pools.sourceforge.net/doxygen/search/classes_5.html +https://dhcpd-pools.sourceforge.net/doxygen/search/classes_6.html +https://dhcpd-pools.sourceforge.net/doxygen/search/classes_7.html +https://dhcpd-pools.sourceforge.net/doxygen/search/classes_8.html +https://dhcpd-pools.sourceforge.net/doxygen/search/classes_9.html +https://dhcpd-pools.sourceforge.net/doxygen/search/classes_a.html +https://dhcpd-pools.sourceforge.net/doxygen/search/defines_0.html +https://dhcpd-pools.sourceforge.net/doxygen/search/defines_10.html +https://dhcpd-pools.sourceforge.net/doxygen/search/defines_11.html +https://dhcpd-pools.sourceforge.net/doxygen/search/defines_12.html +https://dhcpd-pools.sourceforge.net/doxygen/search/defines_13.html +https://dhcpd-pools.sourceforge.net/doxygen/search/defines_14.html +https://dhcpd-pools.sourceforge.net/doxygen/search/defines_15.html +https://dhcpd-pools.sourceforge.net/doxygen/search/defines_16.html +https://dhcpd-pools.sourceforge.net/doxygen/search/defines_17.html +https://dhcpd-pools.sourceforge.net/doxygen/search/defines_1.html +https://dhcpd-pools.sourceforge.net/doxygen/search/defines_2.html +https://dhcpd-pools.sourceforge.net/doxygen/search/defines_3.html +https://dhcpd-pools.sourceforge.net/doxygen/search/defines_4.html +https://dhcpd-pools.sourceforge.net/doxygen/search/defines_5.html +https://dhcpd-pools.sourceforge.net/doxygen/search/defines_6.html +https://dhcpd-pools.sourceforge.net/doxygen/search/defines_7.html +https://dhcpd-pools.sourceforge.net/doxygen/search/defines_8.html +https://dhcpd-pools.sourceforge.net/doxygen/search/defines_9.html +https://dhcpd-pools.sourceforge.net/doxygen/search/defines_a.html +https://dhcpd-pools.sourceforge.net/doxygen/search/defines_b.html +https://dhcpd-pools.sourceforge.net/doxygen/search/defines_c.html +https://dhcpd-pools.sourceforge.net/doxygen/search/defines_d.html +https://dhcpd-pools.sourceforge.net/doxygen/search/defines_e.html +https://dhcpd-pools.sourceforge.net/doxygen/search/defines_f.html +https://dhcpd-pools.sourceforge.net/doxygen/search/enums_0.html +https://dhcpd-pools.sourceforge.net/doxygen/search/enums_1.html +https://dhcpd-pools.sourceforge.net/doxygen/search/enums_2.html +https://dhcpd-pools.sourceforge.net/doxygen/search/enums_3.html +https://dhcpd-pools.sourceforge.net/doxygen/search/enums_4.html +https://dhcpd-pools.sourceforge.net/doxygen/search/enums_5.html +https://dhcpd-pools.sourceforge.net/doxygen/search/enums_6.html +https://dhcpd-pools.sourceforge.net/doxygen/search/enumvalues_0.html +https://dhcpd-pools.sourceforge.net/doxygen/search/enumvalues_1.html +https://dhcpd-pools.sourceforge.net/doxygen/search/enumvalues_2.html +https://dhcpd-pools.sourceforge.net/doxygen/search/enumvalues_3.html +https://dhcpd-pools.sourceforge.net/doxygen/search/enumvalues_4.html +https://dhcpd-pools.sourceforge.net/doxygen/search/enumvalues_5.html +https://dhcpd-pools.sourceforge.net/doxygen/search/enumvalues_6.html +https://dhcpd-pools.sourceforge.net/doxygen/search/enumvalues_7.html +https://dhcpd-pools.sourceforge.net/doxygen/search/enumvalues_8.html +https://dhcpd-pools.sourceforge.net/doxygen/search/enumvalues_9.html +https://dhcpd-pools.sourceforge.net/doxygen/search/enumvalues_a.html +https://dhcpd-pools.sourceforge.net/doxygen/search/enumvalues_b.html +https://dhcpd-pools.sourceforge.net/doxygen/search/enumvalues_c.html +https://dhcpd-pools.sourceforge.net/doxygen/search/enumvalues_d.html +https://dhcpd-pools.sourceforge.net/doxygen/search/enumvalues_e.html +https://dhcpd-pools.sourceforge.net/doxygen/search/enumvalues_f.html +https://dhcpd-pools.sourceforge.net/doxygen/search/files_0.html +https://dhcpd-pools.sourceforge.net/doxygen/search/files_10.html +https://dhcpd-pools.sourceforge.net/doxygen/search/files_11.html +https://dhcpd-pools.sourceforge.net/doxygen/search/files_12.html +https://dhcpd-pools.sourceforge.net/doxygen/search/files_13.html +https://dhcpd-pools.sourceforge.net/doxygen/search/files_14.html +https://dhcpd-pools.sourceforge.net/doxygen/search/files_15.html +https://dhcpd-pools.sourceforge.net/doxygen/search/files_16.html +https://dhcpd-pools.sourceforge.net/doxygen/search/files_1.html +https://dhcpd-pools.sourceforge.net/doxygen/search/files_2.html +https://dhcpd-pools.sourceforge.net/doxygen/search/files_3.html +https://dhcpd-pools.sourceforge.net/doxygen/search/files_4.html +https://dhcpd-pools.sourceforge.net/doxygen/search/files_5.html +https://dhcpd-pools.sourceforge.net/doxygen/search/files_6.html +https://dhcpd-pools.sourceforge.net/doxygen/search/files_7.html +https://dhcpd-pools.sourceforge.net/doxygen/search/files_8.html +https://dhcpd-pools.sourceforge.net/doxygen/search/files_9.html +https://dhcpd-pools.sourceforge.net/doxygen/search/files_a.html +https://dhcpd-pools.sourceforge.net/doxygen/search/files_b.html +https://dhcpd-pools.sourceforge.net/doxygen/search/files_c.html +https://dhcpd-pools.sourceforge.net/doxygen/search/files_d.html +https://dhcpd-pools.sourceforge.net/doxygen/search/files_e.html +https://dhcpd-pools.sourceforge.net/doxygen/search/files_f.html +https://dhcpd-pools.sourceforge.net/doxygen/search/functions_0.html +https://dhcpd-pools.sourceforge.net/doxygen/search/functions_10.html +https://dhcpd-pools.sourceforge.net/doxygen/search/functions_11.html +https://dhcpd-pools.sourceforge.net/doxygen/search/functions_12.html +https://dhcpd-pools.sourceforge.net/doxygen/search/functions_13.html +https://dhcpd-pools.sourceforge.net/doxygen/search/functions_14.html +https://dhcpd-pools.sourceforge.net/doxygen/search/functions_1.html +https://dhcpd-pools.sourceforge.net/doxygen/search/functions_2.html +https://dhcpd-pools.sourceforge.net/doxygen/search/functions_3.html +https://dhcpd-pools.sourceforge.net/doxygen/search/functions_4.html +https://dhcpd-pools.sourceforge.net/doxygen/search/functions_5.html +https://dhcpd-pools.sourceforge.net/doxygen/search/functions_6.html +https://dhcpd-pools.sourceforge.net/doxygen/search/functions_7.html +https://dhcpd-pools.sourceforge.net/doxygen/search/functions_8.html +https://dhcpd-pools.sourceforge.net/doxygen/search/functions_9.html +https://dhcpd-pools.sourceforge.net/doxygen/search/functions_a.html +https://dhcpd-pools.sourceforge.net/doxygen/search/functions_b.html +https://dhcpd-pools.sourceforge.net/doxygen/search/functions_c.html +https://dhcpd-pools.sourceforge.net/doxygen/search/functions_d.html +https://dhcpd-pools.sourceforge.net/doxygen/search/functions_e.html +https://dhcpd-pools.sourceforge.net/doxygen/search/functions_f.html +https://dhcpd-pools.sourceforge.net/doxygen/search/nomatches.html +https://dhcpd-pools.sourceforge.net/doxygen/search/search.css +https://dhcpd-pools.sourceforge.net/doxygen/search/typedefs_0.html +https://dhcpd-pools.sourceforge.net/doxygen/search/typedefs_1.html +https://dhcpd-pools.sourceforge.net/doxygen/search/typedefs_2.html +https://dhcpd-pools.sourceforge.net/doxygen/search/typedefs_3.html +https://dhcpd-pools.sourceforge.net/doxygen/search/typedefs_4.html +https://dhcpd-pools.sourceforge.net/doxygen/search/typedefs_5.html +https://dhcpd-pools.sourceforge.net/doxygen/search/typedefs_6.html +https://dhcpd-pools.sourceforge.net/doxygen/search/typedefs_7.html +https://dhcpd-pools.sourceforge.net/doxygen/search/typedefs_8.html +https://dhcpd-pools.sourceforge.net/doxygen/search/variables_0.html +https://dhcpd-pools.sourceforge.net/doxygen/search/variables_10.html +https://dhcpd-pools.sourceforge.net/doxygen/search/variables_11.html +https://dhcpd-pools.sourceforge.net/doxygen/search/variables_12.html +https://dhcpd-pools.sourceforge.net/doxygen/search/variables_13.html +https://dhcpd-pools.sourceforge.net/doxygen/search/variables_14.html +https://dhcpd-pools.sourceforge.net/doxygen/search/variables_15.html +https://dhcpd-pools.sourceforge.net/doxygen/search/variables_16.html +https://dhcpd-pools.sourceforge.net/doxygen/search/variables_1.html +https://dhcpd-pools.sourceforge.net/doxygen/search/variables_2.html +https://dhcpd-pools.sourceforge.net/doxygen/search/variables_3.html +https://dhcpd-pools.sourceforge.net/doxygen/search/variables_4.html +https://dhcpd-pools.sourceforge.net/doxygen/search/variables_5.html +https://dhcpd-pools.sourceforge.net/doxygen/search/variables_6.html +https://dhcpd-pools.sourceforge.net/doxygen/search/variables_7.html +https://dhcpd-pools.sourceforge.net/doxygen/search/variables_8.html +https://dhcpd-pools.sourceforge.net/doxygen/search/variables_9.html +https://dhcpd-pools.sourceforge.net/doxygen/search/variables_a.html +https://dhcpd-pools.sourceforge.net/doxygen/search/variables_b.html +https://dhcpd-pools.sourceforge.net/doxygen/search/variables_c.html +https://dhcpd-pools.sourceforge.net/doxygen/search/variables_d.html +https://dhcpd-pools.sourceforge.net/doxygen/search/variables_e.html +https://dhcpd-pools.sourceforge.net/doxygen/search/variables_f.html +https://dhcpd-pools.sourceforge.net/doxygen/setenv_8c.html +https://dhcpd-pools.sourceforge.net/doxygen/socket_8h.html +https://dhcpd-pools.sourceforge.net/doxygen/socket_8h_source.html +https://dhcpd-pools.sourceforge.net/doxygen/sort_8c.html +https://dhcpd-pools.sourceforge.net/doxygen/stat_8c.html +https://dhcpd-pools.sourceforge.net/doxygen/stat_8h.html +https://dhcpd-pools.sourceforge.net/doxygen/stat_8h_source.html +https://dhcpd-pools.sourceforge.net/doxygen/stat-w32_8c.html +https://dhcpd-pools.sourceforge.net/doxygen/stat-w32_8h.html +https://dhcpd-pools.sourceforge.net/doxygen/stat-w32_8h_source.html +https://dhcpd-pools.sourceforge.net/doxygen/stdalign_8in_8h.html +https://dhcpd-pools.sourceforge.net/doxygen/stdalign_8in_8h_source.html +https://dhcpd-pools.sourceforge.net/doxygen/stdbool_8in_8h.html +https://dhcpd-pools.sourceforge.net/doxygen/stdbool_8in_8h_source.html +https://dhcpd-pools.sourceforge.net/doxygen/stddef_8in_8h.html +https://dhcpd-pools.sourceforge.net/doxygen/stddef_8in_8h_source.html +https://dhcpd-pools.sourceforge.net/doxygen/stdint_8in_8h.html +https://dhcpd-pools.sourceforge.net/doxygen/stdint_8in_8h_source.html +https://dhcpd-pools.sourceforge.net/doxygen/stdio_8h.html +https://dhcpd-pools.sourceforge.net/doxygen/stdio_8h_source.html +https://dhcpd-pools.sourceforge.net/doxygen/stdio_8in_8h.html +https://dhcpd-pools.sourceforge.net/doxygen/stdio_8in_8h_source.html +https://dhcpd-pools.sourceforge.net/doxygen/stdio-impl_8h.html +https://dhcpd-pools.sourceforge.net/doxygen/stdio-impl_8h_source.html +https://dhcpd-pools.sourceforge.net/doxygen/stdlib_8h.html +https://dhcpd-pools.sourceforge.net/doxygen/stdlib_8h_source.html +https://dhcpd-pools.sourceforge.net/doxygen/stdlib_8in_8h.html +https://dhcpd-pools.sourceforge.net/doxygen/stdlib_8in_8h_source.html +https://dhcpd-pools.sourceforge.net/doxygen/stpncpy_8c.html +https://dhcpd-pools.sourceforge.net/doxygen/strdup_8c.html +https://dhcpd-pools.sourceforge.net/doxygen/streq_8h.html +https://dhcpd-pools.sourceforge.net/doxygen/streq_8h_source.html +https://dhcpd-pools.sourceforge.net/doxygen/strerror_8c.html +https://dhcpd-pools.sourceforge.net/doxygen/strerror-override_8c.html +https://dhcpd-pools.sourceforge.net/doxygen/strerror-override_8h.html +https://dhcpd-pools.sourceforge.net/doxygen/strerror-override_8h_source.html +https://dhcpd-pools.sourceforge.net/doxygen/strftime_8h.html +https://dhcpd-pools.sourceforge.net/doxygen/strftime_8h_source.html +https://dhcpd-pools.sourceforge.net/doxygen/string_8h.html +https://dhcpd-pools.sourceforge.net/doxygen/string_8h_source.html +https://dhcpd-pools.sourceforge.net/doxygen/string_8in_8h.html +https://dhcpd-pools.sourceforge.net/doxygen/string_8in_8h_source.html +https://dhcpd-pools.sourceforge.net/doxygen/stripslash_8c.html +https://dhcpd-pools.sourceforge.net/doxygen/strstr_8c.html +https://dhcpd-pools.sourceforge.net/doxygen/strtod_8c.html +https://dhcpd-pools.sourceforge.net/doxygen/str-two-way_8h.html +https://dhcpd-pools.sourceforge.net/doxygen/str-two-way_8h_source.html +https://dhcpd-pools.sourceforge.net/doxygen/structconf__t.html +https://dhcpd-pools.sourceforge.net/doxygen/structexpl.html +https://dhcpd-pools.sourceforge.net/doxygen/struct__getopt__data.html +https://dhcpd-pools.sourceforge.net/doxygen/structiovec.html +https://dhcpd-pools.sourceforge.net/doxygen/structleases__t.html +https://dhcpd-pools.sourceforge.net/doxygen/structmsghdr.html +https://dhcpd-pools.sourceforge.net/doxygen/structmustach__itf.html +https://dhcpd-pools.sourceforge.net/doxygen/structoption.html +https://dhcpd-pools.sourceforge.net/doxygen/structoutput__helper__t.html +https://dhcpd-pools.sourceforge.net/doxygen/structoutput__sort.html +https://dhcpd-pools.sourceforge.net/doxygen/structquoting__options.html +https://dhcpd-pools.sourceforge.net/doxygen/structrange__t.html +https://dhcpd-pools.sourceforge.net/doxygen/structshared__network__t.html +https://dhcpd-pools.sourceforge.net/doxygen/structslotvec.html +https://dhcpd-pools.sourceforge.net/doxygen/structsockaddr__storage.html +https://dhcpd-pools.sourceforge.net/doxygen/structtimespec.html +https://dhcpd-pools.sourceforge.net/doxygen/struct____time__t__must__be__integral.html +https://dhcpd-pools.sourceforge.net/doxygen/structtm__zone.html +https://dhcpd-pools.sourceforge.net/doxygen/sys__socket_8c.html +https://dhcpd-pools.sourceforge.net/doxygen/sys__socket_8in_8h.html +https://dhcpd-pools.sourceforge.net/doxygen/sys__socket_8in_8h_source.html +https://dhcpd-pools.sourceforge.net/doxygen/sys__stat_8in_8h.html +https://dhcpd-pools.sourceforge.net/doxygen/sys__stat_8in_8h_source.html +https://dhcpd-pools.sourceforge.net/doxygen/sys__types_8in_8h.html +https://dhcpd-pools.sourceforge.net/doxygen/sys__types_8in_8h_source.html +https://dhcpd-pools.sourceforge.net/doxygen/sys__uio_8in_8h.html +https://dhcpd-pools.sourceforge.net/doxygen/sys__uio_8in_8h_source.html +https://dhcpd-pools.sourceforge.net/doxygen/tabs.css +https://dhcpd-pools.sourceforge.net/doxygen/time_8h.html +https://dhcpd-pools.sourceforge.net/doxygen/time_8h_source.html +https://dhcpd-pools.sourceforge.net/doxygen/time_8in_8h.html +https://dhcpd-pools.sourceforge.net/doxygen/time_8in_8h_source.html +https://dhcpd-pools.sourceforge.net/doxygen/timegm_8c.html +https://dhcpd-pools.sourceforge.net/doxygen/time-internal_8h.html +https://dhcpd-pools.sourceforge.net/doxygen/time-internal_8h_source.html +https://dhcpd-pools.sourceforge.net/doxygen/time__r_8c.html +https://dhcpd-pools.sourceforge.net/doxygen/time__rz_8c.html +https://dhcpd-pools.sourceforge.net/doxygen/types_8h.html +https://dhcpd-pools.sourceforge.net/doxygen/types_8h_source.html +https://dhcpd-pools.sourceforge.net/doxygen/tzset_8c.html +https://dhcpd-pools.sourceforge.net/doxygen/uio_8h.html +https://dhcpd-pools.sourceforge.net/doxygen/uio_8h_source.html +https://dhcpd-pools.sourceforge.net/doxygen/unionipaddr__t.html +https://dhcpd-pools.sourceforge.net/doxygen/unionmemory__double.html +https://dhcpd-pools.sourceforge.net/doxygen/unionrpl__max__align__t.html +https://dhcpd-pools.sourceforge.net/doxygen/unistd_8c.html +https://dhcpd-pools.sourceforge.net/doxygen/unistd_8h.html +https://dhcpd-pools.sourceforge.net/doxygen/unistd_8h_source.html +https://dhcpd-pools.sourceforge.net/doxygen/unistd_8in_8h.html +https://dhcpd-pools.sourceforge.net/doxygen/unistd_8in_8h_source.html +https://dhcpd-pools.sourceforge.net/doxygen/unsetenv_8c.html +https://dhcpd-pools.sourceforge.net/doxygen/unused-parameter_8h.html +https://dhcpd-pools.sourceforge.net/doxygen/unused-parameter_8h_source.html +https://dhcpd-pools.sourceforge.net/doxygen/verify_8h.html +https://dhcpd-pools.sourceforge.net/doxygen/verify_8h_source.html +https://dhcpd-pools.sourceforge.net/doxygen/warn-on-use_8h.html +https://dhcpd-pools.sourceforge.net/doxygen/warn-on-use_8h_source.html +https://dhcpd-pools.sourceforge.net/doxygen/wchar_8h.html +https://dhcpd-pools.sourceforge.net/doxygen/wchar_8h_source.html +https://dhcpd-pools.sourceforge.net/doxygen/wchar_8in_8h.html +https://dhcpd-pools.sourceforge.net/doxygen/wchar_8in_8h_source.html +https://dhcpd-pools.sourceforge.net/doxygen/wctype_8h.html +https://dhcpd-pools.sourceforge.net/doxygen/wctype_8h_source.html +https://dhcpd-pools.sourceforge.net/doxygen/wctype_8in_8h.html +https://dhcpd-pools.sourceforge.net/doxygen/wctype_8in_8h_source.html +https://dhcpd-pools.sourceforge.net/doxygen/wctype-h_8c.html +https://dhcpd-pools.sourceforge.net/doxygen/xalloc_8h.html +https://dhcpd-pools.sourceforge.net/doxygen/xalloc_8h_source.html +https://dhcpd-pools.sourceforge.net/doxygen/xalloc-die_8c.html +https://dhcpd-pools.sourceforge.net/doxygen/xalloc-oversized_8h.html +https://dhcpd-pools.sourceforge.net/doxygen/xalloc-oversized_8h_source.html +https://dhcpd-pools.sourceforge.net/doxygen/xmalloc_8c.html