New error code ISO_BOOT_APM_OVERLAP

This commit is contained in:
Thomas Schmitt 2012-05-28 09:17:17 +02:00
parent e57e45e40b
commit e9eb22f514
3 changed files with 14 additions and 9 deletions

View File

@ -7003,7 +7003,6 @@ int iso_image_hfsplus_bless(IsoImage *img, enum IsoHfsplusBlessings blessing,
(FAILURE, HIGH, -343) */ (FAILURE, HIGH, -343) */
#define ISO_AAIP_NON_USER_NAME 0xE830FEA9 #define ISO_AAIP_NON_USER_NAME 0xE830FEA9
/** Too many references on a single IsoExternalFilterCommand /** Too many references on a single IsoExternalFilterCommand
(FAILURE, HIGH, -344) */ (FAILURE, HIGH, -344) */
#define ISO_EXTF_TOO_OFTEN 0xE830FEA8 #define ISO_EXTF_TOO_OFTEN 0xE830FEA8
@ -7174,6 +7173,9 @@ int iso_image_hfsplus_bless(IsoImage *img, enum IsoHfsplusBlessings blessing,
/** Too many Apple Partition Map entries requested (FAILURE, HIGH, -383) */ /** Too many Apple Partition Map entries requested (FAILURE, HIGH, -383) */
#define ISO_BOOT_TOO_MANY_APM 0xE830FE81 #define ISO_BOOT_TOO_MANY_APM 0xE830FE81
/** Overlapping Apple Partition Map entries requested (FAILURE, HIGH, -384) */
#define ISO_BOOT_APM_OVERLAP 0xE830FE80
/* Internal developer note: /* Internal developer note:

View File

@ -476,6 +476,8 @@ const char *iso_error_to_msg(int errcode)
return "File sections do not form consecutive array of blocks"; return "File sections do not form consecutive array of blocks";
case ISO_BOOT_TOO_MANY_APM: case ISO_BOOT_TOO_MANY_APM:
return "Too many Apple Partition Map entries requested"; return "Too many Apple Partition Map entries requested";
case ISO_BOOT_APM_OVERLAP:
return "Overlapping Apple Partition Map entries requested";
default: default:
return "Unknown error"; return "Unknown error";
} }

View File

@ -800,8 +800,10 @@ static int iso_write_apm(Ecma119Image *t, uint32_t img_blocks, uint8_t *buf)
if (t->apm_req_count <= 0) { if (t->apm_req_count <= 0) {
/* /*
ret = iso_quick_apm_entry(t, 16, 20, "Test1_name_16_20", "Test1_type"); ret = iso_quick_apm_entry(t, 16, 20, "Test1_name_16_20", "Test1_type");
*/
ret = iso_quick_apm_entry(t, 30, 20, "Test1_name_30_20", "Test1_type"); ret = iso_quick_apm_entry(t, 30, 20, "Test1_name_30_20", "Test1_type");
*/
/* >>> Caution: Size 90 causes intentional partition overlap error */
ret = iso_quick_apm_entry(t, 30, 90, "BAD_30_90_BAD", "Test1_type");
if (ret < 0) if (ret < 0)
return ret; return ret;
ret = iso_quick_apm_entry(t, 100, 400, "Test2_name_100_400", ret = iso_quick_apm_entry(t, 100, 400, "Test2_name_100_400",
@ -846,16 +848,15 @@ static int iso_write_apm(Ecma119Image *t, uint32_t img_blocks, uint8_t *buf)
t->apm_req[i - 1]->block_count; t->apm_req[i - 1]->block_count;
} }
if (part_end > goal) { if (part_end > goal) {
iso_msg_submit(t->image->id, ISO_BOOT_APM_OVERLAP, 0,
/* >>> Overlapping partition. */; "Program error: APM partitions %d and %d oberlap by %lu blocks",
/* >>> Vladimir: "Throw error." */; i - 1, i, part_end - goal);
return ISO_BOOT_APM_OVERLAP;
} }
if (part_end < goal) { if (part_end < goal) {
sprintf(gap_name, "Gap%d", gap_counter); sprintf(gap_name, "Gap%d", gap_counter);
gap_counter++; gap_counter++;
ret = iso_quick_apm_entry(t, part_end, ret = iso_quick_apm_entry(t, part_end, goal - part_end,
goal - part_end,
gap_name, "ISO9660_data"); gap_name, "ISO9660_data");
if (ret < 0) if (ret < 0)
return ret; return ret;