New bootspec "gpt_disk_guid=", new -as mkisofs option --gpt_disk_guid, new -report_system_area mode "make_guid"
This commit is contained in:
@ -953,6 +953,7 @@ int Xorriso_make_iso_write_opts(struct XorrisO *xorriso, IsoImage *image,
|
||||
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_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);
|
||||
isoburn_igopt_set_hfsp_block_size(sopts, xorriso->hfsp_block_size,
|
||||
@ -3062,3 +3063,57 @@ ex:;
|
||||
return(ret);
|
||||
}
|
||||
|
||||
|
||||
int Xorriso_parse_gpt_guid(struct XorrisO *xorriso, char *text, int flag)
|
||||
{
|
||||
int bin_count= 0, ret;
|
||||
uint8_t u[16];
|
||||
|
||||
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 */
|
||||
if(strlen(text) == 36) {
|
||||
if(text[8] == '-' && text[13] == '-' && text[18] == '-' && text[23] == '-'){
|
||||
ret= Hex_to_bin(text, 4, &bin_count, u, 0);
|
||||
if(ret < 0 || bin_count != 4)
|
||||
goto malformed;
|
||||
ret= Hex_to_bin(text + 9, 2, &bin_count, u + 4, 0);
|
||||
if(ret < 0 || bin_count != 2)
|
||||
goto malformed;
|
||||
ret= Hex_to_bin(text + 14, 2, &bin_count, u + 6, 0);
|
||||
if(ret < 0 || bin_count != 2)
|
||||
goto malformed;
|
||||
ret= Hex_to_bin(text + 19, 2, &bin_count, u + 8, 0);
|
||||
if(ret < 0 || bin_count != 2)
|
||||
goto malformed;
|
||||
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);
|
||||
return(1);
|
||||
}
|
||||
}
|
||||
if(strlen(text) == 32) {
|
||||
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);
|
||||
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);
|
||||
return(0);
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user