diff --git a/libraries/sharedCode/src/main/java/sharedcode/turboeditor/util/LinuxShell.java b/libraries/sharedCode/src/main/java/sharedcode/turboeditor/util/LinuxShell.java
index f9cfe8a..64a59e2 100644
--- a/libraries/sharedCode/src/main/java/sharedcode/turboeditor/util/LinuxShell.java
+++ b/libraries/sharedCode/src/main/java/sharedcode/turboeditor/util/LinuxShell.java
@@ -17,56 +17,46 @@
* along with this program. If not, see .
*/
-/**
- * 920 Text Editor is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * 920 Text Editor is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with 920 Text Editor. If not, see .
- */
-
package sharedcode.turboeditor.util;
import java.io.BufferedReader;
import java.io.DataOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+
+import android.util.Log;
public class LinuxShell {
- public static String getCmdPath(String path) {
- return path.replace(" ", "\\ ").replace("'", "\\'");
+
+ private static final String UNIX_ESCAPE_EXPRESSION = "(\\(|\\)|\\[|\\]|\\s|\'|\"|`|\\{|\\}|&|\\\\|\\?)";
+
+ public static String getCommandLineString(String input) {
+ return input.replaceAll(UNIX_ESCAPE_EXPRESSION, "\\\\$1");
}
- /**
- * 返回执行完��?的结果
- *
- * @param cmd 命令内容
- * @return
- */
public static BufferedReader execute(String cmd) {
- BufferedReader reader = null; //errReader = null;
+ BufferedReader reader = null;
try {
Process process = Runtime.getRuntime().exec("su");
- DataOutputStream os = new DataOutputStream(process.getOutputStream());
- //os.writeBytes("mount -oremount,rw /dev/block/mtdblock3 /system\n");
- //os.writeBytes("busybox cp /data/data/com.koushikdutta.superuser/su /system/bin/su\n");
+ DataOutputStream os = new DataOutputStream(
+ process.getOutputStream());
os.writeBytes(cmd + "\n");
os.writeBytes("exit\n");
- reader = new BufferedReader(new InputStreamReader(process.getInputStream()));
- String err = (new BufferedReader(new InputStreamReader(process.getErrorStream()))).readLine();
+ reader = new BufferedReader(new InputStreamReader(
+ process.getInputStream()));
+ String err = (new BufferedReader(new InputStreamReader(
+ process.getErrorStream()))).readLine();
os.flush();
- if (process.waitFor() != 0 || (!"".equals(err) && null != err)) {
+ if (process.waitFor() != 0 || (!"".equals(err) && null != err)
+ && containsIllegals(err) != true) {
+ Log.e("Root Error, cmd: " + cmd, err);
return null;
}
return reader;
+
} catch (IOException e) {
e.printStackTrace();
} catch (InterruptedException e) {
@@ -74,69 +64,14 @@ public class LinuxShell {
} catch (Exception e) {
e.printStackTrace();
}
-
return null;
}
-
- /*public static boolean isRoot()
- {
- boolean retval = false;
- Process suProcess;
-
- try
- {
- suProcess = Runtime.getRuntime().exec("su");
-
- DataOutputStream os =
- new DataOutputStream(suProcess.getOutputStream());
- DataInputStream osRes =
- new DataInputStream(suProcess.getInputStream());
-
- if (null != os && null != osRes)
- {
- // Getting the id of the current user to check if this is root
- os.writeBytes("id\n");
- os.flush();
- String currUid = osRes.readLine();
- boolean exitSu = false;
- if (null == currUid)
- {
- retval = false;
- exitSu = false;
- Log.e("ROOT", "Can't get root access or denied by user");
- }
- else if (true == currUid.contains("uid=0"))
- {
- retval = true;
- exitSu = true;
- }
- else
- {
- retval = false;
- exitSu = true;
- Log.e("ROOT", "Root access rejected: " + currUid);
- }
-
- if (exitSu)
- {
- os.writeBytes("exit\n");
- os.flush();
- }
- }
- }
- catch (Exception e)
- {
- // Can't get root !
- // Probably broken pipe exception on trying to write to output
- // stream after su failed, meaning that the device is not rooted
-
- retval = false;
- Log.d("ROOT", "Root access rejected [" +
- e.getClass().getName() + "] : " + e.getMessage());
- }
-
- return retval;
- }*/
+ public static boolean containsIllegals(String toExamine) {
+ // checks for "+" sign so the program doesn't throw an error when its
+ // not erroring.
+ Pattern pattern = Pattern.compile("[+]");
+ Matcher matcher = pattern.matcher(toExamine);
+ return matcher.find();
+ }
}
-
diff --git a/libraries/sharedCode/src/main/java/sharedcode/turboeditor/util/RootUtils.java b/libraries/sharedCode/src/main/java/sharedcode/turboeditor/util/RootUtils.java
index e60f59d..b1d7654 100644
--- a/libraries/sharedCode/src/main/java/sharedcode/turboeditor/util/RootUtils.java
+++ b/libraries/sharedCode/src/main/java/sharedcode/turboeditor/util/RootUtils.java
@@ -80,8 +80,7 @@ public class RootUtils {
} else {
BufferedReader reader = null; //errReader = null;
try {
-
- reader = LinuxShell.execute("IFS='\n';CURDIR='" + LinuxShell.getCmdPath(path) + "';for i in `ls $CURDIR`; do if [ -d $CURDIR/$i ]; then echo \"d $CURDIR/$i\";else echo \"f $CURDIR/$i\"; fi; done");
+ LinuxShell.execute("ls -a " + LinuxShell.getCommandLineString(path));
if (reader == null)
return null;