Fix the boot issue for Fedora/CentOS when file name contains special character (e.g. '(' ) #2360

This commit is contained in:
longpanda 2023-04-21 20:05:30 +08:00
parent 0961ce5624
commit 84b2ee7ee3
6 changed files with 37 additions and 1 deletions

View File

@ -125,6 +125,7 @@ fi
#iso-scan (currently only for Fedora)
if $GREP -q Fedora /etc/os-release; then
if /ventoy/tool/vtoydump -a /ventoy/ventoy_os_param; then
if ventoy_iso_scan_check; then
echo "iso_scan process ..." >> $VTLOG
@ -139,6 +140,7 @@ if $GREP -q Fedora /etc/os-release; then
exit 0
fi
fi
fi

View File

@ -22,6 +22,7 @@
#include <stdlib.h>
#include <string.h>
#include <errno.h>
#include <ctype.h>
#include <unistd.h>
#include <fcntl.h>
#include <sys/types.h>
@ -444,6 +445,29 @@ static int vtoy_vlnk_printf(ventoy_os_param *param, char *diskname)
return 1;
}
static int vtoy_check_iso_path_alpnum(ventoy_os_param *param)
{
char c;
int i = 0;
while (param->vtoy_img_path[i])
{
c = param->vtoy_img_path[i];
if (isalnum(c) || c == '_' || c == '-')
{
}
else
{
return 1;
}
i++;
}
return 0;
}
static int vtoy_check_device(ventoy_os_param *param, const char *device)
{
unsigned long long size;
@ -560,6 +584,7 @@ int vtoydump_main(int argc, char **argv)
int rc;
int ch;
int print_path = 0;
int check_ascii = 0;
int print_fs = 0;
int vlnk_print = 0;
char filename[256] = {0};
@ -567,7 +592,7 @@ int vtoydump_main(int argc, char **argv)
char device[64] = {0};
ventoy_os_param *param = NULL;
while ((ch = getopt(argc, argv, "c:f:p:t:s:v::")) != -1)
while ((ch = getopt(argc, argv, "a:c:f:p:t:s:v::")) != -1)
{
if (ch == 'f')
{
@ -586,6 +611,11 @@ int vtoydump_main(int argc, char **argv)
print_path = 1;
strncpy(filename, optarg, sizeof(filename) - 1);
}
else if (ch == 'a')
{
check_ascii = 1;
strncpy(filename, optarg, sizeof(filename) - 1);
}
else if (ch == 't')
{
vlnk_print = 1;
@ -660,6 +690,10 @@ int vtoydump_main(int argc, char **argv)
{
rc = vtoy_check_device(param, device);
}
else if (check_ascii)
{
rc = vtoy_check_iso_path_alpnum(param);
}
else
{
// print os param, you can change the output format in the function

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.