From d6eb5e3511587780e0899cde43a7b0760bce4622 Mon Sep 17 00:00:00 2001 From: agnostic-apollo Date: Tue, 20 Apr 2021 12:39:54 +0500 Subject: [PATCH] Fix termux-reset The TMPDIR was being automatically cleared and recreated even if it didn't already exist when TermuxService was stopped. This left an empty TMPDIR in the PREFIX directory when termux-reset was run and on termux restart the bootstrap wasn't installed again because PREFIX directory already existed. This resulted in a broken environment since no binaries/libs existed under PREFIX and /system/bin/sh was loaded. This issue was created due to v0.109. --- app/src/main/java/com/termux/app/TermuxService.java | 2 +- .../src/main/java/com/termux/shared/shell/ShellUtils.java | 5 ++++- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/app/src/main/java/com/termux/app/TermuxService.java b/app/src/main/java/com/termux/app/TermuxService.java index 64ca3685..39c92023 100644 --- a/app/src/main/java/com/termux/app/TermuxService.java +++ b/app/src/main/java/com/termux/app/TermuxService.java @@ -157,7 +157,7 @@ public final class TermuxService extends Service implements TermuxTask.TermuxTas public void onDestroy() { Logger.logVerbose(LOG_TAG, "onDestroy"); - ShellUtils.clearTermuxTMPDIR(this); + ShellUtils.clearTermuxTMPDIR(this, true); actionReleaseWakeLock(false); if (!mWantsToStop) diff --git a/termux-shared/src/main/java/com/termux/shared/shell/ShellUtils.java b/termux-shared/src/main/java/com/termux/shared/shell/ShellUtils.java index af32758e..47ad08bb 100644 --- a/termux-shared/src/main/java/com/termux/shared/shell/ShellUtils.java +++ b/termux-shared/src/main/java/com/termux/shared/shell/ShellUtils.java @@ -150,7 +150,10 @@ public class ShellUtils { return (lastSlash == -1) ? executable : executable.substring(lastSlash + 1); } - public static void clearTermuxTMPDIR(Context context) { + public static void clearTermuxTMPDIR(Context context, boolean onlyIfExists) { + if(onlyIfExists && !FileUtils.directoryFileExists(TermuxConstants.TERMUX_TMP_PREFIX_DIR_PATH, false)) + return; + String errmsg; errmsg = FileUtils.clearDirectory(context, "$TMPDIR", FileUtils.getCanonicalPath(TermuxConstants.TERMUX_TMP_PREFIX_DIR_PATH, null, false)); if (errmsg != null) {