#!/bin/sh # # Written by Stas Maximov 1998 SVR4 (UnixWare) # stmax@u213.srcc.msu.su # (C) 1996 The Free Software Foundation. # # uni_cat () # $1 is the archive name { case "$1" in *.cpio.Z) compress -dc "$1" ;; *.cpio.gz) gzip -dc "$1" ;; *.cpio) cat "$1" ;; *) echo "unknown extension" esac } mccpiofs_list () # $1 is the archive name { uni_cat "$1" | cpio -itv | @AWK@ ' { if (substr($9,length($9),1) == ",") { tmp = substr($9, 1, length($9)-1); $9 = $8; $8 = tmp } else if (substr($10,length($10),1) == ",") { tmp = substr($10, 1, length($10)-1); $10 = $9 $9 = tmp } print $0 }' } mccpiofs_copyout () # $1 is the archive name # $2 is a name of a file within the archive # $3 is a name of a file within the system (to add from or extract to) { TMPDIR=/tmp/mctmpdir.$$ # FIXME bugzilla.eazel.com 1225: Try harder to generate a unique directory if this fails mkdir -m 0700 $TMPDIR || exit 1 cd $TMPDIR uni_cat "$1" | cpio -icumd "$2" 2>/dev/null mv "$2" "$3" cd / rm -rf $TMPDIR } # # main # umask 077 case "$1" in list) mccpiofs_list $2 exit 0 ;; copyout) mccpiofs_copyout $2 $3 $4 exit 0 ;; esac exit 1