Changeset View
Changeset View
Standalone View
Standalone View
etc/autofs/special_media
- This file was added.
Property | Old Value | New Value |
---|---|---|
svn:executable | null | * \ No newline at end of property |
#!/bin/sh | |||||
# | |||||
# $FreeBSD$ | |||||
# | |||||
# Print newline-separated list of devices available for mounting. | |||||
# If there is a filesystem label - use it, otherwise use device name. | |||||
print_available() { | |||||
local _fstype _fstype_and_label _label _p | |||||
for _p in ${providers}; do | |||||
_fstype_and_label="$(fstyp -l "/dev/${_p}" 2> /dev/null)" | |||||
if [ $? -ne 0 ]; then | |||||
# Ignore devices for which we were unable | |||||
# to determine filesystem type. | |||||
continue | |||||
fi | |||||
emaste: Ugh. I'd make the comment a bit stronger with an XXX as you did below - e.g.
```
XXX this… | |||||
_fstype="${_fstype_and_label%% *}" | |||||
if [ "${_fstype}" != "${_fstype_and_label}" ]; then | |||||
_label="${_fstype_and_label#* }" | |||||
echo "${_label}" | |||||
continue | |||||
fi | |||||
echo "${_p}" | |||||
done | |||||
} | |||||
# Print a single map entry. | |||||
print_one() { | |||||
local _fstype _fstype_and_label _label _key _p | |||||
_key="$1" | |||||
Not Done Inline Actionscan you expand on the comment emaste: can you expand on the comment | |||||
_fstype="$(fstyp "/dev/${_key}" 2> /dev/null)" | |||||
if [ $? -eq 0 ]; then | |||||
echo "-fstype=${_fstype},nosuid :/dev/${_key}" | |||||
return | |||||
fi | |||||
for _p in ${providers}; do | |||||
_fstype_and_label="$(fstyp -l "/dev/${_p}" 2> /dev/null)" | |||||
if [ $? -ne 0 ]; then | |||||
# Ignore devices for which we were unable | |||||
# to determine filesystem type. | |||||
continue | |||||
fi | |||||
_fstype="${_fstype_and_label%% *}" | |||||
if [ "${_fstype}" = "${_fstype_and_label}" ]; then | |||||
# No label, try another device. | |||||
continue | |||||
fi | |||||
_label="${_fstype_and_label#* }" | |||||
if [ "${_label}" != "${_key}" ]; then | |||||
# Labels don't match, try another device. | |||||
continue | |||||
fi | |||||
echo "-fstype=${_fstype},nosuid :/dev/${_p}" | |||||
done | |||||
# No matching device - don't print anything, autofs will handle it. | |||||
} | |||||
# Obtain a list of (geom-provider-name, access-count) pairs, turning this: | |||||
# | |||||
# z0xfffff80005085d00 [shape=hexagon,label="ada0\nr2w2e3\nerr#0\nsector=512\nstripe=0"]; | |||||
# | |||||
# Into this: | |||||
# | |||||
# ada0 r2w2e3 | |||||
# | |||||
# XXX: It would be easier to use kern.geom.conftxt instead, but it lacks | |||||
# access counts. | |||||
pairs=$(sysctl kern.geom.confdot | sed -n 's/^.*hexagon,label="\([^\]*\)\\n\([^\]*\).*/\1 \2/p') | |||||
# Obtain a list of GEOM providers that are not already open - not mounted, | |||||
# and without other GEOM class, such as gpart, attached. In other words, | |||||
# grep for "r0w0e0". Skip providers with names containing slashes; we're | |||||
# not interested in geom_label(4) creations. | |||||
providers=$(echo "$pairs" | awk '$2 == "r0w0e0" && $1 !~ /\// { print $1 }') | |||||
if [ $# -eq 0 ]; then | |||||
print_available | |||||
exit 0 | |||||
fi | |||||
print_one "$1" | |||||
exit 0 | |||||
Ugh. I'd make the comment a bit stronger with an XXX as you did below - e.g.
Looking for hexagon in the dot output makes me feel really icky.
That said, you could simplify slightly with
i.e. -n and /p modifier