mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2024-08-24 17:59:32 +00:00
![Rusty Russell](/assets/img/avatar_default.png)
The netfilter code had very good documentation: the Netfilter Hacking HOWTO. Noone ever read it. So this time I'm trying something different, using a bit of Knuthiness. Signed-off-by: Rusty Russell <rusty@rustcorp.com.au> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
58 lines
1.2 KiB
Bash
58 lines
1.2 KiB
Bash
#! /bin/sh
|
|
|
|
set -e
|
|
|
|
PREFIX=$1
|
|
shift
|
|
|
|
trap 'rm -r $TMPDIR' 0
|
|
TMPDIR=`mktemp -d`
|
|
|
|
exec 3>/dev/null
|
|
for f; do
|
|
while IFS="
|
|
" read -r LINE; do
|
|
case "$LINE" in
|
|
*$PREFIX:[0-9]*:\**)
|
|
NUM=`echo "$LINE" | sed "s/.*$PREFIX:\([0-9]*\).*/\1/"`
|
|
if [ -f $TMPDIR/$NUM ]; then
|
|
echo "$TMPDIR/$NUM already exits prior to $f"
|
|
exit 1
|
|
fi
|
|
exec 3>>$TMPDIR/$NUM
|
|
echo $f | sed 's,\.\./,,g' > $TMPDIR/.$NUM
|
|
/bin/echo "$LINE" | sed -e "s/$PREFIX:[0-9]*//" -e "s/:\*/*/" >&3
|
|
;;
|
|
*$PREFIX:[0-9]*)
|
|
NUM=`echo "$LINE" | sed "s/.*$PREFIX:\([0-9]*\).*/\1/"`
|
|
if [ -f $TMPDIR/$NUM ]; then
|
|
echo "$TMPDIR/$NUM already exits prior to $f"
|
|
exit 1
|
|
fi
|
|
exec 3>>$TMPDIR/$NUM
|
|
echo $f | sed 's,\.\./,,g' > $TMPDIR/.$NUM
|
|
/bin/echo "$LINE" | sed "s/$PREFIX:[0-9]*//" >&3
|
|
;;
|
|
*:\**)
|
|
/bin/echo "$LINE" | sed -e "s/:\*/*/" -e "s,/\*\*/,," >&3
|
|
echo >&3
|
|
exec 3>/dev/null
|
|
;;
|
|
*)
|
|
/bin/echo "$LINE" >&3
|
|
;;
|
|
esac
|
|
done < $f
|
|
echo >&3
|
|
exec 3>/dev/null
|
|
done
|
|
|
|
LASTFILE=""
|
|
for f in $TMPDIR/*; do
|
|
if [ "$LASTFILE" != $(cat $TMPDIR/.$(basename $f) ) ]; then
|
|
LASTFILE=$(cat $TMPDIR/.$(basename $f) )
|
|
echo "[ $LASTFILE ]"
|
|
fi
|
|
cat $f
|
|
done
|
|
|