]> git.zerfleddert.de Git - ms2-fixes/blobdiff - MS2Debounce/src/de/rmdir/ms2debounce/DebounceModuleHelper.java
better error-handling when executing commands as root
[ms2-fixes] / MS2Debounce / src / de / rmdir / ms2debounce / DebounceModuleHelper.java
index b5310d6b104609ce7eb22decc409d492bcc7b239..2ee55014884806f3637cc82527a6d0415015cd5d 100644 (file)
@@ -32,7 +32,7 @@ public class DebounceModuleHelper
                setActiveHigh(getSavedActiveHigh());
        }
 
-       public boolean loadModule() {
+       public boolean loadModule() throws NotRootedException,ShellException {
                if (!_loadModule())
                        return false;
 
@@ -41,18 +41,34 @@ public class DebounceModuleHelper
                return true;
        }
 
-       protected void runAsRoot(String command) throws java.io.IOException,java.lang.InterruptedException {
-               Process rootcmd = Runtime.getRuntime().exec(new String[]{"su","-c","sh"});
-               DataOutputStream sh = new DataOutputStream(rootcmd.getOutputStream());
-               sh.writeBytes(command + "\n");
-               sh.writeBytes("exit\n");
-               sh.flush();
-               sh.close();
+       protected void runAsRoot(String command) throws NotRootedException,ShellException {
+               Process rootcmd;
 
-               rootcmd.waitFor();
+               try {
+                       rootcmd = Runtime.getRuntime().exec(new String[]{"su","-c","sh"});
+               } catch (java.io.IOException e) {
+                       throw new NotRootedException();
+               }
+
+               try {
+                       DataOutputStream sh = new DataOutputStream(rootcmd.getOutputStream());
+                       sh.writeBytes(command + "\n");
+                       sh.writeBytes("exit\n");
+                       sh.flush();
+                       sh.close();
+               } catch (java.io.IOException e) {
+                       throw new ShellException();
+               }
+
+               try {
+                       if (rootcmd.waitFor() != 0)
+                               throw new ShellException();
+               } catch (java.lang.InterruptedException e) {
+                       throw new ShellException();
+               }
        }
 
-       public synchronized boolean _loadModule() {
+       public synchronized boolean _loadModule() throws NotRootedException,ShellException {
                File debounce_ko = new File(ctx.getFilesDir() + "/debounce.ko");
 
                extractModule();
@@ -64,11 +80,7 @@ public class DebounceModuleHelper
                        editor.commit();
                }
 
-               try {
-                       runAsRoot("/system/bin/insmod " + debounce_ko + " || /system/xbin/insmod " + debounce_ko);
-               } catch (Exception e) {
-                       return false;
-               }
+               runAsRoot("/system/bin/insmod " + debounce_ko + " || /system/xbin/insmod " + debounce_ko);
 
                if (!isLoaded()) {
                        return false;
@@ -85,14 +97,8 @@ public class DebounceModuleHelper
                return true;
        }
 
-       public synchronized boolean unloadModule() {
-               try {
-                       runAsRoot("/system/bin/rmmod debounce || /system/xbin/rmmod debounce");
-               } catch (Exception e) {
-                       return false;
-               }
-
-               return true;
+       public synchronized void unloadModule() throws NotRootedException,ShellException {
+               runAsRoot("/system/bin/rmmod debounce || /system/xbin/rmmod debounce");
        }
 
        public synchronized boolean isLoaded() {
@@ -148,8 +154,7 @@ public class DebounceModuleHelper
                        fbuf.write((new Integer(value)).toString());
 
                        fbuf.close();
-               } catch (Exception e) {
-               }
+               } catch (Exception e) {}
        }
 
        public synchronized int getDelay() {
Impressum, Datenschutz