From 3bbe47e1d721ba4f299485ebfe5179a8e409ce93 Mon Sep 17 00:00:00 2001 From: RohitKushvaha01 Date: Sat, 4 Oct 2025 11:55:13 +0530 Subject: [PATCH] fix: rm command --- package-lock.json | 7 +---- package.json | 8 ++--- .../android/com/foxdebug/system/System.java | 18 ++++++++++-- src/plugins/system/www/plugin.js | 7 +++++ src/plugins/terminal/plugin.xml | 7 +++-- src/plugins/terminal/scripts/rm-wrapper.sh | 29 +++++++++++++++++++ src/plugins/terminal/www/Terminal.js | 18 ++++++++++++ 7 files changed, 79 insertions(+), 15 deletions(-) create mode 100644 src/plugins/terminal/scripts/rm-wrapper.sh diff --git a/package-lock.json b/package-lock.json index f2d00d40d..e4198e049 100644 --- a/package-lock.json +++ b/package-lock.json @@ -54,7 +54,6 @@ "@types/url-parse": "^1.4.11", "autoprefixer": "^10.4.21", "babel-loader": "^10.0.0", - "com.foxdebug.acode.rk.exec.proot": "file:src/plugins/proot", "com.foxdebug.acode.rk.exec.terminal": "file:src/plugins/terminal", "cordova-android": "^14.0.1", "cordova-clipboard": "^1.3.0", @@ -4335,10 +4334,6 @@ "dev": true, "license": "MIT" }, - "node_modules/com.foxdebug.acode.rk.exec.proot": { - "resolved": "src/plugins/proot", - "link": true - }, "node_modules/com.foxdebug.acode.rk.exec.terminal": { "resolved": "src/plugins/terminal", "link": true @@ -11207,7 +11202,7 @@ "src/plugins/proot": { "name": "com.foxdebug.acode.rk.exec.proot", "version": "1.0.0", - "dev": true, + "extraneous": true, "license": "MIT" }, "src/plugins/sdcard": { diff --git a/package.json b/package.json index 741b987c6..d6ef79942 100644 --- a/package.json +++ b/package.json @@ -34,11 +34,10 @@ }, "cordova-plugin-websocket": {}, "cordova-plugin-buildinfo": {}, - "cordova-plugin-system": {}, "cordova-plugin-browser": {}, - "com.foxdebug.acode.rk.exec.terminal": {}, - "com.foxdebug.acode.rk.exec.proot": {}, - "cordova-plugin-sftp": {} + "cordova-plugin-sftp": {}, + "cordova-plugin-system": {}, + "com.foxdebug.acode.rk.exec.terminal": {} }, "platforms": [ "android" @@ -63,7 +62,6 @@ "@types/url-parse": "^1.4.11", "autoprefixer": "^10.4.21", "babel-loader": "^10.0.0", - "com.foxdebug.acode.rk.exec.proot": "file:src/plugins/proot", "com.foxdebug.acode.rk.exec.terminal": "file:src/plugins/terminal", "cordova-android": "^14.0.1", "cordova-clipboard": "^1.3.0", diff --git a/src/plugins/system/android/com/foxdebug/system/System.java b/src/plugins/system/android/com/foxdebug/system/System.java index 861032524..daff3eb66 100644 --- a/src/plugins/system/android/com/foxdebug/system/System.java +++ b/src/plugins/system/android/com/foxdebug/system/System.java @@ -315,12 +315,26 @@ public void run() { return true; case "mkdirs": - File file = new File(args.getString(0)); - if (file.mkdirs()) { + if (new File(args.getString(0)).mkdirs()) { callbackContext.success(); } else { callbackContext.error("mkdirs failed"); } + return true; + case "deleteFile": + if (new File(args.getString(0)).delete()) { + callbackContext.success(); + } else { + callbackContext.error("delete failed"); + } + return true; + case "setExec": + if (new File(args.getString(0)).setExecutable(Boolean.parseBoolean(args.getString(1)))) { + callbackContext.success(); + } else { + callbackContext.error("set exec faild"); + } + return true; default: return false; diff --git a/src/plugins/system/www/plugin.js b/src/plugins/system/www/plugin.js index 7f02d67be..d63af6ddc 100644 --- a/src/plugins/system/www/plugin.js +++ b/src/plugins/system/www/plugin.js @@ -21,6 +21,13 @@ module.exports = { writeText: function (path, content, success, error) { cordova.exec(success, error, 'System', 'writeText', [path, content]); }, + deleteFile: function (path, success, error) { + cordova.exec(success, error, 'System', 'deleteFile', [path]); + }, + setExec: function (path, executable, success, error) { + cordova.exec(success, error, 'System', 'setExec', [path, String(executable)]); + }, + getNativeLibraryPath: function (success, error) { cordova.exec(success, error, 'System', 'getNativeLibraryPath', []); diff --git a/src/plugins/terminal/plugin.xml b/src/plugins/terminal/plugin.xml index f6e159ccd..fbde6010f 100644 --- a/src/plugins/terminal/plugin.xml +++ b/src/plugins/terminal/plugin.xml @@ -26,8 +26,8 @@ + - - + + + + \ No newline at end of file diff --git a/src/plugins/terminal/scripts/rm-wrapper.sh b/src/plugins/terminal/scripts/rm-wrapper.sh new file mode 100644 index 000000000..8058e56c4 --- /dev/null +++ b/src/plugins/terminal/scripts/rm-wrapper.sh @@ -0,0 +1,29 @@ +#!/bin/sh + +unlink_recursive() { + path="$1" + + # Try to recurse into it as a directory first + for entry in "$path"/* "$path"/.[!.]* "$path"/..?*; do + case "$entry" in + *'*'*|*'?'*) continue ;; + esac + unlink_recursive "$entry" + done 2>/dev/null + + # Then try to remove the path itself + if rmdir "$path" 2>/dev/null; then + : + elif unlink "$path" 2>/dev/null; then + : + else + : + fi +} + +for target in "$@"; do + echo "Unlinking broken symlinks..." + unlink_recursive "$target" +done + +busybox rm "$@" \ No newline at end of file diff --git a/src/plugins/terminal/www/Terminal.js b/src/plugins/terminal/www/Terminal.js index cf05ddb8b..279cefbf6 100644 --- a/src/plugins/terminal/www/Terminal.js +++ b/src/plugins/terminal/www/Terminal.js @@ -19,6 +19,12 @@ const Terminal = { system.writeText(`${filesDir}/init-alpine.sh`, content, logger, err_logger); }); + readAsset("rm-wrapper.sh", async (content) => { + system.deleteFile(`${filesDir}/alpine/bin/rm`, logger, err_logger); + system.writeText(`${filesDir}/alpine/bin/rm`, content, logger, err_logger); + system.setExec(`${filesDir}/alpine/bin/rm`, true, logger, err_logger); + }); + readAsset("init-sandbox.sh", (content) => { system.writeText(`${filesDir}/init-sandbox.sh`, content, logger, err_logger); @@ -38,6 +44,12 @@ const Terminal = { }); }); } else { + readAsset("rm-wrapper.sh", async (content) => { + system.deleteFile(`${filesDir}/alpine/bin/rm`, logger, err_logger); + system.writeText(`${filesDir}/alpine/bin/rm`, content, logger, err_logger); + system.setExec(`${filesDir}/alpine/bin/rm`, true, logger, err_logger); + }); + readAsset("init-alpine.sh", async (content) => { system.writeText(`${filesDir}/init-alpine.sh`, content, logger, err_logger); }); @@ -222,6 +234,12 @@ const Terminal = { logger("⚙️ Applying basic configuration..."); system.writeText(`${alpineDir}/etc/resolv.conf`, `nameserver 8.8.4.4 \nnameserver 8.8.8.8`); + readAsset("rm-wrapper.sh", async (content) => { + system.deleteFile(`${alpineDir}/bin/rm`, logger, err_logger); + system.writeText(`${alpineDir}/bin/rm`, content, logger, err_logger); + system.setExec(`${alpineDir}/bin/rm`, true, logger, err_logger); + }); + logger("✅ Extraction complete"); await new Promise((resolve, reject) => { system.mkdirs(`${filesDir}/.extracted`, resolve, reject);