X-Git-Url: https://glassweightruler.freedombox.rocks/gitweb/Ventoy.git/blobdiff_plain/0aff8f51096c9068cb1964e27be5f3d7638670dc..ec4b6c2a2cda87cfc5c736a9eb9439b92f4491f8:/VtoyTool/vtoydump.c diff --git a/VtoyTool/vtoydump.c b/VtoyTool/vtoydump.c index 34c1ee7..e58cc86 100644 --- a/VtoyTool/vtoydump.c +++ b/VtoyTool/vtoydump.c @@ -435,6 +435,24 @@ static int vtoy_printf_iso_path(ventoy_os_param *param) return 0; } +static int vtoy_printf_fs(ventoy_os_param *param) +{ + const char *fs[] = + { + "exfat", "ntfs", "ext", "xfs", "udf", "fat" + }; + + if (param->vtoy_disk_part_type < 6) + { + printf("%s\n", fs[param->vtoy_disk_part_type]); + } + else + { + printf("unknown\n"); + } + return 0; +} + static int vtoy_check_device(ventoy_os_param *param, const char *device) { unsigned long long size; @@ -464,10 +482,13 @@ static int vtoy_check_device(ventoy_os_param *param, const char *device) static int vtoy_print_os_param(ventoy_os_param *param, char *diskname) { - int cnt = 0; + int fd, size; + int cnt = 0; char *path = param->vtoy_img_path; const char *fs; - + char diskpath[256] = {0}; + char sizebuf[64] = {0}; + cnt = vtoy_find_disk_by_size(param->vtoy_disk_size, diskname); debug("find disk by size %llu, cnt=%d...\n", (unsigned long long)param->vtoy_disk_size, cnt); if (1 == cnt) @@ -494,6 +515,37 @@ static int vtoy_print_os_param(ventoy_os_param *param, char *diskname) if (1 == cnt) { + if (strstr(diskname, "nvme") || strstr(diskname, "mmc") || strstr(diskname, "nbd")) + { + snprintf(diskpath, sizeof(diskpath) - 1, "/sys/class/block/%sp2/size", diskname); + } + else + { + snprintf(diskpath, sizeof(diskpath) - 1, "/sys/class/block/%s2/size", diskname); + } + + if (access(diskpath, F_OK) >= 0) + { + debug("get part size from sysfs for %s\n", diskpath); + + fd = open(diskpath, O_RDONLY | O_BINARY); + if (fd >= 0) + { + read(fd, sizebuf, sizeof(sizebuf)); + size = (int)strtoull(sizebuf, NULL, 10); + close(fd); + if ((size != (64 * 1024)) && (size != (8 * 1024))) + { + debug("sizebuf=<%s> size=%d\n", sizebuf, size); + return 1; + } + } + } + else + { + debug("%s not exist \n", diskpath); + } + printf("/dev/%s#%s#%s\n", diskname, fs, path); return 0; } @@ -517,12 +569,13 @@ int vtoydump_main(int argc, char **argv) int rc; int ch; int print_path = 0; + int print_fs = 0; char filename[256] = {0}; char diskname[256] = {0}; char device[64] = {0}; ventoy_os_param *param = NULL; - while ((ch = getopt(argc, argv, "c:f:p:v::")) != -1) + while ((ch = getopt(argc, argv, "c:f:p:s:v::")) != -1) { if (ch == 'f') { @@ -541,6 +594,11 @@ int vtoydump_main(int argc, char **argv) print_path = 1; strncpy(filename, optarg, sizeof(filename) - 1); } + else if (ch == 's') + { + print_fs = 1; + strncpy(filename, optarg, sizeof(filename) - 1); + } else { fprintf(stderr, "Usage: %s -f datafile [ -v ] \n", argv[0]); @@ -593,6 +651,10 @@ int vtoydump_main(int argc, char **argv) { rc = vtoy_printf_iso_path(param); } + else if (print_fs) + { + rc = vtoy_printf_fs(param); + } else if (device[0]) { rc = vtoy_check_device(param, device);