In some cases, exception happened, default handling is called. However,
user may not like the handling, want to specify a handler for these
exceptions.

Add an exception handle check function. Call it where exceptions happened,
and specify a extra special handler. If user want the special handler handles
this exception, related cmdline is added.

Then Dracut will check the cmdline, if related cmdline exists, call the
specified handler; if not, call the default handler.

The function can be called like below:
exception_handle_check -h continue_on_fail

Signed-off-by: Baoquan He <[email protected]>
---
 modules.d/99base/dracut-lib.sh |   40 ++++++++++++++++++++++++++++++++++++++++
 1 files changed, 40 insertions(+), 0 deletions(-)

diff --git a/modules.d/99base/dracut-lib.sh b/modules.d/99base/dracut-lib.sh
index cc6c7e8..35ed3a3 100755
--- a/modules.d/99base/dracut-lib.sh
+++ b/modules.d/99base/dracut-lib.sh
@@ -938,6 +938,46 @@ emergency_shell()
     [ -e /run/initramfs/.die ] && exit 1
 }
 
+exception_handle_check()
+{
+    local action_wanted
+    if [ "$1" = "-h" ]; then
+        [ $# -le 1 ] && echo "No exception handler specified" && 
emergency_shell
+        action_wanted=$2; 
+        case "$action_wanted" in
+        continue_on_fail)
+            ;;
+        reboot)
+            ;;
+        emergency_shell)
+            ;;
+        *)
+            echo "Wrong exception handler input: $action_wanted"
+            action_wanted=emergency_shell
+        esac
+    else
+        action_wanted=emergency_shell
+    fi
+
+    case "$action_wanted" in
+    continue_on_fail)
+        action=$(getarg rd.exceptionhandler=)
+        [ -z "$action" -o  "$action" != "continue_on_fail" ]  && 
emergency_shell
+        ;;
+    emergency_shell)
+        emergency_shell
+        ;;
+    reboot)
+        reboot -f
+        ;;
+    *) #default
+        ##impossible come here
+        ;;
+    esac
+
+    return 0
+}
+
 # Retain the values of these variables but ensure that they are unexported
 # This is a POSIX-compliant equivalent of bash's "export -n"
 export_n()
-- 
1.7.1

--
To unsubscribe from this list: send the line "unsubscribe initramfs" in
the body of a message to [email protected]
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to