Imported Upstream version 2.4.5
[debian/amanda] / changer-src / chg-zd-mtx.sh.in
index 6cf5b18bbdbc87eb6ae4afb4a2ecae7d9667997c..1064eb0b66dd2495741eec7edc69076d8f433f10 100644 (file)
@@ -447,39 +447,82 @@ get_loaded_info() {
        get_mtx_status
 
        set x `sed -n '
-/^Data Transfer Element:Empty/                         {
+/^Data Transfer Element:Empty/                          {
     s/.*/-1/p
     q
 }
-/^Data Transfer Element '$driveslot':Empty/            {
+/^Data Transfer Element '$driveslot':Empty/             {
     s/.*/-1/p
     q
 }
-/^Data Transfer Element:Full.*:VolumeTag/              {
-    s/.*(Storage Element \([0-9][0-9]*\) Loaded):VolumeTag *= *\([^    ]*\)/\1 \2/p
+/^Data Transfer Element:Full (Storage Element \([0-9][0-9]*\) Loaded):VolumeTag *= *\([^     ]*\)/               {
+    s/.*(Storage Element \([0-9][0-9]*\) Loaded):VolumeTag *= *\([^     ]*\)/\1 \2/p
     q
 }
-/^Data Transfer Element '$driveslot':Full.*:VolumeTag/ {
-    s/.*(Storage Element \([0-9][0-9]*\) Loaded):VolumeTag *= *\([^    ]*\)/\1 \2/p
+/^Data Transfer Element '$driveslot':Full (Storage Element \([0-9][0-9]*\) Loaded):VolumeTag *= *\([^     ]*\)/  {
+    s/.*(Storage Element \([0-9][0-9]*\) Loaded):VolumeTag *= *\([^     ]*\)/\1 \2/p
     q
 }
-/^Data Transfer Element:Full/                          {
-    s/.*(Storage Element \([0-9][0-9]*\) Loaded)\(.*\)/\1/p
+/^Data Transfer Element '$driveslot':Full (Unknown Storage Element Loaded):VolumeTag *= *\([^     ]*\)/        {
+    s/.*:VolumeTag *= *\([^     ]*\)/-2 \1/p
     q
 }
-/^Data Transfer Element '$driveslot':Full/             {
-    s/.*(Storage Element \([0-9][0-9]*\) Loaded)\(.*\)/\1/p
+/^Data Transfer Element:Full (Storage Element \([0-9][0-9]*\) Loaded)/                           {
+    s/.*(Storage Element \([0-9][0-9]*\) Loaded).*/\1/p
+    q
+}
+/^Data Transfer Element '$driveslot':Full (Storage Element \([0-9][0-9]*\) Loaded)/              {
+    s/.*Storage Element \([0-9][0-9]*\) Loaded.*/\1/p
+    q
+}
+/^Data Transfer Element '$driveslot':Full (Unknown Storage Element Loaded)/    {
+    s/.*/-2/p
     q
 }
 ' < $mtx_status 2>&1`
        shift                                   # get rid of the "x"
        loadedslot=$1
        loadedbarcode=$2
-
        if [ -z "$loadedslot" ]; then
                Exit 2 "<none>" "could not determine current slot, are you sure your drive slot is $driveslot"
                return $?                       # in case we are internal
        fi
+
+       #Use the current slot if it's empty and we don't know which slot is loaded'
+       if [ $loadedslot -eq -2 ]; then
+               set x `sed -n '
+{
+    /^.*Storage Element '$currentslot':Empty/ {
+       s/.*Storage Element \([0-9][0-9]*\):Empty/\1/p
+        q
+    }
+    /^.*Storage Element '$currentslot':Full/ {
+       s/.*Storage Element \([0-9][0-9]*\):Full/-2/p
+        q
+    }
+}
+' < $mtx_status 2>& 1`
+               shift                           # get rid of the "x"
+               loadedslotx=$1
+               if [ ! -z $loadedslotx ]; then
+                       loadedslot=$loadedslotx
+               fi
+       fi
+
+       #Use the first empty slot if we don't know which slot is loaded'
+       if [ $loadedslot -eq -2 ]; then
+               set x `sed -n '
+{
+    /^.*Storage Element \([0-9][0-9]*\):Empty/ {
+       s/.*Storage Element \([0-9][0-9]*\):Empty/\1/p
+        q
+    }
+}
+' < $mtx_status 2>& 1`
+               shift                           # get rid of the "x"
+               loadedslot=$1
+       fi
+
        if IsNumeric "$loadedslot" ; then
                :
        else
@@ -506,14 +549,25 @@ get_slot_list() {
        fi
        get_mtx_status
        slot_list=`sed -n '
-/^Data Transfer Element:Full/                          {
-    s/.*(Storage Element \([0-9][0-9]*\) Loaded)\(.*\)/\1/p
+/^Data Transfer Element:Full (Storage Element \([0-9][0-9]*\) Loaded)/ {
+    s/.*(Storage Element \([0-9][0-9]*\) Loaded).*/\1/p
 }
-/^Data Transfer Element '$driveslot':Full/             {
-    s/.*(Storage Element \([0-9][0-9]*\) Loaded)\(.*\)/\1/p
+/^Data Transfer Element '$driveslot':Full (Storage Element \([0-9][0-9]*\) Loaded)/ {
+    s/.*Storage Element \([0-9][0-9]*\) Loaded.*/\1/p
 }
-/^[    ]*Storage Element \([0-9][0-9]*\):Full/         {
-    s/.*Storage Element \([0-9][0-9]*\):.*/\1/p
+/^Data Transfer Element '$driveslot':Full (Unknown Storage Element Loaded)/ {
+    : loop
+    n
+    /^.*Storage Element \([0-9][0-9]*\):Full/ {
+        s/.*Storage Element \([0-9][0-9]*\):Full.*/\1/p
+        b loop
+    }
+    /^.*Storage Element \([0-9][0-9]*\):Empty/ {
+       s/.*Storage Element \([0-9][0-9]*\):Empty/\1/p
+    }
+}
+/^.*Storage Element \([0-9][0-9]*\):Full/ {
+    s/.*Storage Element \([0-9][0-9]*\):Full.*/\1/p
 }
 ' < $mtx_status 2>&1 | grep -v "^${cleanslot}\$" | sort -n`
        slot_list=`echo $slot_list`             # remove the newlines
@@ -946,6 +1000,10 @@ loadslot() {
                Exit 0 "$loadedslot" "$tape"
                return $?                       # in case we are internal
        fi
+       if [ $loadedslot -eq -2 ]; then
+               Exit 0 "$loadedslot" "$tape"
+               return $?                       # in case we are internal
+        fi
 
        # If we are loading the cleaning tape, bump the cleaning count
        # and reset the access count.  Otherwise, bump the access count