/usr/bin/avos:AOS update from file()
From ArchosDocs
Description
Perform an update from an .aos file. See the AOS2 file format page.
References To
- AOS_verify_magic()
- AOS_compare_SIGx_checksum()
- AOS_parse_cipher()
- AOS_parse_unit()
- AOS_parse_version()
- AOS_parse_duration()
- Sys_pk_build_product_key()
- AOS_parse_action_blocks()
The Code
int AOS_file_length;
int AOS_update_from_file(char *file, void *callbacks_table)
{
int fd; // -0x0C
int var_08; // -0x08
var_08 = 0;
fd = -1;
AOS_file_length = 0;
dword_FE9F8C = 0;
dword_FE9F90 = 0;
dword_FE9F94 = 0;
dword_FE9F98 = 0;
dword_FE9F9C = 0;
if(AOS_load_callbacks(callbacks_table) != 1)
return 255;
(AOS_callbacks+4)("opening aos file");
fd = fopen(file, O_RDONLY, 0);
if(fd <= 0)
return 201;
AOS_file_length = (uint32_t)fseek64(fd, SEEK_END, 0);
fseek64(fd, SEEK_SET, 0);
(AOS_callbacks+4)("parsing riff");
var_08 = AOS_verify_magic(fd);
if(var_08 == 0) {
(AOS_callbacks+4)("parsing sign");
var_08 = AOS_compare_SIGx_checksum(fd);
if(var_08 == 0) {
(AOS_callbacks+4)("parsing cipher");
var_08 = AOS_parse_cipher(fd);
if(var_08 == 0) {
(AOS_callbacks+4)("parsing unit");
var_08 = AOS_parse_unit(fd);
if(var_08 == 0) {
(AOS_callbacks+4)("parsing version");
var_08 = AOS_parse_version(fd);
if(var_08 == 0) {
(AOS_callbacks+4)("parsing duration");
var_08 = AOS_parse_duration(fd);
if(var_08 == 0) {
Sys_pk_build_product_key();
do {
var_08 = AOS_parse_action_blocks(fd);
} while(var_08 == 0);
if(dword_FE9F8C != 0) {
if(dword_FE9F9C != 0) {
free(dword_FE9F9C);
}
}
if(var_08 == 252) {
var_08 = 0;
}
}
}
}
}
}
}
if(fd > 0)
fclose(fd);
if(dword_FE9F58 != 0) {
if(var_08 == 0) {
unlink(file);
(AOS_callbacks+0x14)(file);
}
}
return var_08;
}

