summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
-rw-r--r--app/src/main/java/com/wireguard/android/util/RootShell.java23
1 files changed, 14 insertions, 9 deletions
diff --git a/app/src/main/java/com/wireguard/android/util/RootShell.java b/app/src/main/java/com/wireguard/android/util/RootShell.java
index 1e00020f..7fbafa33 100644
--- a/app/src/main/java/com/wireguard/android/util/RootShell.java
+++ b/app/src/main/java/com/wireguard/android/util/RootShell.java
@@ -123,18 +123,23 @@ public class RootShell {
}
public synchronized void start() throws IOException, NoRootException {
+ if (isRunning())
+ return;
+ if (!localBinaryDir.isDirectory() && !localBinaryDir.mkdirs())
+ throw new FileNotFoundException("Could not create local binary directory");
+ if (!localTemporaryDir.isDirectory() && !localTemporaryDir.mkdirs())
+ throw new FileNotFoundException("Could not create local temporary directory");
+ if (!isExecutableInPath(SU))
+ throw new NoRootException(deviceNotRootedMessage);
try {
- if (isRunning())
- return;
- if (!localBinaryDir.isDirectory() && !localBinaryDir.mkdirs())
- throw new FileNotFoundException("Could not create local binary directory");
- if (!localTemporaryDir.isDirectory() && !localTemporaryDir.mkdirs())
- throw new FileNotFoundException("Could not create local temporary directory");
- if (!isExecutableInPath(SU))
- throw new NoRootException(deviceNotRootedMessage);
final ProcessBuilder builder = new ProcessBuilder().command(SU);
builder.environment().put("LC_ALL", "C");
- process = builder.start();
+ try {
+ process = builder.start();
+ } catch (final IOException e) {
+ // A failure at this stage means the device isn't rooted.
+ throw new NoRootException(deviceNotRootedMessage, e);
+ }
stdin = new OutputStreamWriter(process.getOutputStream(), StandardCharsets.UTF_8);
stdout = new BufferedReader(new InputStreamReader(process.getInputStream(),
StandardCharsets.UTF_8));