mirror of
https://github.com/libretro/RetroArch
synced 2025-04-01 13:20:43 +00:00
task_patch.c - cleanups
This commit is contained in:
parent
6433cde3c0
commit
8ae708576f
@ -62,22 +62,37 @@ enum patch_error
|
|||||||
|
|
||||||
struct bps_data
|
struct bps_data
|
||||||
{
|
{
|
||||||
const uint8_t *modify_data, *source_data;
|
const uint8_t *modify_data;
|
||||||
|
const uint8_t *source_data;
|
||||||
uint8_t *target_data;
|
uint8_t *target_data;
|
||||||
size_t modify_length, source_length, target_length;
|
size_t modify_length;
|
||||||
size_t modify_offset, source_offset, target_offset;
|
size_t source_length;
|
||||||
uint32_t modify_checksum, source_checksum, target_checksum;
|
size_t target_length;
|
||||||
|
size_t modify_offset;
|
||||||
size_t source_relative_offset, target_relative_offset, output_offset;
|
size_t source_offset;
|
||||||
|
size_t target_offset;
|
||||||
|
uint32_t modify_checksum;
|
||||||
|
uint32_t source_checksum;
|
||||||
|
uint32_t target_checksum;
|
||||||
|
size_t source_relative_offset;
|
||||||
|
size_t target_relative_offset;
|
||||||
|
size_t output_offset;
|
||||||
};
|
};
|
||||||
|
|
||||||
struct ups_data
|
struct ups_data
|
||||||
{
|
{
|
||||||
const uint8_t *patch_data, *source_data;
|
const uint8_t *patch_data;
|
||||||
|
const uint8_t *source_data;
|
||||||
uint8_t *target_data;
|
uint8_t *target_data;
|
||||||
unsigned patch_length, source_length, target_length;
|
unsigned patch_length;
|
||||||
unsigned patch_offset, source_offset, target_offset;
|
unsigned source_length;
|
||||||
unsigned patch_checksum, source_checksum, target_checksum;
|
unsigned target_length;
|
||||||
|
unsigned patch_offset;
|
||||||
|
unsigned source_offset;
|
||||||
|
unsigned target_offset;
|
||||||
|
unsigned patch_checksum;
|
||||||
|
unsigned source_checksum;
|
||||||
|
unsigned target_checksum;
|
||||||
};
|
};
|
||||||
|
|
||||||
typedef enum patch_error (*patch_func_t)(const uint8_t*, size_t,
|
typedef enum patch_error (*patch_func_t)(const uint8_t*, size_t,
|
||||||
@ -127,7 +142,7 @@ static enum patch_error bps_apply_patch(
|
|||||||
size_t modify_source_size;
|
size_t modify_source_size;
|
||||||
size_t modify_target_size;
|
size_t modify_target_size;
|
||||||
size_t modify_markup_size;
|
size_t modify_markup_size;
|
||||||
struct bps_data bps = {0};
|
struct bps_data bps;
|
||||||
uint32_t modify_source_checksum = 0;
|
uint32_t modify_source_checksum = 0;
|
||||||
uint32_t modify_target_checksum = 0;
|
uint32_t modify_target_checksum = 0;
|
||||||
uint32_t modify_modify_checksum = 0;
|
uint32_t modify_modify_checksum = 0;
|
||||||
@ -135,22 +150,32 @@ static enum patch_error bps_apply_patch(
|
|||||||
if (modify_length < 19)
|
if (modify_length < 19)
|
||||||
return PATCH_PATCH_TOO_SMALL;
|
return PATCH_PATCH_TOO_SMALL;
|
||||||
|
|
||||||
bps.modify_data = modify_data;
|
bps.modify_data = modify_data;
|
||||||
bps.modify_length = modify_length;
|
bps.source_data = source_data;
|
||||||
bps.target_data = target_data;
|
bps.target_data = target_data;
|
||||||
bps.target_length = *target_length;
|
bps.modify_length = modify_length;
|
||||||
bps.source_data = source_data;
|
bps.source_length = source_length;
|
||||||
bps.source_length = source_length;
|
bps.target_length = *target_length;
|
||||||
bps.modify_checksum = ~0;
|
bps.modify_offset = 0;
|
||||||
bps.target_checksum = ~0;
|
bps.source_offset = 0;
|
||||||
|
bps.target_offset = 0;
|
||||||
|
bps.modify_checksum = ~0;
|
||||||
|
bps.source_checksum = 0;
|
||||||
|
bps.target_checksum = ~0;
|
||||||
|
bps.source_relative_offset = 0;
|
||||||
|
bps.target_relative_offset = 0;
|
||||||
|
bps.output_offset = 0;
|
||||||
|
|
||||||
if ((bps_read(&bps) != 'B') || (bps_read(&bps) != 'P') ||
|
if ( (bps_read(&bps) != 'B') ||
|
||||||
(bps_read(&bps) != 'S') || (bps_read(&bps) != '1'))
|
(bps_read(&bps) != 'P') ||
|
||||||
|
(bps_read(&bps) != 'S') ||
|
||||||
|
(bps_read(&bps) != '1'))
|
||||||
return PATCH_PATCH_INVALID_HEADER;
|
return PATCH_PATCH_INVALID_HEADER;
|
||||||
|
|
||||||
modify_source_size = bps_decode(&bps);
|
modify_source_size = bps_decode(&bps);
|
||||||
modify_target_size = bps_decode(&bps);
|
modify_target_size = bps_decode(&bps);
|
||||||
modify_markup_size = bps_decode(&bps);
|
modify_markup_size = bps_decode(&bps);
|
||||||
|
|
||||||
for (i = 0; i < modify_markup_size; i++)
|
for (i = 0; i < modify_markup_size; i++)
|
||||||
bps_read(&bps);
|
bps_read(&bps);
|
||||||
|
|
||||||
@ -294,13 +319,13 @@ static enum patch_error ups_apply_patch(
|
|||||||
uint8_t *targetdata, size_t *targetlength)
|
uint8_t *targetdata, size_t *targetlength)
|
||||||
{
|
{
|
||||||
size_t i;
|
size_t i;
|
||||||
|
struct ups_data data;
|
||||||
unsigned source_read_length;
|
unsigned source_read_length;
|
||||||
unsigned target_read_length;
|
unsigned target_read_length;
|
||||||
uint32_t patch_result_checksum;
|
uint32_t patch_result_checksum;
|
||||||
uint32_t patch_read_checksum = 0;
|
uint32_t patch_read_checksum = 0;
|
||||||
uint32_t source_read_checksum = 0;
|
uint32_t source_read_checksum = 0;
|
||||||
uint32_t target_read_checksum = 0;
|
uint32_t target_read_checksum = 0;
|
||||||
struct ups_data data = {0};
|
|
||||||
|
|
||||||
data.patch_data = patchdata;
|
data.patch_data = patchdata;
|
||||||
data.source_data = sourcedata;
|
data.source_data = sourcedata;
|
||||||
@ -308,31 +333,37 @@ static enum patch_error ups_apply_patch(
|
|||||||
data.patch_length = (unsigned)patchlength;
|
data.patch_length = (unsigned)patchlength;
|
||||||
data.source_length = (unsigned)sourcelength;
|
data.source_length = (unsigned)sourcelength;
|
||||||
data.target_length = (unsigned)*targetlength;
|
data.target_length = (unsigned)*targetlength;
|
||||||
|
data.patch_offset = 0;
|
||||||
|
data.source_offset = 0;
|
||||||
|
data.target_offset = 0;
|
||||||
data.patch_checksum = ~0;
|
data.patch_checksum = ~0;
|
||||||
data.source_checksum = ~0;
|
data.source_checksum = ~0;
|
||||||
data.target_checksum = ~0;
|
data.target_checksum = ~0;
|
||||||
|
|
||||||
if (data.patch_length < 18)
|
if (data.patch_length < 18)
|
||||||
return PATCH_PATCH_INVALID;
|
return PATCH_PATCH_INVALID;
|
||||||
if (ups_patch_read(&data) != 'U')
|
|
||||||
return PATCH_PATCH_INVALID;
|
if (
|
||||||
if (ups_patch_read(&data) != 'P')
|
(ups_patch_read(&data) != 'U') ||
|
||||||
return PATCH_PATCH_INVALID;
|
(ups_patch_read(&data) != 'P') ||
|
||||||
if (ups_patch_read(&data) != 'S')
|
(ups_patch_read(&data) != 'S') ||
|
||||||
return PATCH_PATCH_INVALID;
|
(ups_patch_read(&data) != '1')
|
||||||
if (ups_patch_read(&data) != '1')
|
)
|
||||||
return PATCH_PATCH_INVALID;
|
return PATCH_PATCH_INVALID;
|
||||||
|
|
||||||
source_read_length = (unsigned)ups_decode(&data);
|
source_read_length = (unsigned)ups_decode(&data);
|
||||||
target_read_length = (unsigned)ups_decode(&data);
|
target_read_length = (unsigned)ups_decode(&data);
|
||||||
|
|
||||||
if (data.source_length != source_read_length
|
if ( (data.source_length != source_read_length)
|
||||||
&& data.source_length != target_read_length)
|
&& (data.source_length != target_read_length))
|
||||||
return PATCH_SOURCE_INVALID;
|
return PATCH_SOURCE_INVALID;
|
||||||
|
|
||||||
*targetlength = (data.source_length == source_read_length ?
|
*targetlength = (data.source_length == source_read_length ?
|
||||||
target_read_length : source_read_length);
|
target_read_length : source_read_length);
|
||||||
|
|
||||||
if (data.target_length < *targetlength)
|
if (data.target_length < *targetlength)
|
||||||
return PATCH_TARGET_TOO_SMALL;
|
return PATCH_TARGET_TOO_SMALL;
|
||||||
|
|
||||||
data.target_length = (unsigned)*targetlength;
|
data.target_length = (unsigned)*targetlength;
|
||||||
|
|
||||||
while (data.patch_offset < data.patch_length - 12)
|
while (data.patch_offset < data.patch_length - 12)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user