New bootspec "gpt_disk_guid=", new -as mkisofs option --gpt_disk_guid, new -report_system_area mode "make_guid"

This commit is contained in:
2016-08-12 18:57:21 +00:00
parent 79a45f90f6
commit d4be334960
18 changed files with 322 additions and 113 deletions

View File

@ -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);
}