Skip to content

Commit

Permalink
1.0.09 release
Browse files Browse the repository at this point in the history
  • Loading branch information
ventoy committed May 9, 2020
1 parent c84c072 commit d0edcc0
Show file tree
Hide file tree
Showing 36 changed files with 789 additions and 91 deletions.
58 changes: 53 additions & 5 deletions GRUB2/grub-2.04/grub-core/ventoy/ventoy.c
Original file line number Diff line number Diff line change
Expand Up @@ -1358,6 +1358,17 @@ static grub_err_t ventoy_cmd_dump_menu(grub_extcmd_context_t ctxt, int argc, cha
return 0;
}

static grub_err_t ventoy_cmd_dump_auto_install(grub_extcmd_context_t ctxt, int argc, char **args)
{
(void)ctxt;
(void)argc;
(void)args;

ventoy_plugin_dump_auto_install();

return 0;
}

static grub_err_t ventoy_cmd_check_mode(grub_extcmd_context_t ctxt, int argc, char **args)
{
(void)ctxt;
Expand Down Expand Up @@ -1387,22 +1398,58 @@ static grub_err_t ventoy_cmd_check_mode(grub_extcmd_context_t ctxt, int argc, ch

static grub_err_t ventoy_cmd_dynamic_menu(grub_extcmd_context_t ctxt, int argc, char **args)
{
static int configfile_mode = 0;
char memfile[128] = {0};

(void)ctxt;
(void)argc;
(void)args;

if (argc == 0)
/*
* args[0]: 0:normal 1:configfile
* args[1]: 0:list_buf 1:tree_buf
*/

if (argc != 2)
{
debug("Invlaid argc %d\n", argc);

This comment has been minimized.

Copy link
@a1ive

a1ive May 9, 2020

Contributor

typo. 'Invlaid' -> 'Invalid'

return 0;
}

if (args[0][0] == '0')
{
grub_script_execute_sourcecode(g_list_script_buf);
if (args[1][0] == '0')
{
grub_script_execute_sourcecode(g_list_script_buf);
}
else
{
grub_script_execute_sourcecode(g_tree_script_buf);
}
}
else
{
g_ventoy_last_entry = -1;
grub_snprintf(memfile, sizeof(memfile), "configfile mem:0x%llx:size:%d",
(ulonglong)(ulong)g_tree_script_buf, g_tree_script_pos);
if (configfile_mode)
{
debug("Now already in F3 mode %d\n", configfile_mode);
return 0;
}

if (args[1][0] == '0')
{
grub_snprintf(memfile, sizeof(memfile), "configfile mem:0x%llx:size:%d",
(ulonglong)(ulong)g_list_script_buf, g_list_script_pos);
}
else
{
g_ventoy_last_entry = -1;
grub_snprintf(memfile, sizeof(memfile), "configfile mem:0x%llx:size:%d",
(ulonglong)(ulong)g_tree_script_buf, g_tree_script_pos);
}

configfile_mode = 1;
grub_script_execute_sourcecode(memfile);
configfile_mode = 0;
}

return 0;
Expand Down Expand Up @@ -1567,6 +1614,7 @@ static cmd_para ventoy_cmds[] =
{ "vt_dump_menu", ventoy_cmd_dump_menu, 0, NULL, "", "", NULL },
{ "vt_dynamic_menu", ventoy_cmd_dynamic_menu, 0, NULL, "", "", NULL },
{ "vt_check_mode", ventoy_cmd_check_mode, 0, NULL, "", "", NULL },
{ "vt_dump_auto_install", ventoy_cmd_dump_auto_install, 0, NULL, "", "", NULL },

{ "vt_is_udf", ventoy_cmd_is_udf, 0, NULL, "", "", NULL },
{ "vt_file_size", ventoy_cmd_file_size, 0, NULL, "", "", NULL },
Expand Down
15 changes: 14 additions & 1 deletion GRUB2/grub-2.04/grub-core/ventoy/ventoy_def.h
Original file line number Diff line number Diff line change
Expand Up @@ -418,7 +418,7 @@ grub_err_t ventoy_cmd_linux_locate_initrd(grub_extcmd_context_t ctxt, int argc,
grub_err_t ventoy_cmd_initrd_count(grub_extcmd_context_t ctxt, int argc, char **args);
grub_err_t ventoy_cmd_valid_initrd_count(grub_extcmd_context_t ctxt, int argc, char **args);
grub_err_t ventoy_cmd_load_cpio(grub_extcmd_context_t ctxt, int argc, char **args);
int ventoy_cpio_newc_fill_head(void *buf, int filesize, void *filedata, const char *name);
int ventoy_cpio_newc_fill_head(void *buf, int filesize, const void *filedata, const char *name);
grub_file_t ventoy_grub_file_open(enum grub_file_type type, const char *fmt, ...);
int ventoy_is_file_exist(const char *fmt, ...);
int ventoy_fill_data(grub_uint32_t buflen, char *buffer);
Expand Down Expand Up @@ -550,13 +550,26 @@ typedef struct ventoy_mbr_head
}ventoy_mbr_head;
#pragma pack()


typedef struct install_template
{
char isopath[256];
char templatepath[256];

struct install_template *next;
}install_template;

extern int g_ventoy_last_entry;
extern int g_ventoy_memdisk_mode;
extern int g_ventoy_iso_raw;
extern int g_ventoy_iso_uefi_drv;

int ventoy_cmp_img(img_info *img1, img_info *img2);
void ventoy_swap_img(img_info *img1, img_info *img2);
char * ventoy_plugin_get_install_template(const char *isopath);
void ventoy_plugin_dump_auto_install(void);
int ventoy_fill_windows_rtdata(void *buf, char *isopath);


#endif /* __VENTOY_DEF_H__ */

41 changes: 37 additions & 4 deletions GRUB2/grub-2.04/grub-core/ventoy/ventoy_linux.c
Original file line number Diff line number Diff line change
Expand Up @@ -588,7 +588,7 @@ static void ventoy_cpio_newc_fill_int(grub_uint32_t value, char *buf, int buflen
}
}

int ventoy_cpio_newc_fill_head(void *buf, int filesize, void *filedata, const char *name)
int ventoy_cpio_newc_fill_head(void *buf, int filesize, const void *filedata, const char *name)
{
int namelen = 0;
int headlen = 0;
Expand Down Expand Up @@ -852,18 +852,22 @@ grub_err_t ventoy_cmd_linux_locate_initrd(grub_extcmd_context_t ctxt, int argc,

grub_err_t ventoy_cmd_load_cpio(grub_extcmd_context_t ctxt, int argc, char **args)
{
grub_uint8_t *buf;
char *template_file = NULL;
char *template_buf = NULL;
grub_uint8_t *buf = NULL;
grub_uint32_t mod;
grub_uint32_t headlen;
grub_uint32_t initrd_head_len;
grub_uint32_t padlen;
grub_uint32_t img_chunk_size;
grub_uint32_t template_size = 0;
grub_file_t file;
grub_file_t scriptfile;

(void)ctxt;
(void)argc;

if (argc != 1)
if (argc != 3)
{
return grub_error(GRUB_ERR_BAD_ARGUMENT, "Usage: %s cpiofile\n", cmd_raw_name);
}
Expand All @@ -888,7 +892,30 @@ grub_err_t ventoy_cmd_load_cpio(grub_extcmd_context_t ctxt, int argc, char **arg
g_ventoy_cpio_size = 0;
}

g_ventoy_cpio_buf = grub_malloc(file->size + 4096 + img_chunk_size);
template_file = ventoy_plugin_get_install_template(args[1]);
if (template_file)
{
debug("auto install template: <%s>\n", template_file);
scriptfile = ventoy_grub_file_open(VENTOY_FILE_TYPE, "%s%s", args[2], template_file);
if (scriptfile)
{
debug("auto install script size %d\n", (int)scriptfile->size);
template_size = scriptfile->size;
template_buf = grub_malloc(template_size);
if (template_buf)
{
grub_file_read(scriptfile, template_buf, template_size);
}

grub_file_close(scriptfile);
}
else
{
debug("Failed to open install script %s%s\n", args[2], template_file);
}
}

g_ventoy_cpio_buf = grub_malloc(file->size + 4096 + template_size + img_chunk_size);
if (NULL == g_ventoy_cpio_buf)
{
grub_file_close(file);
Expand All @@ -910,6 +937,12 @@ grub_err_t ventoy_cmd_load_cpio(grub_extcmd_context_t ctxt, int argc, char **arg
headlen = ventoy_cpio_newc_fill_head(buf, img_chunk_size, g_img_chunk_list.chunk, "ventoy/ventoy_image_map");
buf += headlen + ventoy_align(img_chunk_size, 4);

if (template_buf)
{
headlen = ventoy_cpio_newc_fill_head(buf, template_size, template_buf, "ventoy/autoinstall");
buf += headlen + ventoy_align(template_size, 4);
}

/* step2: insert os param to cpio */
headlen = ventoy_cpio_newc_fill_head(buf, 0, NULL, "ventoy/ventoy_os_param");
padlen = sizeof(ventoy_os_param);
Expand Down
100 changes: 99 additions & 1 deletion GRUB2/grub-2.04/grub-core/ventoy/ventoy_plugin.c
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,8 @@

GRUB_MOD_LICENSE ("GPLv3+");

static install_template *g_install_template_head = NULL;

static int ventoy_plugin_theme_entry(VTOY_JSON *json, const char *isodisk)
{
const char *value;
Expand All @@ -46,7 +48,15 @@ static int ventoy_plugin_theme_entry(VTOY_JSON *json, const char *isodisk)
value = vtoy_json_get_string_ex(json->pstChild, "file");
if (value)
{
grub_snprintf(filepath, sizeof(filepath), "%s/ventoy/%s", isodisk, value);
if (value[0] == '/')
{
grub_snprintf(filepath, sizeof(filepath), "%s%s", isodisk, value);
}
else
{
grub_snprintf(filepath, sizeof(filepath), "%s/ventoy/%s", isodisk, value);
}

if (ventoy_is_file_exist(filepath) == 0)
{
debug("Theme file %s does not exist\n", filepath);
Expand All @@ -67,9 +77,67 @@ static int ventoy_plugin_theme_entry(VTOY_JSON *json, const char *isodisk)
return 0;
}


static int ventoy_plugin_auto_install_entry(VTOY_JSON *json, const char *isodisk)
{
const char *iso = NULL;
const char *script = NULL;
VTOY_JSON *pNode = NULL;
install_template *node = NULL;
install_template *next = NULL;

(void)isodisk;

if (json->enDataType != JSON_TYPE_ARRAY)
{
debug("Not array %d\n", json->enDataType);
return 0;
}

if (g_install_template_head)
{
for (node = g_install_template_head; node; node = next)
{
next = node->next;
grub_free(node);
}

g_install_template_head = NULL;
}

for (pNode = json->pstChild; pNode; pNode = pNode->pstNext)
{
iso = vtoy_json_get_string_ex(pNode->pstChild, "image");
if (iso && iso[0] == '/')
{
script = vtoy_json_get_string_ex(pNode->pstChild, "template");
if (script && script[0] == '/')
{
node = grub_zalloc(sizeof(install_template));
if (node)
{
grub_snprintf(node->isopath, sizeof(node->isopath), "%s", iso);
grub_snprintf(node->templatepath, sizeof(node->templatepath), "%s", script);

if (g_install_template_head)
{
node->next = g_install_template_head;
}

g_install_template_head = node;
}
}
}
}

return 0;
}


static plugin_entry g_plugin_entries[] =
{
{ "theme", ventoy_plugin_theme_entry },
{ "auto_install", ventoy_plugin_auto_install_entry },
};

static int ventoy_parse_plugin_config(VTOY_JSON *json, const char *isodisk)
Expand Down Expand Up @@ -149,3 +217,33 @@ grub_err_t ventoy_cmd_load_plugin(grub_extcmd_context_t ctxt, int argc, char **a
VENTOY_CMD_RETURN(GRUB_ERR_NONE);
}


void ventoy_plugin_dump_auto_install(void)
{
install_template *node = NULL;

for (node = g_install_template_head; node; node = node->next)
{
grub_printf("IMAGE:<%s>\n", node->isopath);
grub_printf("SCRIPT:<%s>\n\n", node->templatepath);
}

return;
}


char * ventoy_plugin_get_install_template(const char *isopath)
{
install_template *node = NULL;

for (node = g_install_template_head; node; node = node->next)
{
if (grub_strcmp(node->isopath, isopath) == 0)
{
return node->templatepath;
}
}

return NULL;
}

Loading

0 comments on commit d0edcc0

Please sign in to comment.