Skip to content
GitLab
Menu
Projects
Groups
Snippets
Loading...
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
Menu
Open sidebar
dadigang
Ventoy
Commits
c308892d
"vscode:/vscode.git/clone" did not exist on "208b6841d3942b1cf1f120c1caa803a760411897"
Commit
c308892d
authored
Jan 10, 2023
by
longpanda
Browse files
Show file checksum menu title according to the existence of checksum value.
parent
1300f7f4
Changes
3
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
191 additions
and
44 deletions
+191
-44
GRUB2/MOD_SRC/grub-2.04/grub-core/ventoy/ventoy_cmd.c
GRUB2/MOD_SRC/grub-2.04/grub-core/ventoy/ventoy_cmd.c
+184
-38
GRUB2/MOD_SRC/grub-2.04/grub-core/ventoy/ventoy_def.h
GRUB2/MOD_SRC/grub-2.04/grub-core/ventoy/ventoy_def.h
+2
-0
INSTALL/grub/checksum.cfg
INSTALL/grub/checksum.cfg
+5
-6
No files found.
GRUB2/MOD_SRC/grub-2.04/grub-core/ventoy/ventoy_cmd.c
View file @
c308892d
...
...
@@ -158,7 +158,9 @@ const char *g_menu_prefix[img_type_max] =
"iso"
,
"wim"
,
"efi"
,
"img"
,
"vhd"
,
"vtoy"
};
static
const
char
*
g_lower_chksum_name
[]
=
{
"md5"
,
"sha1"
,
"sha256"
,
"sha512"
};
static
const
char
*
g_lower_chksum_name
[
VTOY_CHKSUM_NUM
]
=
{
"md5"
,
"sha1"
,
"sha256"
,
"sha512"
};
static
int
g_lower_chksum_namelen
[
VTOY_CHKSUM_NUM
]
=
{
3
,
4
,
6
,
6
};
static
int
g_chksum_retlen
[
VTOY_CHKSUM_NUM
]
=
{
32
,
40
,
64
,
128
};
static
int
g_vtoy_secondary_need_recover
=
0
;
...
...
@@ -6305,36 +6307,6 @@ static grub_err_t ventoy_cmd_load_menu_lang(grub_extcmd_context_t ctxt, int argc
VENTOY_CMD_RETURN
(
0
);
}
static
grub_err_t
ventoy_cmd_vtoychksum_exist
(
grub_extcmd_context_t
ctxt
,
int
argc
,
char
**
args
)
{
int
cnt
;
char
c
;
char
*
pos
=
NULL
;
(
void
)
ctxt
;
(
void
)
argc
;
cnt
=
ventoy_str_chrcnt
(
args
[
1
],
'/'
);
if
(
cnt
>
1
)
{
pos
=
grub_strrchr
(
args
[
1
],
'/'
);
c
=
*
pos
;
*
pos
=
0
;
if
(
ventoy_check_file_exist
(
"%s%s/VENTOY_CHECKSUM"
,
args
[
0
],
args
[
1
]))
{
VENTOY_CMD_RETURN
(
GRUB_ERR_NONE
);
}
*
pos
=
c
;
}
if
(
ventoy_check_file_exist
(
"%s/VENTOY_CHECKSUM"
,
args
[
0
]))
{
VENTOY_CMD_RETURN
(
GRUB_ERR_NONE
);
}
return
1
;
}
static
int
ventoy_chksum_pathcmp
(
int
chktype
,
char
*
rlpath
,
char
*
rdpath
)
{
char
*
pos1
=
NULL
;
...
...
@@ -6485,13 +6457,12 @@ static grub_err_t ventoy_cmd_cmp_checksum(grub_extcmd_context_t ctxt, int argc,
char
fchksum
[
64
];
char
readchk
[
256
]
=
{
0
};
char
filebuf
[
512
]
=
{
0
};
int
retlen
[]
=
{
32
,
40
,
64
,
128
};
char
uchkname
[
16
];
(
void
)
ctxt
;
index
=
(
int
)
grub_strtol
(
args
[
0
],
NULL
,
10
);
if
(
argc
!=
2
||
index
<
0
||
index
>=
(
int
)
ARRAY_SIZE
(
retlen
)
)
if
(
argc
!=
2
||
index
<
0
||
index
>=
VTOY_CHKSUM_NUM
)
{
return
1
;
}
...
...
@@ -6519,17 +6490,17 @@ static grub_err_t ventoy_cmd_cmp_checksum(grub_extcmd_context_t ctxt, int argc,
if
(
pos
)
{
VTOY_SKIP_SPACE_NEXT
(
pos
,
1
);
grub_memcpy
(
readchk
,
pos
,
retlen
[
index
]);
grub_memcpy
(
readchk
,
pos
,
g_chksum_
retlen
[
index
]);
}
else
{
grub_memcpy
(
readchk
,
filebuf
,
retlen
[
index
]);
grub_memcpy
(
readchk
,
filebuf
,
g_chksum_
retlen
[
index
]);
}
}
else
if
(
chktype
==
3
||
chktype
==
4
)
{
grub_snprintf
(
fchksum
,
sizeof
(
fchksum
),
"global VENTOY_CHECKSUM"
);
ventoy_find_checksum
(
file
,
uchkname
,
retlen
[
index
],
args
[
1
],
chktype
,
readchk
);
ventoy_find_checksum
(
file
,
uchkname
,
g_chksum_
retlen
[
index
],
args
[
1
],
chktype
,
readchk
);
if
(
readchk
[
0
]
==
0
)
{
grub_printf
(
"
\n\n
%s value not found in %s.
\n
"
,
uchkname
,
fchksum
);
...
...
@@ -6539,7 +6510,7 @@ static grub_err_t ventoy_cmd_cmp_checksum(grub_extcmd_context_t ctxt, int argc,
else
{
grub_snprintf
(
fchksum
,
sizeof
(
fchksum
),
"local VENTOY_CHECKSUM"
);
ventoy_find_checksum
(
file
,
uchkname
,
retlen
[
index
],
args
[
1
],
chktype
,
readchk
);
ventoy_find_checksum
(
file
,
uchkname
,
g_chksum_
retlen
[
index
],
args
[
1
],
chktype
,
readchk
);
if
(
readchk
[
0
]
==
0
)
{
grub_file_close
(
file
);
...
...
@@ -6547,7 +6518,7 @@ static grub_err_t ventoy_cmd_cmp_checksum(grub_extcmd_context_t ctxt, int argc,
if
(
file
)
{
grub_snprintf
(
fchksum
,
sizeof
(
fchksum
),
"global VENTOY_CHECKSUM"
);
ventoy_find_checksum
(
file
,
uchkname
,
retlen
[
index
],
args
[
1
],
3
,
readchk
);
ventoy_find_checksum
(
file
,
uchkname
,
g_chksum_
retlen
[
index
],
args
[
1
],
3
,
readchk
);
if
(
readchk
[
0
]
==
0
)
{
grub_printf
(
"
\n\n
%s value not found in both local and global VENTOY_CHECKSUM.
\n
"
,
uchkname
);
...
...
@@ -6573,6 +6544,181 @@ end:
VENTOY_CMD_RETURN
(
0
);
}
static
int
ventoy_find_all_checksum
(
grub_file_t
file
,
char
*
path
,
int
chktype
,
int
exists
[
VTOY_CHKSUM_NUM
],
int
*
ptotexist
)
{
int
i
;
int
ulen
;
int
tot
=
0
;
char
c
=
0
;
char
*
pos
=
NULL
;
char
*
pos1
=
NULL
;
char
*
pos2
=
NULL
;
char
*
buf
=
NULL
;
char
*
currline
=
NULL
;
char
*
nextline
=
NULL
;
const
char
*
uname
=
NULL
;
tot
=
*
ptotexist
;
/* read file to buffer */
buf
=
grub_malloc
(
file
->
size
+
4
);
if
(
!
buf
)
{
return
1
;
}
grub_file_read
(
file
,
buf
,
file
->
size
);
buf
[
file
->
size
]
=
0
;
/* parse each line */
for
(
currline
=
buf
;
currline
;
currline
=
nextline
)
{
nextline
=
ventoy_get_line
(
currline
);
VTOY_SKIP_SPACE
(
currline
);
for
(
i
=
0
;
i
<
VTOY_CHKSUM_NUM
;
i
++
)
{
if
(
exists
[
i
])
{
continue
;
}
uname
=
g_lower_chksum_name
[
i
];
ulen
=
g_lower_chksum_namelen
[
i
];
if
(
grub_strncasecmp
(
currline
,
uname
,
ulen
)
==
0
)
{
pos
=
grub_strchr
(
currline
,
'='
);
pos1
=
grub_strchr
(
currline
,
'('
);
pos2
=
grub_strchr
(
currline
,
')'
);
if
(
pos
&&
pos1
&&
pos2
)
{
c
=
*
pos2
;
*
pos2
=
0
;
if
(
ventoy_chksum_pathcmp
(
chktype
,
path
,
pos1
+
1
)
==
0
)
{
exists
[
i
]
=
1
;
tot
++
;
}
*
pos2
=
c
;
}
}
else
if
(
ventoy_str_len_alnum
(
currline
,
g_chksum_retlen
[
i
]))
{
VTOY_SKIP_SPACE_NEXT_EX
(
pos
,
currline
,
g_chksum_retlen
[
i
]);
if
(
ventoy_chksum_pathcmp
(
chktype
,
path
,
pos
)
==
0
)
{
exists
[
i
]
=
1
;
tot
++
;
}
}
if
(
tot
>=
VTOY_CHKSUM_NUM
)
{
goto
end
;
}
}
}
end:
*
ptotexist
=
tot
;
grub_free
(
buf
);
return
0
;
}
static
grub_err_t
ventoy_cmd_vtoychksum_exist
(
grub_extcmd_context_t
ctxt
,
int
argc
,
char
**
args
)
{
int
i
=
0
;
int
cnt
=
0
;
char
c
=
0
;
int
tip
=
0
;
char
*
pos
=
NULL
;
grub_file_t
file
=
NULL
;
const
char
*
isopart
=
NULL
;
int
exists
[
VTOY_CHKSUM_NUM
]
=
{
0
,
0
,
0
,
0
};
int
totexist
=
0
;
(
void
)
argc
;
(
void
)
ctxt
;
isopart
=
grub_env_get
(
"vtoy_iso_part"
);
for
(
i
=
0
;
i
<
VTOY_CHKSUM_NUM
;
i
++
)
{
if
(
ventoy_check_file_exist
(
"%s%s.%s"
,
isopart
,
args
[
0
],
g_lower_chksum_name
[
i
]))
{
exists
[
i
]
=
1
;
totexist
++
;
}
}
if
(
totexist
==
VTOY_CHKSUM_NUM
)
{
goto
end
;
}
cnt
=
ventoy_str_chrcnt
(
args
[
0
],
'/'
);
if
(
cnt
>
1
)
{
pos
=
grub_strrchr
(
args
[
0
],
'/'
);
c
=
*
pos
;
*
pos
=
0
;
file
=
ventoy_grub_file_open
(
VENTOY_FILE_TYPE
,
"%s%s/VENTOY_CHECKSUM"
,
isopart
,
args
[
0
]);
*
pos
=
c
;
if
(
file
)
{
if
(
tip
==
0
&&
file
->
size
>
(
32
*
VTOY_SIZE_1KB
))
{
tip
=
1
;
grub_printf
(
"Reading checksum file...
\n
"
);
grub_refresh
();
}
debug
(
"parse local VENTOY_CHECKSUM
\n
"
);
ventoy_find_all_checksum
(
file
,
args
[
0
],
2
,
exists
,
&
totexist
);
grub_file_close
(
file
);
}
}
if
(
totexist
==
VTOY_CHKSUM_NUM
)
{
goto
end
;
}
file
=
ventoy_grub_file_open
(
VENTOY_FILE_TYPE
,
"%s/VENTOY_CHECKSUM"
,
isopart
);
if
(
file
)
{
if
(
tip
==
0
&&
file
->
size
>
(
32
*
VTOY_SIZE_1KB
))
{
tip
=
1
;
grub_printf
(
"Reading checksum file...
\n
"
);
grub_refresh
();
}
debug
(
"parse global VENTOY_CHECKSUM
\n
"
);
ventoy_find_all_checksum
(
file
,
args
[
0
],
(
cnt
>
1
)
?
3
:
4
,
exists
,
&
totexist
);
grub_file_close
(
file
);
}
end:
ventoy_env_int_set
(
"VT_EXIST_MD5"
,
exists
[
0
]);
ventoy_env_int_set
(
"VT_EXIST_SHA1"
,
exists
[
1
]);
ventoy_env_int_set
(
"VT_EXIST_SHA256"
,
exists
[
2
]);
ventoy_env_int_set
(
"VT_EXIST_SHA512"
,
exists
[
3
]);
VENTOY_CMD_RETURN
(
0
);
}
static
const
char
*
ventoy_menu_lang_read_hook
(
struct
grub_env_var
*
var
,
const
char
*
val
)
{
...
...
GRUB2/MOD_SRC/grub-2.04/grub-core/ventoy/ventoy_def.h
View file @
c308892d
...
...
@@ -62,6 +62,8 @@
#define VTOY_WARNING "!!!!!!!!!!!!! WARNING !!!!!!!!!!!!!"
#define VTOY_CHKSUM_NUM 4
#define VTOY_PLAT_I386_UEFI 0x49413332
#define VTOY_PLAT_ARM64_UEFI 0x41413634
#define VTOY_PLAT_X86_64_UEFI 0x55454649
...
...
INSTALL/grub/checksum.cfg
View file @
c308892d
unset vtchkdef
vt_vtoychksum_exist "${vtoy_iso_part}" "${VTOY_CHKSUM_FILE_PATH}"
set vtchksumfile=$?
vt_vtoychksum_exist "${VTOY_CHKSUM_FILE_PATH}"
if [
-f "${vtoy_iso_part}${VTOY_CHKSUM_FILE_PATH}.md5" -o $vtchksumfile -eq 0
]; then
if [
"$VT_EXIST_MD5" = "1"
]; then
if [ -z "$vtchkdef" ]; then
set default=0
set vtchkdef=1
...
...
@@ -24,7 +23,7 @@ else
}
fi
if [
-f "${vtoy_iso_part}${VTOY_CHKSUM_FILE_PATH}.sha1" -o $vtchksumfile -eq 0
]; then
if [
"$VT_EXIST_SHA1" = "1"
]; then
if [ -z "$vtchkdef" ]; then
set default=1
set vtchkdef=1
...
...
@@ -47,7 +46,7 @@ fi
if [
-f "${vtoy_iso_part}${VTOY_CHKSUM_FILE_PATH}.sha256" -o $vtchksumfile -eq 0
]; then
if [
"$VT_EXIST_SHA256" = "1"
]; then
if [ -z "$vtchkdef" ]; then
set default=2
set vtchkdef=1
...
...
@@ -70,7 +69,7 @@ fi
if [
-f "${vtoy_iso_part}${VTOY_CHKSUM_FILE_PATH}.sha512" -o $vtchksumfile -eq 0
]; then
if [
"$VT_EXIST_SHA512" = "1"
]; then
if [ -z "$vtchkdef" ]; then
set default=3
set vtchkdef=1
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment