Your IP : 216.73.216.48
#! /bin/sh
#
# This is a kludge to fix helper apps in mozilla. See mozilla bugs #57420
# and also #78919.
#
# It's also useful for tar files with Netscape 4.x
#
# Copyright (c) 2002-2004 Paul Vojta
#
# Permission is hereby granted, free of charge, to any person obtaining a copy
# of this software and associated documentation files (the "Software"), to
# deal in the Software without restriction, including without limitation the
# rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
# sell copies of the Software, and to permit persons to whom the Software is
# furnished to do so, subject to the following conditions:
#
# The above copyright notice and this permission notice shall be included in
# all copies or substantial portions of the Software.
#
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
# EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
# IN NO EVENT SHALL PAUL VOJTA OR ANY OTHER AUTHOR OF OR CONTRIBUTOR TO
# THIS SOFTWARE BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
# WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
# IN THE SOFTWARE.
# Some changes suggested by Thomas Esser included by
# <stefanulrich@users.sourceforge.net>.
IN_FILE=
NO_RM=
TMP_DIR=
progname=xdvizilla
do_cleanup()
{
exitval=$?
if [ -z "$NO_RM" -a -n "$IN_FILE" ] ; then
rm -f "$IN_FILE"
fi
test -n "$TMP_DIR" && rm -rf "$TMP_DIR"
exit $exitval
}
do_abort()
{
xmessage -nearmouse "$progname: $1"
do_cleanup
exit 1
}
usage()
{
xmessage -nearmouse "Usage: $progname [-no-rm] <file>"
do_cleanup
exit 1
}
trap 'do_cleanup' 1 2 3 7 13 15
### create a temporary directory only read/writable by user
TMP_DIR=`mktmp -d ${TMP-/tmp}/$progname.XXXXXX`
(umask 077; mkdir "$TMP_DIR") || do_abort "Could not create directory \`$TMP_DIR'"
if [ $# -gt 1 -a "x$1" = "x-no-rm" ]; then
NO_RM=y
shift
fi
if [ $# -ne 1 ]; then
usage
fi
DIR=`dirname "$0"`
if [ "$DIR" = . ]; then
DIR=
elif [ -f "$DIR"/xdvi -a -x "$DIR"/xdvi ]; then
DIR="$DIR"/
else
DIR=
fi
# need to preserve IN_FILE for eventual deletion
IN_FILE="$1"
TMP_FILE="$IN_FILE"
while [ 1 ]; do
[ -f "$TMP_FILE" ] || do_abort "$TMP_FILE: File not found."
FILETYPE=`file "$TMP_FILE"`
case "$FILETYPE" in
*"gzip compressed data"*)
out="$TMP_DIR"/tmp-gz
gunzip -c "$TMP_FILE" > "$out"
TMP_FILE="$out"
;;
*"compressed data"* | *"compress'd data"*)
out="$TMP_DIR"/tmp-compress
uncompress -c "$TMP_FILE" > "$out"
TMP_FILE="$out"
;;
"$TMP_FILE: empty")
do_abort "$TMP_FILE is an empty file
(probably a bug in Mozilla?)"
;;
*" tar archive")
### do sanity checks on the tar archive, to avoid overwriting user files:
dangerous=`tar tf "$TMP_FILE" | egrep '^(/|.*\.\./)'`
[ -z "$dangerous" ] || do_abort "Tar file contains files with absolute paths or \`../' components,
which may overwrite user files. Not unpacking it."
### also check for gzipped DVI files inside the archive ...
out="$TMP_DIR"/`tar tf "$TMP_FILE" | egrep '\.(dvi|dvi.gz|dvi.Z)$' | head -1`
if [ -z "$out" ]; then
do_abort "Tar file does not contain a dvi file."
else
cat "$TMP_FILE" | (cd "$TMP_DIR"; tar xf -)
TMP_FILE="$out"
fi
;;
*"DVI file"*)
"$DIR"xdvi -safer "$TMP_FILE"
break
;;
*)
do_abort "$TMP_FILE: Unrecognized file format!"
;;
esac
done
do_cleanup
exit 0