| 1 | #!/bin/sh | 
 
 
 
 
 | 2 | # | 
 
 
 
 
 | 3 | # File: umount | 
 
 
 
 
 | 4 | # $Id: umount,v 1.2 2010/03/24 21:28:30 keithmarshall Exp $ | 
 
 
 
 
 | 5 | # | 
 
 
 
 
 | 6 | # ===================================================================== | 
 
 
 
 
 | 7 | # | 
 
 
 
 
 | 8 | # Copyright (C) 2006, 2007, 2009 by Keith Marshall | 
 
 
 
 
 | 9 | #  mailto:keithmarshall@users.sourceforge.net | 
 
 
 
 
 | 10 | # | 
 
 
 
 
 | 11 | # This file is part of MSYS | 
 
 
 
 
 | 12 | #  http://www.mingw.org/msys.shtml | 
 
 
 
 
 | 13 | # | 
 
 
 
 
 | 14 | # 2009-04-06: First published implementation for MSYS-1.0.11 | 
 
 
 
 
 | 15 | # | 
 
 
 
 
 | 16 | # MSYS is free software.  It is provided "as is", in the hope that it | 
 
 
 
 
 | 17 | # may be useful; there is NO WARRANTY OF ANY KIND, not even an implied | 
 
 
 
 
 | 18 | # warranty of MERCHANTABILITY or FITNESS FOR ANY PARTICULAR PURPOSE. | 
 
 
 
 
 | 19 | # At no time will the author accept liability for damages, however | 
 
 
 
 
 | 20 | # caused, resulting from the use of this software. | 
 
 
 
 
 | 21 | # | 
 
 
 
 
 | 22 | # Permission is granted to copy and redistribute this software, either | 
 
 
 
 
 | 23 | # as is, or in modified form, provided that:-- | 
 
 
 
 
 | 24 | # | 
 
 
 
 
 | 25 | #   1) All such copies are distributed with the same rights | 
 
 
 
 
 | 26 | #      of redistribution. | 
 
 
 
 
 | 27 | # | 
 
 
 
 
 | 28 | #   2) The preceding disclaimer of warranty and liabality is | 
 
 
 
 
 | 29 | #      retained verbatim, in all copies. | 
 
 
 
 
 | 30 | # | 
 
 
 
 
 | 31 | #   3) Accreditation of the original author remains in place. | 
 
 
 
 
 | 32 | # | 
 
 
 
 
 | 33 | #   4) Modified copies are clearly identified as such, with | 
 
 
 
 
 | 34 | #      additional accreditation given to the authors of each | 
 
 
 
 
 | 35 | #      modified version. | 
 
 
 
 
 | 36 | # | 
 
 
 
 
 | 37 | # ===================================================================== | 
 
 
 
 
 | 38 | # | 
 
 
 
 
 | 39 | # Exactly one argument is required... | 
 
 
 
 
 | 40 | # | 
 
 
 
 
 | 41 | if test $# -eq 1 | 
 
 
 
 
 | 42 | then | 
 
 
 
 
 | 43 | # | 
 
 
 
 
 | 44 | #   Normally, it specifies the mount point to be released, | 
 
 
 
 
 | 45 | #   but it may also represent a mounted directory path name, | 
 
 
 
 
 | 46 | #   for which all bound mount points are to be filtered out | 
 
 
 
 
 | 47 | #   of the "mount table" file. | 
 
 
 
 
 | 48 | # | 
 
 
 
 
 | 49 | MNTPATH=`echo "$1" | tr '\\\\' /` | 
 
 
 
 
 | 50 | TMPFILE=${TMPDIR-"/tmp"}/mnttab$$.tmp | 
 
 
 
 
 | 51 | MNTTAB=${MNTTAB-"/etc/fstab"} | 
 
 
 
 
 | 52 | # | 
 
 
 
 
 | 53 | if cat "$MNTTAB" | tr '\\' / | awk ' | 
 
 
 
 
 | 54 | # | 
 
 
 
 
 | 55 | #     Copy the "mount table" to a temporary file, filtering | 
 
 
 
 
 | 56 | #     out all active mount point records which match MNTPATH, | 
 
 
 
 
 | 57 | #     (the specified argument); set exit status to:-- | 
 
 
 
 
 | 58 | #       0: if at least one mount point is matched; | 
 
 
 
 
 | 59 | #       1: if no match is found. | 
 
 
 
 
 | 60 | # | 
 
 
 
 
 | 61 | BEGIN { status = 1 } | 
 
 
 
 
 | 62 | { keep = $0 } | 
 
 
 
 
 | 63 | /^#/ { print; keep = "no"; $0 = "!'$MNTPATH'" } | 
 
 
 
 
 | 64 | $2 == "'$MNTPATH'" { keep = "no"; status = 0 } | 
 
 
 
 
 | 65 | { $2 = "!" } $0 == "'$MNTPATH' !" { keep = "no"; status = 0 } | 
 
 
 
 
 | 66 | keep != "no" { print keep } | 
 
 
 
 
 | 67 | END { exit status }' > "$TMPFILE" | 
 
 
 
 
 | 68 | then | 
 
 
 
 
 | 69 | # | 
 
 
 
 
 | 70 | #     At least one mount point was selected to release... | 
 
 
 
 
 | 71 | #     Replace the active "mount table" file with the regenerated | 
 
 
 
 
 | 72 | #     copy, so completing the operation. | 
 
 
 
 
 | 73 | # | 
 
 
 
 
 | 74 | cp "$TMPFILE" "$MNTTAB" | 
 
 
 
 
 | 75 | rm -f "$TMPFILE" | 
 
 
 
 
 | 76 | # | 
 
 
 
 
 | 77 | else | 
 
 
 
 
 | 78 | # | 
 
 
 
 
 | 79 | #     No active mount point matched the specified argument... | 
 
 
 
 
 | 80 | #     Discard the temporary file, complain, and bail out. | 
 
 
 
 
 | 81 | # | 
 
 
 
 
 | 82 | rm -f "$TMPFILE" | 
 
 
 
 
 | 83 | echo >&2 "$0: '$1' is not mounted" | 
 
 
 
 
 | 84 | exit 1 | 
 
 
 
 
 | 85 | fi | 
 
 
 
 
 | 86 | # | 
 
 
 
 
 | 87 | else | 
 
 
 
 
 | 88 | # | 
 
 
 
 
 | 89 | #   The command line did not specify exactly one argument... | 
 
 
 
 
 | 90 | #   Complain, and bail out. | 
 
 
 
 
 | 91 | # | 
 
 
 
 
 | 92 | echo >&2 "$0: incorrect number of arguments" | 
 
 
 
 
 | 93 | echo >&2 "usage: umount <path>" | 
 
 
 
 
 | 94 | exit 2 | 
 
 
 
 
 | 95 | fi | 
 
 
 
 
 | 96 | # | 
 
 
 
 
 | 97 | # On successful completion, ensure we set the exit status appropriately. | 
 
 
 
 
 | 98 | # | 
 
 
 
 
 | 99 | exit 0 | 
 
 
 
 
 | 100 | # | 
 
 
 
 
 | 101 | # $RCSfile: umount,v $: end of file |