Annotation of dmsdos/src/msdos.fsck-wrapper, revision 1.1.1.1

1.1       root        1: #!/bin/sh
                      2: 
                      3: # This is an example shell script that can be used as a wrapper for a
                      4: # msdos.fsck (called by the generic fsck frontend).
                      5: #
                      6: # The script accepts a standard fsck command line and decides upon the
                      7: # the raw filesystem data whether it is a CVF or not. If it is a CVF then
                      8: # dmsdosfsck is invoked.
                      9: #
                     10: # The case when it is not a CVF but an uncompressed msdos partition is a bit
                     11: # more complex. First, dosfsck is invoked to check that dos partition. Then
                     12: # the script tries to mount that partition and scans its root directory for
                     13: # CVFs. If there are CVFs it tries to check them, too, by calling dmsdosfsck
                     14: # on them. After that, the msdos partition is unmounted again in order to
                     15: # restore the previous state. If the -r option is present in the fsck
                     16: # command line, some questions are asked.
                     17: #
                     18: # Note that this script needs a helper program that finds out whether a 
                     19: # file is a CVF or not. If you have added the file(1) magics for CVFs to
                     20: # /etc/magic (see the dmsdos installation instructions) you can use a
                     21: # combination of file and grep (for example) for that purpose. I think this
                     22: # is a standard way. If you still prefer the older method (by calling the
                     23: # helper program cvftest) just compile cvftest ('make cvftest') and change 
                     24: # some lines below (I've commented out the two cvftest calls and placed a
                     25: # file command in the next line).
                     26: 
                     27: ###########################################################################
                     28: 
                     29: # where to find the different filesystem checker utilities
                     30: DMSDOSFSCK="dmsdosfsck"
                     31: DOSFSCK="dosfsck"
                     32: 
                     33: ARGS="$@"
                     34: FILE=""
                     35: ASK=n
                     36: 
                     37: while [ "$1" != "" ];
                     38: do
                     39:        case "$1" in
                     40:        -u)     shift
                     41:                shift ;;
                     42:        -d)     shift
                     43:                shift ;;
                     44:        -r)     ASK=y
                     45:                shift ;;
                     46:        -*)     shift ;;
                     47:        *)      FILE="$1" 
                     48:                shift ;;
                     49:        esac;
                     50: done
                     51: 
                     52: #echo "ARGS=$ARGS"
                     53: #echo "FILE=$FILE"
                     54: 
                     55: #if cvftest $FILE ;
                     56: if [ ! -z "`file $FILE | grep CVF`" ];
                     57: then
                     58:        echo "CVF detected, calling dmsdosfsck..."
                     59:        $DMSDOSFSCK $ARGS
                     60:        CODE="$?"
                     61: else
                     62:        echo "no CVF found, calling dosfsck..."
                     63:        $DOSFSCK $ARGS
                     64:        CODE="$?"
                     65:        if [ "$CODE" != "0" ];
                     66:        then
                     67:                exit $CODE
                     68:        fi
                     69:        if [ $ASK = y ];
                     70:        then
                     71:                echo -n "search $FILE for CVFs in it and check them, too?"
                     72:                read ANS JUNK
                     73:                if [ "$ANS" != "y" -a "$ANS" != "Y" ];
                     74:                then
                     75:                        exit 0
                     76:                fi
                     77:        fi
                     78:        mkdir /tmp/fsckwrap.$$
                     79:        if [ "$?" != "0" ];
                     80:        then
                     81:                echo "need write access to /tmp for automatic CVF check (skipped)"
                     82:                exit 0
                     83:        fi
                     84:        chmod 700 /tmp/fsckwrap.$$
                     85:        mount -t msdos $FILE /tmp/fsckwrap.$$
                     86:        if [ "$?" != "0" ];
                     87:        then
                     88:                echo "cannot search $FILE for CVFs in it (skipped)"
                     89:                exit 0
                     90:        fi
                     91: 
                     92:        CODE="0"
                     93:        FIRST=y
                     94:        for I in /tmp/fsckwrap.$$/dblspace.0?? /tmp/fsckwrap.$$/drvspace.0?? /tmp/fsckwrap.$$/stacvol.*
                     95:        do
                     96:                if [ -f $I ];
                     97:                then
                     98:                        #if cvftest $I ;
                     99:                        if [ ! -z "`file $I | grep CVF`" ];
                    100:                        then
                    101:                                if [ $FIRST = y ];
                    102:                                then
                    103:                                        echo "$FILE contains CVFs"
                    104:                                        FIRST=n
                    105:                                fi
                    106:                                echo -n "checking CVF "
                    107:                                basename $I
                    108:                                $DMSDOSFSCK $ARGS $I
                    109:                                if [ "$?" != "0" ];
                    110:                                then
                    111:                                        CODE="$?"
                    112:                                fi
                    113:                        fi
                    114:                fi
                    115:        done
                    116:        umount /tmp/fsckwrap.$$
                    117:        rmdir /tmp/fsckwrap.$$
                    118: fi
                    119: 
                    120: exit $CODE

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.