/usr/bin/avos:AOS update from file()

From ArchosDocs

Jump to: navigation, search

Description

Perform an update from an .aos file. See the AOS2 file format page.

References To

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;
}
Personal tools