Avoid using awk in the zpool_id script.
authorDarik Horn <dajhorn@vanadac.com>
Fri, 30 Dec 2011 20:18:58 +0000 (14:18 -0600)
committerBrian Behlendorf <behlendorf1@llnl.gov>
Wed, 11 Jan 2012 19:56:56 +0000 (11:56 -0800)
Some implementations of `awk` incorrectly parse the \< and \> regex
symbols, so use a `while read` loop and regular globbing instead.

Signed-off-by: Brian Behlendorf <behlendorf1@llnl.gov>
Closes: #259

cmd/zpool_id/zpool_id

index c65b1b5..bf15dc9 100755 (executable)
@@ -1,7 +1,6 @@
 #!/bin/sh
 
 CONFIG="${CONFIG:-/etc/zfs/zdev.conf}"
-AWK="${AWK:-/usr/bin/awk}"
 
 if [ -z "${PATH_ID}" ]; then
        # The path_id helper became a builtin command in udev 174.
@@ -63,9 +62,19 @@ fi
 # configuration file which is of the format <device id> <key>.
 # Lines starting with #'s are treated as comments and ignored.
 # Exact matches are required, wild cards are not supported,
-# and only the first match is returned.  Also note the following
-# regex pattern only appears to work with gawk, not mawk or awk.
-ID_ZPOOL=`${AWK} "/\<${ID_PATH}\>/ && !/^#/ { print \\$1; exit }" "${CONFIG}"`
+# and only the first match is returned.
+ID_ZPOOL=''
+while read CONFIG_ZPOOL CONFIG_PATH REPLY; do
+       if [ "${CONFIG_ZPOOL}" != "${CONFIG_ZPOOL#\#}" ]; then
+               # Skip comment lines.
+               continue
+       fi
+       if [ "${CONFIG_PATH}" = "${ID_PATH}" ]; then
+               ID_ZPOOL="${CONFIG_ZPOOL}"
+               break
+       fi
+done <"${CONFIG}"
+
 [ -z "${ID_ZPOOL}" ] && die "Missing ID_ZPOOL for ID_PATH: ${ID_PATH}"
 
 if [ -n "${ID_ZPOOL}" ]; then