From ca08e351003794c9c16a1defb6666a541ea07af2 Mon Sep 17 00:00:00 2001 From: XeonDead Date: Thu, 1 Jun 2023 13:34:14 +0300 Subject: [PATCH] isodrive: add void umount_iso() to act in case of empty input --- src/configfsisomanager.cpp | 39 ++++++++++++++++++++++++++++++++++++++ src/main.cpp | 9 ++++++++- 2 files changed, 47 insertions(+), 1 deletion(-) diff --git a/src/configfsisomanager.cpp b/src/configfsisomanager.cpp index 8d971a3..8ebf9cf 100644 --- a/src/configfsisomanager.cpp +++ b/src/configfsisomanager.cpp @@ -109,6 +109,45 @@ void mount_iso(char *iso_path, char *cdrom, char *ro) set_udc(udc, gadgetRoot); } +void umount_iso() +{ + char *gadgetRoot = get_gadget_root(); + + if (gadgetRoot == nullptr) + { + printf("No active gadget found\n"); + return; + } + char *configRoot = get_config_root(); + char *udc = get_udc(); + char *functionRoot = strjin(gadgetRoot, (char *)"/functions"); + char *massStorageRoot = strjin(functionRoot, (char *)"/mass_storage.0"); + char *lunRoot = strjin(massStorageRoot, (char *)"/lun.0"); + + char *stallFile = strjin(massStorageRoot, (char *)"/stall"); + char *udcFile = strjin(gadgetRoot, (char *)"/UDC"); + char *lunFile = strjin(lunRoot, (char *)"/file"); + char *lunCdRom = strjin(lunRoot, (char *)"/cdrom"); + char *lunRo = strjin(lunRoot, (char *)"/ro"); + + set_udc((char *)"", gadgetRoot); + + if (!isdir(massStorageRoot)) + { + mkdir(massStorageRoot, S_IRWXU | S_IRWXG | S_IROTH | S_IXOTH); + } + + if (!isdir(strjin(configRoot, (char *)"/mass_storage.0"))) + { + symlink(massStorageRoot, strjin(configRoot, (char *)"/mass_storage.0")); + } + sysfs_write(lunFile, (char *)""); + sysfs_write(lunCdRom, (char *)"0"); + sysfs_write(lunRo, (char *)"0"); + + set_udc(udc, gadgetRoot); +} + void set_udc(char *udc, char *gadget) { char *udcFile = strjin(gadget, (char *)"/UDC"); diff --git a/src/main.cpp b/src/main.cpp index 1e879e0..29cceb4 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -55,7 +55,14 @@ int main(int argc, char *argv[]) return 1; } - mount_iso(iso_target, cdrom, ro); + if (argc > 1) + { + mount_iso(iso_target, cdrom, ro); + } + else + { + umount_iso(); + } return 0; }