commit:     e0ac661419042cb39c1ccf93df2981504d1e6339
Author:     William Hubbs <w.d.hubbs <AT> gmail <DOT> com>
AuthorDate: Tue Nov 15 00:12:06 2016 +0000
Commit:     William Hubbs <williamh <AT> gentoo <DOT> org>
CommitDate: Thu Dec  1 18:04:54 2016 +0000
URL:        https://gitweb.gentoo.org/proj/openrc.git/commit/?id=e0ac6614

split tmpfiles processing into opentmpfiles

The openntmpfiles package is designed so that it can be used on systems
independently of whether openrc is used.

 NEWS.md                  |   8 +
 conf.d/Makefile          |   3 +-
 conf.d/tmpfiles          |   3 -
 init.d/.gitignore        |   2 -
 init.d/Makefile          |   6 +-
 init.d/tmpfiles.dev.in   |  20 ---
 init.d/tmpfiles.setup.in |  19 --
 runlevels/Makefile       |   3 +-
 sh/.gitignore            |   1 -
 sh/Makefile              |   4 +-
 sh/tmpfiles.sh.in        | 457 -----------------------------------------------
 11 files changed, 15 insertions(+), 511 deletions(-)

diff --git a/NEWS.md b/NEWS.md
index 931d0ab..6027aa0 100644
--- a/NEWS.md
+++ b/NEWS.md
@@ -3,6 +3,14 @@
 This file will contain a list of notable changes for each release. Note
 the information in this file is in reverse order.
 
+## OpenRC-0.23
+
+The tmpfiles.d processing code, which was part of previous versions of
+OpenRC, has been separated into its own package [1]. If you need to
+process systemd style tmpfiles.d files, please install this package.
+
+[1] https://github.com/openrc/opentmpfiles
+
 ## OpenRC-0.22
 
 In previous versions of OpenRC, configuration information was processed

diff --git a/conf.d/Makefile b/conf.d/Makefile
index a18ca74..6c7962b 100644
--- a/conf.d/Makefile
+++ b/conf.d/Makefile
@@ -1,8 +1,7 @@
 include ../mk/net.mk
 
 DIR=   ${CONFDIR}
-CONF=  bootmisc fsck hostname localmount netmount swap urandom tmpfiles \
-               ${CONF-${OS}}
+CONF=  bootmisc fsck hostname localmount netmount swap urandom ${CONF-${OS}}
 
 ifeq (${MKNET},yes)
 CONF+= network staticroute

diff --git a/conf.d/tmpfiles b/conf.d/tmpfiles
deleted file mode 100644
index c3f208f..0000000
--- a/conf.d/tmpfiles
+++ /dev/null
@@ -1,3 +0,0 @@
-# Extra options for tmpfiles.sh
-#tmpfiles_opts="--verbose"
-tmpfiles_opts=""

diff --git a/init.d/.gitignore b/init.d/.gitignore
index 98748c7..b8cbb48 100644
--- a/init.d/.gitignore
+++ b/init.d/.gitignore
@@ -45,5 +45,3 @@ syslogd
 termencoding
 ttys
 wscons
-tmpfiles.dev
-tmpfiles.setup

diff --git a/init.d/Makefile b/init.d/Makefile
index bec4eaf..75c88ad 100644
--- a/init.d/Makefile
+++ b/init.d/Makefile
@@ -2,8 +2,8 @@ include ../mk/net.mk
 
 DIR=   ${INITDIR}
 SRCS=  bootmisc.in fsck.in hostname.in local.in localmount.in loopback.in \
-       netmount.in osclock.in root.in savecache.in swap.in tmpfiles.setup.in  \
-       swclock.in sysctl.in runsvdir.in urandom.in s6-svscan.in ${SRCS-${OS}}
+       netmount.in osclock.in root.in savecache.in swap.in swclock.in \
+       sysctl.in runsvdir.in urandom.in s6-svscan.in ${SRCS-${OS}}
 BIN=   ${OBJS}
 
 # Are we installing our network scripts?
@@ -23,7 +23,7 @@ SRCS-FreeBSD+=        adjkerntz.in devd.in dumpon.in 
encswap.in ipfw.in \
 
 SRCS-Linux=    binfmt.in devfs.in dmesg.in hwclock.in consolefont.in 
keymaps.in \
                killprocs.in modules.in modules-load.in mount-ro.in mtab.in 
numlock.in \
-               procfs.in net-online.in sysfs.in termencoding.in tmpfiles.dev.in
+               procfs.in net-online.in sysfs.in termencoding.in
 
 # Generic BSD scripts
 SRCS-NetBSD=   hostid.in moused.in newsyslog.in pf.in rarpd.in rc-enabled.in \

diff --git a/init.d/tmpfiles.dev.in b/init.d/tmpfiles.dev.in
deleted file mode 100644
index c70a29e..0000000
--- a/init.d/tmpfiles.dev.in
+++ /dev/null
@@ -1,20 +0,0 @@
-#!@SBINDIR@/openrc-run
-# Copyright 1999-2012 Gentoo Foundation
-# Released under the 2-clause BSD license.
-
-description="Set up tmpfiles.d entries"
-
-depend()
-{
-       use dev-mount
-       before dev
-       keyword -prefix -vserver
-}
-
-start()
-{
-       ebegin "Setting up tmpfiles.d entries for /dev"
-       @LIBEXECDIR@/sh/tmpfiles.sh --prefix=/dev --create --boot 
${tmpfiles_opts}
-       eend $?
-       return 0
-}

diff --git a/init.d/tmpfiles.setup.in b/init.d/tmpfiles.setup.in
deleted file mode 100644
index 5872fea..0000000
--- a/init.d/tmpfiles.setup.in
+++ /dev/null
@@ -1,19 +0,0 @@
-#!@SBINDIR@/openrc-run
-# Copyright 1999-2012 Gentoo Foundation
-# Released under the 2-clause BSD license.
-
-description="Set up tmpfiles.d entries"
-
-depend()
-{
-       need localmount
-}
-
-start()
-{
-       ebegin "Setting up tmpfiles.d entries"
-       @LIBEXECDIR@/sh/tmpfiles.sh --exclude-prefix=/dev --create --remove 
--boot \
-               ${tmpfiles_opts}
-       eend $?
-       return 0
-}

diff --git a/runlevels/Makefile b/runlevels/Makefile
index 6abd8c5..103577a 100644
--- a/runlevels/Makefile
+++ b/runlevels/Makefile
@@ -37,9 +37,8 @@ BOOT-FreeBSD+=        hostid modules newsyslog savecore 
syslogd
 BOOT-FreeBSD+= adjkerntz dumpon syscons
 
 BOOT-Linux+=   binfmt hwclock keymaps modules mtab procfs termencoding \
-       tmpfiles.setup
 SHUTDOWN-Linux=        killprocs mount-ro
-SYSINIT-Linux= devfs dmesg sysfs tmpfiles.dev
+SYSINIT-Linux= devfs dmesg sysfs
 
 # Generic BSD stuff
 BOOT-NetBSD+=  hostid newsyslog savecore syslogd

diff --git a/sh/.gitignore b/sh/.gitignore
index f814f4a..8a00710 100644
--- a/sh/.gitignore
+++ b/sh/.gitignore
@@ -6,6 +6,5 @@ cgroup-release-agent.sh
 init.sh
 init-early.sh
 rc-cgroup.sh
-tmpfiles.sh
 migrate-to-run.sh
 binfmt.sh

diff --git a/sh/Makefile b/sh/Makefile
index 1af23ec..4d7148f 100644
--- a/sh/Makefile
+++ b/sh/Makefile
@@ -1,9 +1,9 @@
 DIR=   ${LIBEXECDIR}/sh
 SRCS=  init.sh.in functions.sh.in gendepends.sh.in \
-       openrc-run.sh.in rc-functions.sh.in tmpfiles.sh.in ${SRCS-${OS}}
+       openrc-run.sh.in rc-functions.sh.in ${SRCS-${OS}}
 INC=   rc-mount.sh functions.sh rc-functions.sh runit.sh s6.sh \
                start-stop-daemon.sh supervise-daemon.sh
-BIN=   gendepends.sh init.sh openrc-run.sh tmpfiles.sh ${BIN-${OS}}
+BIN=   gendepends.sh init.sh openrc-run.sh ${BIN-${OS}}
 
 INSTALLAFTER=  _installafter
 

diff --git a/sh/tmpfiles.sh.in b/sh/tmpfiles.sh.in
deleted file mode 100644
index 87545ed..0000000
--- a/sh/tmpfiles.sh.in
+++ /dev/null
@@ -1,457 +0,0 @@
-#!/bin/sh
-# This is a reimplementation of the systemd tmpfiles.d code
-# Control creation, deletion, and cleaning of volatile and temporary files
-#
-# Copyright (c) 2012 Gentoo Foundation
-# Released under the 2-clause BSD license.
-#
-# This instance is a pure-POSIX sh version, written by Robin H Johnson
-# <robb...@gentoo.org>, based on the Arch Linux version as of 2012/01/01:
-# http://projects.archlinux.org/initscripts.git/tree/arch-tmpfiles
-#
-# See the tmpfiles.d manpage as well:
-# https://www.freedesktop.org/software/systemd/man/tmpfiles.d.html
-# This script should match the old manpage
-# http://0pointer.de/public/systemd-man/tmpfiles.d.html
-# as of 2012/03/12 and also implements some more recent features
-#
-
-DRYRUN=0
-CHECKPATH="@LIBEXECDIR@/bin/checkpath"
-
-checkprefix() {
-       n=$1
-       shift
-       for x in $@; do
-               case $n in
-                       ${x}*) return 0 ;;
-       esac
-       done
-       return 1
-}
-
-warninvalid() {
-       printf "tmpfiles: ignoring invalid entry on line %d of \`%s'\n" 
"$LINENUM" "$FILE"
-       error=$(( error+1 ))
-} >&2
-
-invalid_option() {
-       printf "tmpfiles: invalid option '%s'\n" "$1" >&2
-       exit 1
-}
-
-dryrun_or_real() {
-       local dryrun=
-       [ $DRYRUN -eq 1 ] && dryrun=echo
-       $dryrun "$@"
-}
-
-_chattr() {
-       local attr="$2"
-       case $attr in
-               [+-=]*) : ;;
-               '') return ;;
-               *) attr="+$attr" ;;
-       esac
-       local IFS=
-       dryrun_or_real chattr $1 "$attr" -- $3
-}
-
-relabel() {
-       local path
-       local paths=$1 mode=$2 uid=$3 gid=$4
-
-       for path in ${paths}; do
-               if [ -e "$path" ]; then
-                       [ -x /sbin/restorecon ] && dryrun_or_real restorecon 
$CHOPTS "$path"
-                       [ $uid != '-' ] && dryrun_or_real chown $CHOPTS "$uid" 
"$path"
-                       [ $gid != '-' ] && dryrun_or_real chgrp $CHOPTS "$gid" 
"$path"
-                       [ $mode != '-' ] && dryrun_or_real chmod $CHOPTS 
"$mode" "$path"
-               fi
-       done
-}
-
-splitpath() {
-    local path=$1
-    while [ -n "$path" ]; do
-        echo $path
-        path=${path%/*}
-    done
-}
-
-_restorecon() {
-    local path=$1
-    if [ -x /sbin/restorecon ]; then
-        dryrun_or_real restorecon -F $(splitpath "$path")
-    fi
-}
-
-_b() {
-       # Create a block device node if it doesn't exist yet
-       local path=$1 mode=$2 uid=$3 gid=$4 age=$5 arg=$6
-       if [ ! -e "$path" ]; then
-               dryrun_or_real mknod -m $mode $path b ${arg%:*} ${arg#*:}
-               _restorecon "$path"
-               dryrun_or_real chown $uid:$gid $path
-       fi
-}
-
-_c() {
-       # Create a character device node if it doesn't exist yet
-       local path=$1 mode=$2 uid=$3 gid=$4 age=$5 arg=$6
-       if [ ! -e "$path" ]; then
-               dryrun_or_real mknod -m $mode $path c ${arg%:*} ${arg#*:}
-               _restorecon "$path"
-               dryrun_or_real chown $uid:$gid $path
-       fi
-}
-
-_C() {
-       # recursively copy a file or directory
-       local path=$1 mode=$2 uid=$3 gid=$4 age=$5 arg=$6
-       if [ ! -e "$path" ]; then
-               dryrun_or_real cp -r "$arg" "$path"
-               _restorecon "$path"
-               [ $uid != '-' ] && dryrun_or_real chown "$uid" "$path"
-               [ $gid != '-' ] && dryrun_or_real chgrp "$gid" "$path"
-               [ $mode != '-' ] && dryrun_or_real chmod "$mode" "$path"
-       fi
-}
-
-_f() {
-       # Create a file if it doesn't exist yet
-       local path=$1 mode=$2 uid=$3 gid=$4 age=$5 arg=$6
-
-       [ $CREATE -gt 0 ] || return 0
-
-       if [ ! -e "$path" ]; then
-               dryrun_or_real $CHECKPATH -fq -m "$mode" -o "$uid:$gid" "$path"
-               [ -z "$arg" ] || _w "$@"
-       fi
-}
-
-_F() {
-       # Create or truncate a file
-       local path=$1 mode=$2 uid=$3 gid=$4 age=$5 arg=$6
-
-       [ $CREATE -gt 0 ] || return 0
-
-       dryrun_or_real $CHECKPATH -Fq -m "$mode" -o "$uid:$gid" "$path"
-       [ -z "$arg" ] || _w "$@"
-}
-
-_d() {
-       # Create a directory if it doesn't exist yet
-       local path=$1 mode=$2 uid=$3 gid=$4
-
-       [ $CREATE -gt 0 ] || return 0
-
-       if [ ! -d "$path" ]; then
-               dryrun_or_real mkdir -p "$path" 2>/dev/null
-               _restorecon "$path"
-               dryrun_or_real $CHECKPATH -dq -m "$mode" -o "$uid:$gid" "$path"
-       fi
-}
-
-_D() {
-       # Create or empty a directory
-       local path=$1 mode=$2 uid=$3 gid=$4
-
-       if [ -d "$path" ] && [ $REMOVE -gt 0 ]; then
-               dryrun_or_real find "$path" -mindepth 1 -maxdepth 1 -xdev -exec 
rm -rf {} +
-               _restorecon "$path"
-       fi
-
-       if [ $CREATE -gt 0 ]; then
-               dryrun_or_real mkdir -p "$path" 2>/dev/null
-               _restorecon "$path"
-               dryrun_or_real $CHECKPATH -Dq -m "$mode" -o "$uid:$gid" "$path"
-       fi
-}
-
-_v() {
-       # Create a subvolume if the path does not exist yet and the file system
-       # supports this (btrfs). Otherwise create a normal directory.
-       # TODO: Implement btrfs subvol creation.
-       _d "$@"
-}
-
-_q() {
-       # Similar to _v. However, make sure that the subvolume will be assigned
-       # to the same higher-level quota groups as the subvolume it has
-       # been created in.
-       # TODO: Implement btrfs subvol creation.
-       _d "$@"
-}
-
-_Q() {
-       # Similar to q. However, instead of copying the higher-level quota
-       # group assignments from the parent as-is, the lowest quota group
-       # of the parent subvolume is determined that is not the
-       # leaf quota group.
-       # TODO: Implement btrfs subvol creation.
-       _d "$@"
-}
-
-_h() {
-       # Set file/directory attributes. Lines of this type accept
-       # shell-style globs in place of normal path names.
-       # The format of the argument field matches chattr
-       _chattr '' "$6" "$1"
-}
-
-_H() {
-       # Recursively set file/directory attributes. Lines of this type accept
-       # shell-syle globs in place of normal path names.
-       # Does not follow symlinks
-       _chattr -R "$6" "$1"
-}
-
-_L() {
-       # Create a symlink if it doesn't exist yet
-       local path=$1 mode=$2 uid=$3 gid=$4 age=$5 arg=$6
-       [ ! -e "$path" ] && dryrun_or_real ln -s "$arg" "$path"
-       _restorecon "$path"
-}
-
-_p() {
-       # Create a named pipe (FIFO) if it doesn't exist yet
-       local path=$1 mode=$2 uid=$3 gid=$4
-
-       [ $CREATE -gt 0 ] || return 0
-
-       if [ ! -p "$path" ]; then
-               dryrun_or_real $CHECKPATH -pq -m $mode -o "$uid:$gid" "$path"
-       fi
-}
-
-_x() {
-       # Ignore a path during cleaning. Use this type to exclude paths from 
clean-up as
-       # controlled with the Age parameter. Note that lines of this type do not
-       # influence the effect of r or R lines. Lines of this type accept 
shell-style
-       # globs in place of of normal path names.
-       :
-       # XXX: we don't implement this
-}
-
-_X() {
-       # Ignore a path during cleanup. Use this type to prevent path
-       # removal as controled with the age parameter. Note that if path is
-       # a directory, the content of the directory is not excluded from
-       # clean-up, only the directory itself.
-       # Lines of this type accept shell-style globs in place of normal path 
names.
-       :
-       # XXX: we don't implement this
-}
-
-_r() {
-       # Remove a file or directory if it exists. This may not be used to 
remove
-       # non-empty directories, use R for that. Lines of this type accept 
shell-style
-       # globs in place of normal path names.
-       local path
-       local paths=$1
-
-       [ $REMOVE -gt 0 ] || return 0
-
-       for path in ${paths}; do
-               if [ -f "$path" ]; then
-                       dryrun_or_real rm -f "$path"
-               elif [ -d "$path" ]; then
-                       dryrun_or_real rmdir "$path"
-               fi
-       done
-}
-
-_R() {
-       # Recursively remove a path and all its subdirectories (if it is a 
directory).
-       # Lines of this type accept shell-style globs in place of normal path 
names.
-       local path
-       local paths=$1
-
-       [ $REMOVE -gt 0 ] || return 0
-
-       for path in ${paths}; do
-               [ -d "$path" ] && dryrun_or_real rm -rf --one-file-system 
"$path"
-       done
-}
-
-_w() {
-       # Write the argument parameter to a file, if it exists.
-       local path=$1 mode=$2 uid=$3 gid=$4 age=$5 arg=$6
-       if [ -f "$path" ]; then
-               if [ $DRYRUN -eq 1 ]; then
-                       echo "echo \"$arg\" >>\"$path\""
-               else
-                       echo "$arg" >>"$path"
-               fi
-       fi
-}
-
-_z() {
-       # Set ownership, access mode and relabel security context of a file or
-       # directory if it exists. Lines of this type accept shell-style globs in
-       # place of normal path names.
-       [ $CREATE -gt 0 ] || return 0
-
-       relabel "$@"
-}
-
-_Z() {
-       # Recursively set ownership, access mode and relabel security context 
of a
-       # path and all its subdirectories (if it is a directory). Lines of this 
type
-       # accept shell-style globs in place of normal path names.
-       [ $CREATE -gt 0 ] || return 0
-
-       CHOPTS=-R relabel "$@"
-}
-
-BOOT=0 CREATE=0 REMOVE=0 CLEAN=0 VERBOSE=0 DRYRUN=0 error=0 LINENO=0
-EXCLUDE=
-PREFIX=
-FILES=
-
-while [ $# -gt 0 ]; do
-       case $1 in
-               --boot) BOOT=1 ;;
-               --create) CREATE=1 ;;
-               --remove) REMOVE=1 ;;
-               --clean) CLEAN=1 ;; # TODO: Not implemented
-               --verbose) VERBOSE=1 ;;
-               --dryrun|--dry-run) DRYRUN=1 ;;
-               --exclude-prefix=*) EXCLUDE="${EXCLUDE}${1##--exclude-prefix=} 
" ;;
-               --prefix=*) PREFIX="${PREFIX}${1##--prefix=} " ;;
-               -*) invalid_option "$1" ;;
-               *) FILES="${FILES} $1"
-       esac
-       shift
-done
-
-if [ $(( CLEAN )) -eq 1 ] ; then
-       printf '%s clean mode is not implemented\n' "${0##*/}"
-       exit 1
-fi
-
-if [ "$CREATE$REMOVE" = '00' ]; then
-       printf 'usage: %s [--exclude-prefix=path] [--prefix=path] [--boot] 
[--create] [--remove] [--clean] [--verbose] [--dry-run]\n' "${0##*/}"
-       exit 1
-fi
-
-# XXX: The harcoding of /usr/lib/ is an explicit choice by upstream
-tmpfiles_dirs='/usr/lib/tmpfiles.d /run/tmpfiles.d /etc/tmpfiles.d'
-tmpfiles_basenames=''
-
-if [ -z "${FILES}" ]; then
-       # Build a list of sorted unique basenames
-       # directories declared later in the tmpfiles_d array will override 
earlier
-       # directories, on a per file basename basis.
-       # `/etc/tmpfiles.d/foo.conf' supersedes `/usr/lib/tmpfiles.d/foo.conf'.
-       # `/run/tmpfiles/foo.conf' will always be read after 
`/etc/tmpfiles.d/bar.conf'
-       for d in ${tmpfiles_dirs} ; do
-               [ -d $d ] && for f in ${d}/*.conf ; do
-                       case "${f##*/}" in
-                               systemd.conf|systemd-*.conf) continue;;
-                       esac
-                       [ -f $f ] && 
tmpfiles_basenames="${tmpfiles_basenames}\n${f##*/}"
-               done # for f in ${d}
-       done # for d in ${tmpfiles_dirs}
-       FILES="$(printf "${tmpfiles_basenames}\n" | sort -u )"
-fi
-
-tmpfiles_d=''
-
-for b in ${FILES} ; do
-       if [ "${b##*/}" != "${b}" ]; then
-               # The user specified a path on the command line
-               # Just pass it through unaltered
-               tmpfiles_d="${tmpfiles_d} ${b}"
-       else
-               real_f=''
-               for d in $tmpfiles_dirs ; do
-                       f=${d}/${b}
-                       [ -f "${f}" ] && real_f=$f
-               done
-               [ -f "${real_f}" ] && tmpfiles_d="${tmpfiles_d} ${real_f}"
-       fi
-done
-
-error=0
-
-# loop through the gathered fragments, sorted globally by filename.
-# `/run/tmpfiles/foo.conf' will always be read after `/etc/tmpfiles.d/bar.conf'
-FILE=
-for FILE in $tmpfiles_d ; do
-       LINENUM=0
-
-       ### FILE FORMAT ###
-       # XXX: We ignore the 'Age' parameter
-       # 1    2              3    4    5    6   7
-       # Cmd  Path           Mode UID  GID  Age Argument
-       # d    /run/user      0755 root root 10d -
-       # Mode, UID, GID, Age, Argument may be omitted!
-       # If Cmd ends with !, the line is only processed if --boot is passed
-
-       # XXX: Upstream says whitespace is NOT permitted in the Path argument.
-       # But IS allowed when globs are expanded for the x/r/R/z/Z types.
-       while read cmd path mode uid gid age arg; do
-               LINENUM=$(( LINENUM+1 ))
-               FORCE=0
-
-               # Unless we have both command and path, skip this line.
-               if [ -z "$cmd" -o -z "$path" ]; then
-                       continue
-               fi
-
-               case $cmd in
-                       \#*) continue ;;
-               esac
-
-               while [ ${#cmd} -gt 1 ]; do
-                       case $cmd in
-                               *!) cmd=${cmd%!}; [ "$BOOT" -eq "1" ] || 
continue 2 ;;
-                               *+) cmd=${cmd%+}; FORCE=1; ;;
-                               *) warninvalid ; continue 2 ;;
-                       esac
-               done
-
-               # whine about invalid entries
-               case $cmd in
-                       f|F|w|d|D|v|p|L|c|C|b|x|X|r|R|z|Z|q|Q|h|H) ;;
-                       *) warninvalid ; continue ;;
-               esac
-
-               # fall back on defaults when parameters are passed as '-'
-               if [ "$mode" = '-' -o "$mode" = '' ]; then
-                       case "$cmd" in
-                               p|f|F) mode=0644 ;;
-                               d|D|v) mode=0755 ;;
-                               C|z|Z|x|r|R|L) ;;
-                       esac
-               fi
-
-               [ "$uid" = '-' -o "$uid" = '' ] && uid=0
-               [ "$gid" = '-' -o "$gid" = '' ] && gid=0
-               [ "$age" = '-' -o "$age" = '' ] && age=0
-               [ "$arg" = '-' -o "$arg" = '' ] && arg=''
-               set -- "$path" "$mode" "$uid" "$gid" "$age" "$arg"
-
-               [ -n "$EXCLUDE" ] && checkprefix $path $EXCLUDE && continue
-               [ -n "$PREFIX" ] && ! checkprefix $path $PREFIX && continue
-
-               if [ $FORCE -gt 0 ]; then
-                       case $cmd in
-                               p|L|c|b) [ -f "$path" ] && dryrun_or_real rm -f 
"$path"
-                       esac
-               fi
-
-               [ "$VERBOSE" -eq "1" ] && echo _$cmd "$@"
-               _$cmd "$@"
-               rc=$?
-               if [ "${DRYRUN}" -eq "0" ]; then
-                       [ $rc -ne 0 ] && error=$((error + 1))
-               fi
-       done <$FILE
-done
-
-exit $error
-
-# vim: set ts=2 sw=2 sts=2 noet ft=sh:

Reply via email to