| 1 |
#!/bin/sh |
| 2 |
# |
| 3 |
# File: mount |
| 4 |
# $Id: mount,v 1.2 2010/03/24 21:28:27 keithmarshall Exp $ |
| 5 |
# |
| 6 |
# ===================================================================== |
| 7 |
# |
| 8 |
# Copyright (C) 2006, 2007, 2009, 2010 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 |
# 2010-03-24: Updated for MSYS-1.0.14: --replace option added |
| 16 |
# |
| 17 |
# MSYS is free software. It is provided "as is", in the hope that it |
| 18 |
# may be useful; there is NO WARRANTY OF ANY KIND, not even an implied |
| 19 |
# warranty of MERCHANTABILITY or FITNESS FOR ANY PARTICULAR PURPOSE. |
| 20 |
# At no time will the author accept liability for damages, however |
| 21 |
# caused, resulting from the use of this software. |
| 22 |
# |
| 23 |
# Permission is granted to copy and redistribute this software, either |
| 24 |
# as is, or in modified form, provided that:-- |
| 25 |
# |
| 26 |
# 1) All such copies are distributed with the same rights |
| 27 |
# of redistribution. |
| 28 |
# |
| 29 |
# 2) The preceding disclaimer of warranty and liabality is |
| 30 |
# retained verbatim, in all copies. |
| 31 |
# |
| 32 |
# 3) Accreditation of the original author remains in place. |
| 33 |
# |
| 34 |
# 4) Modified copies are clearly identified as such, with |
| 35 |
# additional accreditation given to the authors of each |
| 36 |
# modified version. |
| 37 |
# |
| 38 |
# ===================================================================== |
| 39 |
# |
| 40 |
# |
| 41 |
# Ensure the the `fstab' mount registry exists, and is writeable. |
| 42 |
# |
| 43 |
>> ${MNTTAB="/etc/fstab"} |
| 44 |
# |
| 45 |
# Check for '--replace' option, so we can honour requests to reassign |
| 46 |
# an existing mount table entry. |
| 47 |
# |
| 48 |
case $1 in |
| 49 |
--replace | --replac | --repla | --repl) shift ; replace=yes ;; |
| 50 |
*) replace=no ;; |
| 51 |
esac |
| 52 |
# |
| 53 |
# Select the operation to be performed, based on number of argumemnts. |
| 54 |
# |
| 55 |
case $# in |
| 56 |
0) |
| 57 |
# |
| 58 |
# No arguments specified... |
| 59 |
# Simply report the current state of the mount table. |
| 60 |
# |
| 61 |
/bin/msysmnt.exe ;; |
| 62 |
# |
| 63 |
1) |
| 64 |
# |
| 65 |
# One argument specified... |
| 66 |
# Check for any pre-existing mount which may conflict; if none, |
| 67 |
# try to match it to a default mount specification from the `fstab' |
| 68 |
# configuration file, and mount the specified directory, if any, |
| 69 |
# on its associated mount point. |
| 70 |
# |
| 71 |
FSTAB=${FSTAB-"$MNTTAB.conf"} |
| 72 |
MNTPATH=`echo "$1" | tr '\\\\' /` |
| 73 |
# |
| 74 |
if cat $MNTTAB | tr '\\' / | awk ' |
| 75 |
# |
| 76 |
# Check for pre-existing mount of specified argument; |
| 77 |
# set exit status to:-- |
| 78 |
# 0: if no such mount exists; |
| 79 |
# 1: if argument is an already mounted directory; |
| 80 |
# 2: if argument is a mount point already in use. |
| 81 |
# |
| 82 |
BEGIN { status = 0 } |
| 83 |
/^#/ { $0 = "" } |
| 84 |
$1 == "'$MNTPATH'" { status = 1 } |
| 85 |
$2 == "'$MNTPATH'" { status = 2 } |
| 86 |
END { exit status }' |
| 87 |
then |
| 88 |
# |
| 89 |
# No pre-existing mount conflicts... |
| 90 |
# |
| 91 |
if WINPATH=`cat 2>/dev/null $FSTAB | tr '\\' / | awk ' |
| 92 |
# |
| 93 |
# Look up the default mount point specification; |
| 94 |
# set exit status, (assigned to "errno"), to:-- |
| 95 |
# 0: if found; (it is assigned to WINPATH); |
| 96 |
# 1: if found, but multiply and ambiguously defined; |
| 97 |
# 2: if not found. |
| 98 |
# |
| 99 |
BEGIN { status = 0; mount = "" } |
| 100 |
/^#/ { $0 = "" } |
| 101 |
$1 == "'$MNTPATH'" { |
| 102 |
if( mount == "" ) mount = $0 |
| 103 |
else if( mount != $0 ) status = 1 |
| 104 |
} |
| 105 |
$2 == "'$MNTPATH'" { |
| 106 |
if( mount == "" ) mount = $0 |
| 107 |
else if( mount != $0 ) status = 1 |
| 108 |
} |
| 109 |
END { |
| 110 |
if( mount == "" ) exit 2 |
| 111 |
print mount |
| 112 |
exit status |
| 113 |
}'` errno=$? |
| 114 |
then |
| 115 |
# |
| 116 |
# Found a default mount specification; activate it. |
| 117 |
# |
| 118 |
echo $WINPATH >> $MNTTAB |
| 119 |
# |
| 120 |
elif test -f $FSTAB && test -r $FSTAB |
| 121 |
then |
| 122 |
# |
| 123 |
# Read the configuration file, but could not find |
| 124 |
# a mount specification matching the argument. |
| 125 |
# |
| 126 |
case $errno in |
| 127 |
1) echo >&2 "$0: $FSTAB: ambiguous reference for $MNTPATH" ;; |
| 128 |
2) echo >&2 "$0: $FSTAB: no mount specification for $MNTPATH" ;; |
| 129 |
esac |
| 130 |
# |
| 131 |
elif test -f $FSTAB |
| 132 |
then |
| 133 |
# |
| 134 |
# Found the configuration file, but could not read it. |
| 135 |
# |
| 136 |
echo >&2 "$0: $FSTAB: cannot read configuration file" |
| 137 |
# |
| 138 |
else |
| 139 |
# |
| 140 |
# Could not find the configuration file. |
| 141 |
# |
| 142 |
echo >&2 "$0: $FSTAB: configuration file not found" |
| 143 |
fi |
| 144 |
# |
| 145 |
elif test x"$replace" = xyes |
| 146 |
then |
| 147 |
# |
| 148 |
# Found a conflicting active mount, |
| 149 |
# but the 'replace' option WAS specified... |
| 150 |
# Tear it down, and remount. |
| 151 |
# |
| 152 |
umount $MNTPATH |
| 153 |
mount $MNTPATH |
| 154 |
exit $? |
| 155 |
# |
| 156 |
else |
| 157 |
# |
| 158 |
# Found a conflicting active mount, |
| 159 |
# and the 'replace' option was NOT specified... |
| 160 |
# Display an appropriate diagnostic message, depending on |
| 161 |
# whether the argument represented a directory path name, |
| 162 |
# or a mount point, and bail out. |
| 163 |
# |
| 164 |
case $? in |
| 165 |
1) echo >&2 "$0: '$MNTPATH' is already mounted" ;; |
| 166 |
2) echo >&2 "$0: mount point '$MNTPATH' is already in use" ;; |
| 167 |
esac |
| 168 |
exit 1 |
| 169 |
fi ;; |
| 170 |
# |
| 171 |
2) |
| 172 |
# |
| 173 |
# Two arguments specified... |
| 174 |
# First is directory path name, second is mount point. |
| 175 |
# |
| 176 |
WINPATH=`echo "$1" | tr '\\\\' /` |
| 177 |
MNTPATH=`echo "$2" | tr '\\\\' /` |
| 178 |
# |
| 179 |
if cat $MNTTAB | tr '\\' / | awk ' |
| 180 |
# |
| 181 |
# Check that the mount point is not already in use; |
| 182 |
# set exit status to:-- |
| 183 |
# 0: if no existing mount table entry matches; |
| 184 |
# 1: if mount point already in mount table. |
| 185 |
# |
| 186 |
BEGIN { status = 0 } |
| 187 |
/^#/ { $0 = "" } |
| 188 |
$2 == "'$MNTPATH'" { status = 1 } |
| 189 |
END { exit status }' |
| 190 |
then |
| 191 |
# |
| 192 |
# Mount point not yet assigned... |
| 193 |
# Update the mount table, to include the new specification. |
| 194 |
# |
| 195 |
echo -e "$WINPATH\t$MNTPATH" >> "$MNTTAB" |
| 196 |
# |
| 197 |
elif test x"$replace" = xyes |
| 198 |
then |
| 199 |
# |
| 200 |
# The mount point is already in use, |
| 201 |
# but the 'replace' option WAS specified... |
| 202 |
# Tear it down, and remount. |
| 203 |
# |
| 204 |
umount $MNTPATH |
| 205 |
echo -e "$WINPATH\t$MNTPATH" >> "$MNTTAB" |
| 206 |
# |
| 207 |
else |
| 208 |
# |
| 209 |
# Mount point is already in use, |
| 210 |
# and the 'replace' option was NOT specified... |
| 211 |
# Diagnose, and bail out. |
| 212 |
# |
| 213 |
echo >&2 "$0: mount point '$MNTPATH' is already in use" |
| 214 |
exit 1 |
| 215 |
fi ;; |
| 216 |
# |
| 217 |
*) |
| 218 |
# |
| 219 |
# More than two arguments specified... |
| 220 |
# Complain, and bail out. |
| 221 |
# |
| 222 |
echo >&2 "$0: incorrect number of arguments" |
| 223 |
echo >&2 "usage: mount [--replace] [<win32path> <msyspath>]" |
| 224 |
exit 2 ;; |
| 225 |
esac |
| 226 |
# |
| 227 |
# On successful completion, ensure we set the exit status appropriately. |
| 228 |
# |
| 229 |
exit 0 |
| 230 |
# |
| 231 |
# $RCSfile: mount,v $: end of file |