New -append_partition pseudo partition_number "all" und pseudo type_code "revoke"
This commit is contained in:
@ -303,45 +303,74 @@ int Xorriso_option_append_partition(struct XorrisO *xorriso, char *partno_text,
|
||||
static char *part_type_names[] = {"FAT12", "FAT16", "Linux", "", NULL};
|
||||
static int part_type_codes[] = { 0x01, 0x06, 0x83, 0x00};
|
||||
|
||||
sscanf(partno_text, "%d", &partno);
|
||||
if(partno < 1 || partno > Xorriso_max_appended_partitionS) {
|
||||
sprintf(xorriso->info_text,
|
||||
"-append_partition: Partition number '%s' is out of range (1...%d)",
|
||||
partno_text, Xorriso_max_appended_partitionS);
|
||||
Xorriso_msgs_submit(xorriso, 0, xorriso->info_text, 0, "FAILURE", 0);
|
||||
return(0);
|
||||
}
|
||||
for(i= 0; part_type_names[i] != NULL; i++)
|
||||
if(strcmp(part_type_names[i], type_text) == 0)
|
||||
break;
|
||||
if(part_type_names[i] != NULL)
|
||||
type_code= part_type_codes[i];
|
||||
if(type_code < 0) {
|
||||
ret= Xorriso_parse_type_guid(xorriso, type_text, guid, &type_code, 0);
|
||||
if(ret > 0)
|
||||
guid_valid= 1;
|
||||
}
|
||||
|
||||
if(type_code < 0) {
|
||||
tpt= type_text;
|
||||
if(strncmp(tpt, "0x", 2) == 0)
|
||||
tpt+= 2;
|
||||
else
|
||||
goto bad_type;
|
||||
unum= 0xffffffff;
|
||||
sscanf(tpt, "%X", &unum);
|
||||
if(unum > 0xff) {
|
||||
bad_type:;
|
||||
if(strcmp(partno_text, "all") == 0) {
|
||||
if(strcmp(type_text, "revoke") != 0 && image_path[0] != 0) {
|
||||
sprintf(xorriso->info_text,
|
||||
"-append_partition: Partition type '%s' is out of range (0x00...0xff or GUID)",
|
||||
type_text);
|
||||
"-append_partition: Pseudo partition number 'all' works only with type code 'revoke' or empty disk path");
|
||||
Xorriso_msgs_submit(xorriso, 0, xorriso->info_text, 0, "FAILURE", 0);
|
||||
return(0);
|
||||
}
|
||||
partno= -1;
|
||||
} else {
|
||||
sscanf(partno_text, "%d", &partno);
|
||||
if(partno < 1 || partno > Xorriso_max_appended_partitionS) {
|
||||
sprintf(xorriso->info_text,
|
||||
"-append_partition: Partition number '%s' is out of range (1...%d)",
|
||||
partno_text, Xorriso_max_appended_partitionS);
|
||||
Xorriso_msgs_submit(xorriso, 0, xorriso->info_text, 0, "FAILURE", 0);
|
||||
return(0);
|
||||
}
|
||||
type_code= unum;
|
||||
}
|
||||
|
||||
disable= (image_path[0] == 0);
|
||||
if(strcmp(type_text, "revoke") == 0) {
|
||||
disable= 1;
|
||||
} else {
|
||||
for(i= 0; part_type_names[i] != NULL; i++)
|
||||
if(strcmp(part_type_names[i], type_text) == 0)
|
||||
break;
|
||||
if(part_type_names[i] != NULL)
|
||||
type_code= part_type_codes[i];
|
||||
if(type_code < 0) {
|
||||
ret= Xorriso_parse_type_guid(xorriso, type_text, guid, &type_code, 0);
|
||||
if(ret > 0)
|
||||
guid_valid= 1;
|
||||
}
|
||||
if(type_code < 0) {
|
||||
tpt= type_text;
|
||||
if(strncmp(tpt, "0x", 2) == 0)
|
||||
tpt+= 2;
|
||||
else
|
||||
goto bad_type;
|
||||
unum= 0xffffffff;
|
||||
sscanf(tpt, "%X", &unum);
|
||||
if(unum > 0xff) {
|
||||
bad_type:;
|
||||
sprintf(xorriso->info_text,
|
||||
"-append_partition: Partition type '%s' is out of range (0x00...0xff or GUID)",
|
||||
type_text);
|
||||
Xorriso_msgs_submit(xorriso, 0, xorriso->info_text, 0, "FAILURE", 0);
|
||||
return(0);
|
||||
}
|
||||
type_code= unum;
|
||||
}
|
||||
disable= (image_path[0] == 0);
|
||||
}
|
||||
|
||||
if(partno == -1) {
|
||||
/* All partitions */
|
||||
set_changed= 0;
|
||||
for(i= 0; i < Xorriso_max_appended_partitionS; i++) {
|
||||
/* For now only pseudo-type 'revoke' works for all partitions */
|
||||
if(xorriso->appended_partitions[i - 1] != NULL) {
|
||||
if(xorriso->appended_partitions[i - 1][0] != 0)
|
||||
set_changed= 1;
|
||||
free(xorriso->appended_partitions[i - 1]);
|
||||
xorriso->appended_partitions[i - 1]= NULL;
|
||||
}
|
||||
}
|
||||
goto work_done;
|
||||
}
|
||||
|
||||
set_changed= 1;
|
||||
if(xorriso->appended_partitions[partno - 1] != NULL) {
|
||||
if(strcmp(xorriso->appended_partitions[partno - 1], image_path) == 0)
|
||||
@ -354,6 +383,7 @@ bad_type:;
|
||||
}
|
||||
if(disable)
|
||||
goto work_done;
|
||||
|
||||
xorriso->appended_partitions[partno - 1]= strdup(image_path);
|
||||
if(xorriso->appended_partitions[partno - 1] == NULL) {
|
||||
Xorriso_no_malloc_memory(xorriso, NULL, 0);
|
||||
|
Reference in New Issue
Block a user