Enabled GPT type GUIDs with -append_partition, -boot_image any iso_mbr_part_type=, and -as mkisofs -iso_mbr_part_type
This commit is contained in:
@ -958,11 +958,16 @@ int Xorriso_make_iso_write_opts(struct XorrisO *xorriso, IsoImage *image,
|
||||
isoburn_igopt_set_partition_img(sopts, i + 1,
|
||||
xorriso->appended_part_types[i], part_image);
|
||||
isoburn_igopt_set_part_flag(sopts, i + 1, intvl_string);
|
||||
isoburn_igopt_set_part_type_guid(sopts, i + 1,
|
||||
xorriso->appended_part_type_guids[i],
|
||||
xorriso->appended_part_gpt_flags[i] & 1);
|
||||
}
|
||||
isoburn_igopt_set_appended_as_gpt(sopts, xorriso->appended_as_gpt);
|
||||
isoburn_igopt_set_appended_as_apm(sopts, xorriso->appended_as_apm);
|
||||
isoburn_igopt_set_part_like_isohybrid(sopts, xorriso->part_like_isohybrid);
|
||||
isoburn_igopt_set_iso_mbr_part_type(sopts, xorriso->iso_mbr_part_type);
|
||||
isoburn_igopt_set_iso_type_guid(sopts, xorriso->iso_gpt_type_guid,
|
||||
xorriso->iso_mbr_part_flag & 1);
|
||||
isoburn_igopt_set_gpt_guid(sopts, xorriso->gpt_guid, xorriso->gpt_guid_mode);
|
||||
isoburn_igopt_set_disc_label(sopts, xorriso->ascii_disc_label);
|
||||
isoburn_igopt_set_hfsp_serial_number(sopts, xorriso->hfsp_serial_number);
|
||||
@ -3125,20 +3130,14 @@ ex:;
|
||||
}
|
||||
|
||||
|
||||
int Xorriso_parse_gpt_guid(struct XorrisO *xorriso, char *text, int flag)
|
||||
/* @param flag bit0= no error message
|
||||
*/
|
||||
int Xorriso_parse_guid(struct XorrisO *xorriso, char *text,
|
||||
uint8_t guid[16], int flag)
|
||||
{
|
||||
int bin_count= 0, ret;
|
||||
uint8_t u[16], tr;
|
||||
|
||||
if(strcmp(text, "random") == 0) {
|
||||
xorriso->gpt_guid_mode= 0;
|
||||
return(1);
|
||||
}
|
||||
if(strcmp(text, "modification-date") == 0 ||
|
||||
strcmp(text, "volume_date_uuid") == 0) {
|
||||
xorriso->gpt_guid_mode= 2;
|
||||
return(1);
|
||||
}
|
||||
/* Try RFC 4122 : big endian XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX
|
||||
Translate to UEFI: first three components to little-endian
|
||||
*/
|
||||
@ -3163,8 +3162,7 @@ int Xorriso_parse_gpt_guid(struct XorrisO *xorriso, char *text, int flag)
|
||||
ret= Hex_to_bin(text + 24, 6, &bin_count, u + 10, 0);
|
||||
if(ret < 0 || bin_count != 6)
|
||||
goto malformed;
|
||||
xorriso->gpt_guid_mode= 1;
|
||||
memcpy(xorriso->gpt_guid, u, 16);
|
||||
memcpy(guid, u, 16);
|
||||
return(1);
|
||||
}
|
||||
}
|
||||
@ -3172,15 +3170,67 @@ int Xorriso_parse_gpt_guid(struct XorrisO *xorriso, char *text, int flag)
|
||||
ret= Hex_to_bin(text, 16, &bin_count, u, 0);
|
||||
if(ret < 0 || bin_count != 16)
|
||||
goto malformed;
|
||||
xorriso->gpt_guid_mode= 1;
|
||||
memcpy(xorriso->gpt_guid, u, 16);
|
||||
memcpy(guid, u, 16);
|
||||
return(1);
|
||||
}
|
||||
|
||||
malformed:;
|
||||
sprintf(xorriso->info_text, "Malformed GUID string: ");
|
||||
Text_shellsafe(text, xorriso->info_text, 1);
|
||||
Xorriso_msgs_submit(xorriso, 0, xorriso->info_text, 0, "FAILURE", 0);
|
||||
if(!(flag & 1)) {
|
||||
sprintf(xorriso->info_text, "Malformed GUID string: ");
|
||||
Text_shellsafe(text, xorriso->info_text, 1);
|
||||
Xorriso_msgs_submit(xorriso, 0, xorriso->info_text, 0, "FAILURE", 0);
|
||||
}
|
||||
return(0);
|
||||
}
|
||||
|
||||
|
||||
int Xorriso_parse_gpt_guid(struct XorrisO *xorriso, char *text, int flag)
|
||||
{
|
||||
int ret;
|
||||
|
||||
if(strcmp(text, "random") == 0) {
|
||||
xorriso->gpt_guid_mode= 0;
|
||||
return(1);
|
||||
}
|
||||
if(strcmp(text, "modification-date") == 0 ||
|
||||
strcmp(text, "volume_date_uuid") == 0) {
|
||||
xorriso->gpt_guid_mode= 2;
|
||||
return(1);
|
||||
}
|
||||
ret= Xorriso_parse_guid(xorriso, text, xorriso->gpt_guid, 0);
|
||||
if(ret <= 0)
|
||||
return(ret);
|
||||
xorriso->gpt_guid_mode= 1;
|
||||
return(1);
|
||||
}
|
||||
|
||||
/* @return Tells the recognition status
|
||||
0= not recognized as GUID
|
||||
1= non-EFI type GUID
|
||||
2= EFI type GUID
|
||||
*/
|
||||
int Xorriso_parse_type_guid(struct XorrisO *xorriso, char *text,
|
||||
uint8_t guid[16], int *mbr_type, int flag)
|
||||
{
|
||||
int j, ret;
|
||||
static uint8_t efi_sys_uuid[16] = {
|
||||
0x28, 0x73, 0x2a, 0xc1, 0x1f, 0xf8, 0xd2, 0x11,
|
||||
0xba, 0x4b, 0x00, 0xa0, 0xc9, 0x3e, 0xc9, 0x3b
|
||||
};
|
||||
|
||||
ret= Xorriso_parse_guid(xorriso, text, guid, 1);
|
||||
if(ret > 0) {
|
||||
for(j= 0; j < 16; j++)
|
||||
if(guid[j] != efi_sys_uuid[j])
|
||||
break;
|
||||
if(j >= 16) {
|
||||
*mbr_type= 0xef;
|
||||
return(2);
|
||||
} else {
|
||||
*mbr_type= 0x83;
|
||||
return(1);
|
||||
}
|
||||
}
|
||||
return(0);
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user