isodrive: fix usb gadget

- correctly get gadget
- fix writing to sysfs
- allow umounting iso
This commit is contained in:
Marcel Alexandru Nitan
2023-02-01 02:22:02 +02:00
parent 7e6fa6b8cf
commit 00832c7f2f
4 changed files with 20 additions and 17 deletions

View File

@@ -6,12 +6,14 @@
#include "configfsisomanager.h"
#include <dirent.h>
#include <unistd.h>
#include <string.h>
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);

View File

@@ -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);

View File

@@ -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);
}

View File

@@ -9,7 +9,7 @@
#include <sstream>
#include <array>
#include <memory>
#include <cstdio>
// 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;
}