diff options
Diffstat (limited to 'app/src/fil/libre/repwifiapp/helpers/RootCommand.java')
-rw-r--r-- | app/src/fil/libre/repwifiapp/helpers/RootCommand.java | 150 |
1 files changed, 67 insertions, 83 deletions
diff --git a/app/src/fil/libre/repwifiapp/helpers/RootCommand.java b/app/src/fil/libre/repwifiapp/helpers/RootCommand.java index bcb6d0f..9d9f7d3 100644 --- a/app/src/fil/libre/repwifiapp/helpers/RootCommand.java +++ b/app/src/fil/libre/repwifiapp/helpers/RootCommand.java @@ -19,91 +19,75 @@ // ******************************************************************** package fil.libre.repwifiapp.helpers; -import java.io.BufferedReader; + import java.io.DataOutputStream; import java.io.InputStream; -import java.io.InputStreamReader; - import fil.libre.repwifiapp.Commons; -public class RootCommand { - - private String _cmdOut = ""; - private String _cmdTxt = ""; - - public RootCommand(String commandText){ - this._cmdTxt = commandText; - } - - public int execute() throws Exception{ - return execute(0); - } - - public int execute(int sleepSecsAfterCmd) throws Exception{ - - Process su = Runtime.getRuntime().exec("su"); - - DataOutputStream stdin = new DataOutputStream(su.getOutputStream()); - InputStream os = su.getInputStream(); - BufferedReader stdOut = new BufferedReader(new InputStreamReader(os)); - InputStream es = su.getErrorStream(); - BufferedReader stdError = new BufferedReader(new InputStreamReader(es)); - - if ( this._cmdTxt != null ){ - - Utils.logDebug("SU:EXEC: " + this._cmdTxt); - - this._cmdTxt += " > " + Commons.getTempOutFile(); - - stdin.writeBytes(this._cmdTxt + "\n"); - stdin.flush(); - } - - /* if (sleepSecsAfterCmd > 0){ - Thread.sleep(sleepSecsAfterCmd * 1000); - }*/ - - StringBuilder sb = new StringBuilder(); - String s = null; - - while ( (es.available() > 0) && (s = stdError.readLine()) != null) { - sb.append(s + "\n"); - } - - while ( (os.available() > 0) && (s = stdOut.readLine()) != null) { - sb.append(s + "\n"); - } - - this._cmdOut = sb.toString(); - - stdin.writeBytes("exit\n"); - stdin.flush(); - - int res = su.waitFor(); - - Utils.logDebug("OUT: " + getOutput()); - - return res; - - } - - public String getOutput(){ - - String[] lastOut = Utils.readFileLines(Commons.getTempOutFile()); - if (lastOut == null){ - return this._cmdOut; - } - - String fout = ""; - - for (String s : lastOut){ - fout += s + "\n"; - } - - return fout; - - } - - - +public class RootCommand extends ShellCommand { + + public RootCommand(String commandText) { + super(commandText); + this._cmdTxt = commandText; + } + + @Override + public int execute() throws Exception { + + Process su = Runtime.getRuntime().exec("su"); + + DataOutputStream stdin = new DataOutputStream(su.getOutputStream()); + InputStream os = su.getInputStream(); + InputStream es = su.getErrorStream(); + + if (this._cmdTxt != null) { + + Utils.logDebug("SU:EXEC: " + this._cmdTxt); + + this._cmdTxt += " > " + Commons.getTempOutFile(); + + stdin.writeBytes(this._cmdTxt + "\n"); + stdin.flush(); + } + + StringBuilder sb = new StringBuilder(); + + sb.append(getStringFromStream(es)); + sb.append(getStringFromStream(os)); + + this._cmdOut = sb.toString(); + + stdin.writeBytes("exit\n"); + stdin.flush(); + + int res = su.waitFor(); + + // re-read the output, in case it was empty when first tried + sb.append(getStringFromStream(es)); + sb.append(getStringFromStream(os)); + + Utils.logDebug("OUT: " + getOutput()); + + return res; + + } + + @Override + public String getOutput() { + + String[] lastOut = Utils.readFileLines(Commons.getTempOutFile()); + if (lastOut == null) { + return this._cmdOut; + } + + String fout = ""; + + for (String s : lastOut) { + fout += s + "\n"; + } + + return fout; + + } + } |