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
e1099e1e
Commit
e1099e1e
authored
Apr 25, 2021
by
longpanda
Browse files
Add parent option in menu_class plugin.
parent
c6be35f2
Changes
3
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
49 additions
and
15 deletions
+49
-15
GRUB2/MOD_SRC/grub-2.04/grub-core/ventoy/ventoy.c
GRUB2/MOD_SRC/grub-2.04/grub-core/ventoy/ventoy.c
+2
-2
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
-1
GRUB2/MOD_SRC/grub-2.04/grub-core/ventoy/ventoy_plugin.c
GRUB2/MOD_SRC/grub-2.04/grub-core/ventoy/ventoy_plugin.c
+45
-12
No files found.
GRUB2/MOD_SRC/grub-2.04/grub-core/ventoy/ventoy.c
View file @
e1099e1e
...
...
@@ -1436,7 +1436,7 @@ static int ventoy_collect_img_files(const char *filename, const struct grub_dirh
g_ventoy_img_count
++
;
img
->
alias
=
ventoy_plugin_get_menu_alias
(
vtoy_alias_image_file
,
img
->
path
);
img
->
class
=
ventoy_plugin_get_menu_class
(
vtoy_class_image_file
,
img
->
name
);
img
->
class
=
ventoy_plugin_get_menu_class
(
vtoy_class_image_file
,
img
->
name
,
img
->
path
);
if
(
!
img
->
class
)
{
img
->
class
=
g_menu_class
[
type
];
...
...
@@ -1695,7 +1695,7 @@ static int ventoy_dynamic_tree_menu(img_iterator_node *node)
else
{
node
->
dir
[
node
->
dirlen
-
1
]
=
0
;
dir_class
=
ventoy_plugin_get_menu_class
(
vtoy_class_directory
,
node
->
dir
);
dir_class
=
ventoy_plugin_get_menu_class
(
vtoy_class_directory
,
node
->
dir
,
node
->
dir
);
if
(
!
dir_class
)
{
dir_class
=
"vtoydir"
;
...
...
GRUB2/MOD_SRC/grub-2.04/grub-core/ventoy/ventoy_def.h
View file @
e1099e1e
...
...
@@ -830,6 +830,7 @@ typedef struct menu_class
{
int
type
;
int
patlen
;
int
parent
;
char
pattern
[
256
];
char
class
[
64
];
...
...
@@ -960,7 +961,7 @@ int ventoy_fill_windows_rtdata(void *buf, char *isopath);
int
ventoy_plugin_get_persistent_chunklist
(
const
char
*
isopath
,
int
index
,
ventoy_img_chunk_list
*
chunk_list
);
const
char
*
ventoy_plugin_get_injection
(
const
char
*
isopath
);
const
char
*
ventoy_plugin_get_menu_alias
(
int
type
,
const
char
*
isopath
);
const
char
*
ventoy_plugin_get_menu_class
(
int
type
,
const
char
*
name
);
const
char
*
ventoy_plugin_get_menu_class
(
int
type
,
const
char
*
name
,
const
char
*
path
);
int
ventoy_plugin_check_memdisk
(
const
char
*
isopath
);
int
ventoy_plugin_get_image_list_index
(
int
type
,
const
char
*
name
);
conf_replace
*
ventoy_plugin_find_conf_replace
(
const
char
*
iso
);
...
...
GRUB2/MOD_SRC/grub-2.04/grub-core/ventoy/ventoy_plugin.c
View file @
e1099e1e
...
...
@@ -1305,6 +1305,7 @@ static int ventoy_plugin_injection_entry(VTOY_JSON *json, const char *isodisk)
static
int
ventoy_plugin_menuclass_entry
(
VTOY_JSON
*
json
,
const
char
*
isodisk
)
{
int
type
;
int
parent
=
0
;
const
char
*
key
=
NULL
;
const
char
*
class
=
NULL
;
VTOY_JSON
*
pNode
=
NULL
;
...
...
@@ -1333,12 +1334,21 @@ static int ventoy_plugin_menuclass_entry(VTOY_JSON *json, const char *isodisk)
for
(
pNode
=
json
->
pstChild
;
pNode
;
pNode
=
pNode
->
pstNext
)
{
parent
=
0
;
type
=
vtoy_class_image_file
;
key
=
vtoy_json_get_string_ex
(
pNode
->
pstChild
,
"key"
);
if
(
!
key
)
{
key
=
vtoy_json_get_string_ex
(
pNode
->
pstChild
,
"dir"
);
type
=
vtoy_class_directory
;
key
=
vtoy_json_get_string_ex
(
pNode
->
pstChild
,
"parent"
);
if
(
key
)
{
parent
=
1
;
}
else
{
key
=
vtoy_json_get_string_ex
(
pNode
->
pstChild
,
"dir"
);
type
=
vtoy_class_directory
;
}
}
class
=
vtoy_json_get_string_ex
(
pNode
->
pstChild
,
"class"
);
...
...
@@ -1348,6 +1358,7 @@ static int ventoy_plugin_menuclass_entry(VTOY_JSON *json, const char *isodisk)
if
(
node
)
{
node
->
type
=
type
;
node
->
parent
=
parent
;
node
->
patlen
=
grub_snprintf
(
node
->
pattern
,
sizeof
(
node
->
pattern
),
"%s"
,
key
);
grub_snprintf
(
node
->
class
,
sizeof
(
node
->
class
),
"%s"
,
class
);
...
...
@@ -1369,7 +1380,7 @@ static int ventoy_plugin_menuclass_entry(VTOY_JSON *json, const char *isodisk)
static
int
ventoy_plugin_menuclass_check
(
VTOY_JSON
*
json
,
const
char
*
isodisk
)
{
int
type
;
const
char
*
name
=
NULL
;
const
char
*
key
=
NULL
;
const
char
*
class
=
NULL
;
VTOY_JSON
*
pNode
=
NULL
;
...
...
@@ -1384,18 +1395,23 @@ static int ventoy_plugin_menuclass_check(VTOY_JSON *json, const char *isodisk)
for
(
pNode
=
json
->
pstChild
;
pNode
;
pNode
=
pNode
->
pstNext
)
{
typ
e
=
vtoy_class_image_file
;
nam
e
=
"key"
;
key
=
vtoy_json_get_string_ex
(
pNode
->
pstChild
,
"key"
);
if
(
!
key
)
{
key
=
vtoy_json_get_string_ex
(
pNode
->
pstChild
,
"dir"
);
type
=
vtoy_class_directory
;
name
=
"parent"
;
key
=
vtoy_json_get_string_ex
(
pNode
->
pstChild
,
"parent"
);
if
(
!
key
)
{
name
=
"dir"
;
key
=
vtoy_json_get_string_ex
(
pNode
->
pstChild
,
"dir"
);
}
}
class
=
vtoy_json_get_string_ex
(
pNode
->
pstChild
,
"class"
);
if
(
key
&&
class
)
{
grub_printf
(
"%s: <%s>
\n
"
,
(
type
==
vtoy_class_directory
)
?
"dir"
:
"key"
,
key
);
grub_printf
(
"%s: <%s>
\n
"
,
name
,
key
);
grub_printf
(
"class: <%s>
\n\n
"
,
class
);
}
}
...
...
@@ -2182,7 +2198,7 @@ const char * ventoy_plugin_get_menu_alias(int type, const char *isopath)
return
NULL
;
}
const
char
*
ventoy_plugin_get_menu_class
(
int
type
,
const
char
*
name
)
const
char
*
ventoy_plugin_get_menu_class
(
int
type
,
const
char
*
name
,
const
char
*
path
)
{
int
len
;
menu_class
*
node
=
NULL
;
...
...
@@ -2191,21 +2207,38 @@ const char * ventoy_plugin_get_menu_class(int type, const char *name)
{
return
NULL
;
}
len
=
(
int
)
grub_strlen
(
name
);
if
(
vtoy_class_image_file
==
type
)
{
for
(
node
=
g_menu_class_head
;
node
;
node
=
node
->
next
)
{
if
(
node
->
type
=
=
type
&&
node
->
patlen
<=
len
&&
grub_strstr
(
name
,
node
->
pattern
)
)
if
(
node
->
type
!
=
type
)
{
return
node
->
class
;
continue
;
}
if
(
node
->
parent
)
{
len
=
(
int
)
grub_strlen
(
path
);
if
((
node
->
patlen
<
len
)
&&
(
path
[
node
->
patlen
]
==
'/'
)
&&
(
grub_strncmp
(
path
,
node
->
pattern
,
node
->
patlen
)
==
0
))
{
return
node
->
class
;
}
}
else
{
len
=
(
int
)
grub_strlen
(
name
);
if
((
node
->
patlen
<
len
)
&&
grub_strstr
(
name
,
node
->
pattern
))
{
return
node
->
class
;
}
}
}
}
else
{
len
=
(
int
)
grub_strlen
(
name
);
for
(
node
=
g_menu_class_head
;
node
;
node
=
node
->
next
)
{
if
(
node
->
type
==
type
&&
node
->
patlen
==
len
&&
grub_strncmp
(
name
,
node
->
pattern
,
len
)
==
0
)
...
...
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