New API calls isoburn_igopt_set_part_type_guid(), isoburn_igopt_get_part_type_guid(), isoburn_igopt_set_iso_type_guid(), isoburn_igopt_get_iso_type_guid()

This commit is contained in:
2019-02-18 13:03:37 +01:00
parent 122e43da86
commit caf38e81ae
4 changed files with 175 additions and 10 deletions

View File

@ -6,8 +6,8 @@
/*
Class core of libisoburn.
Copyright 2007 - 2017 Vreixo Formoso Lopes <metalpain2002@yahoo.es>
Thomas Schmitt <scdbackup@gmx.net>
Copyright 2007 - 2009 Vreixo Formoso Lopes <metalpain2002@yahoo.es>
Copyright 2007 - 2019 Thomas Schmitt <scdbackup@gmx.net>
Provided under GPL version 2 or later.
*/
@ -554,11 +554,16 @@ int isoburn_make_iso_write_opts(struct isoburn *out_o,
0, "FAILURE", 0);
{ret= -1; goto ex;}
}
iso_write_opts_set_part_type_guid(wopts, i + 1,
opts->appended_part_type_guids[i],
opts->appended_part_gpt_flags[i] & 1);
}
iso_write_opts_set_appended_as_gpt(wopts, opts->appended_as_gpt);
iso_write_opts_set_appended_as_apm(wopts, opts->appended_as_apm);
iso_write_opts_set_part_like_isohybrid(wopts, opts->part_like_isohybrid);
iso_write_opts_set_iso_mbr_part_type(wopts, opts->iso_mbr_part_type);
iso_write_opts_set_iso_type_guid(wopts, opts->iso_gpt_type_guid,
opts->iso_gpt_flag & 1);
iso_write_opts_set_disc_label(wopts, opts->ascii_disc_label);
ret= 1;
@ -1176,6 +1181,8 @@ int isoburn_igopt_new(struct isoburn_imgen_opts **new_o, int flag)
o->appended_partitions[i]= NULL;
o->appended_part_types[i]= 0;
o->appended_part_flags[i]= 0;
memset(o->appended_part_type_guids[i], 0, 16);
o->appended_part_gpt_flags[i]= 0;
}
o->appended_as_gpt= 0;
o->appended_as_apm= 0;
@ -1781,6 +1788,48 @@ int isoburn_igopt_get_appended_as_gpt(struct isoburn_imgen_opts *opts,
}
int isoburn_igopt_set_part_type_guid(struct isoburn_imgen_opts *opts,
int partition_number, uint8_t guid[16],
int valid)
{
char msg[80];
if (partition_number < 1 ||
partition_number > Libisoburn_max_appended_partitionS) {
sprintf(msg, "Partition number is out of range (1 ... %d)",
Libisoburn_max_appended_partitionS);
isoburn_msgs_submit(NULL, 0x00060000, msg, 0, "FAILURE", 0);
return(0);
}
if(valid)
memcpy(opts->appended_part_type_guids[partition_number - 1], guid, 16);
if(valid)
opts->appended_part_gpt_flags[partition_number - 1]|= 1;
else
opts->appended_part_gpt_flags[partition_number - 1]&= ~1;
return(1);
}
int isoburn_igopt_get_part_type_guid(struct isoburn_imgen_opts *opts,
int num_entries, uint8_t guids[][16],
int valids[])
{
int i, max_entry= 0;
for(i= 0; i < num_entries; i++) {
memset(guids[i], 0, 16);
valids[i]= 0;
}
for(i= 0; i < Libisoburn_max_appended_partitionS; i++) {
if(i < num_entries) {
memcpy(guids[i], opts->appended_part_type_guids[i], 16);
valids[i]= opts->appended_part_gpt_flags[i] & 1;
}
max_entry= i + 1;
}
return(max_entry);
}
int isoburn_igopt_set_appended_as_apm(struct isoburn_imgen_opts *opts, int apm)
{
opts->appended_as_apm= !!apm;
@ -1830,6 +1879,24 @@ int isoburn_igopt_get_iso_mbr_part_type(struct isoburn_imgen_opts *opts,
}
int isoburn_igopt_set_iso_type_guid(struct isoburn_imgen_opts *opts,
uint8_t guid[16], int valid)
{
if(valid)
memcpy(opts->iso_gpt_type_guid, guid, 16);
opts->iso_gpt_flag= (opts->iso_gpt_flag & ~1) | !!valid;
return(1);
}
int isoburn_igopt_get_iso_type_guid(struct isoburn_imgen_opts *opts,
uint8_t guid[16])
{
memcpy(guid, opts->iso_gpt_type_guid, 16);
return(opts->iso_gpt_flag & 1);
}
int isoburn_igopt_set_gpt_guid(struct isoburn_imgen_opts *opts,
uint8_t guid[16], int mode)
{