diff --git a/src/configfsisomanager.cpp b/src/configfsisomanager.cpp index 07618ed..b21e187 100644 --- a/src/configfsisomanager.cpp +++ b/src/configfsisomanager.cpp @@ -6,12 +6,14 @@ #include "configfsisomanager.h" #include #include +#include char *get_gadget_root() { char *configFsRoot = fs_mount_point("configfs"); char *usbGadgetRoot = strjin(configFsRoot, "/usb_gadget/"); char *gadgetRoot = nullptr; + char *udc = nullptr; struct dirent *entry = nullptr; DIR *dp = nullptr; @@ -22,7 +24,9 @@ char *get_gadget_root() if (entry->d_name[0] != '.') { gadgetRoot = strjin(usbGadgetRoot, entry->d_name); - break; + udc = strjin(gadgetRoot, "/UDC"); + if (strcmp(udc, getprop("sys.usb.controller")) == 1) + break; } } return gadgetRoot; @@ -65,6 +69,7 @@ void mount_iso(char *iso_path) char *lunRo = strjin(lunRoot, "/ro"); reset_udc(); + if (!isdir(massStorageRoot)) { mkdir(massStorageRoot, S_IRWXU | S_IRWXG | S_IROTH | S_IXOTH); diff --git a/src/include/util.h b/src/include/util.h index 2f5804c..4ff068f 100644 --- a/src/include/util.h +++ b/src/include/util.h @@ -4,6 +4,7 @@ char *fs_mount_point(char *filesystem_type); char *strjin(char *w1, char *w2); bool isdir(char *path); +char *sysfs_read(char *path); void sysfs_write(char *path, char *content); char *getprop(char *key); void trim(char *s); diff --git a/src/main.cpp b/src/main.cpp index b348699..4790852 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -12,13 +12,7 @@ int main(int argc, char* argv[]){ } if (argc == 1) { - std::cerr << "Not enough args" << std::endl; - return 1; - } - if (iso_target[0] != '/') - { - std::cerr << "Iso path is not absolute" << std::endl; - return 1; + iso_target = ""; } mount_iso(iso_target); } diff --git a/src/util.cpp b/src/util.cpp index b0b778f..e96c29b 100644 --- a/src/util.cpp +++ b/src/util.cpp @@ -9,7 +9,7 @@ #include #include #include - +#include // https://stackoverflow.com/a/123724 void trim(char *s) @@ -58,15 +58,18 @@ bool isdir(char *path) void sysfs_write(char *path, char *content) { std::cout << "Write: " << content << " -> " << path << std::endl; - std::ofstream sysfsFile; - sysfsFile.open(path); - if (!sysfsFile.is_open()) { - perror("Failed to open sysfs path"); - } - sysfsFile << content; - perror("Status"); + std::ofstream sysfsFile(path); + sysfsFile << content << std::endl; sysfsFile.close(); - std::cout << std::endl; +} + +char *sysfs_read(char *path) +{ + char *value = nullptr; + std::ifstream sysfsFile(path); + sysfsFile >> path; + sysfsFile.close(); + return value; }