diff options
Diffstat (limited to 'Master/bin/i386-freebsd/xdvizilla')
-rwxr-xr-x | Master/bin/i386-freebsd/xdvizilla | 134 |
1 files changed, 134 insertions, 0 deletions
diff --git a/Master/bin/i386-freebsd/xdvizilla b/Master/bin/i386-freebsd/xdvizilla new file mode 100755 index 00000000000..54f4b03ddfe --- /dev/null +++ b/Master/bin/i386-freebsd/xdvizilla @@ -0,0 +1,134 @@ +#! /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=${TMPDIR-${TEMP-${TMP-/tmp}}}/$progname.$$ +(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 |