Commit 29c63621 authored by NiteHawk's avatar NiteHawk Committed by GitHub
Browse files

Merge pull request #80 from n1tehawk/contrib

fexc: Fix .bin header treatment, improve .fex parser
parents bf735b2c 2e6697b2
......@@ -97,7 +97,7 @@ size_t script_bin_size(struct script *script,
return bin_size;
}
int script_generate_bin(void *bin, size_t UNUSED(bin_size),
int script_generate_bin(void *bin, size_t bin_size,
struct script *script,
size_t sections, size_t entries)
{
......@@ -122,9 +122,9 @@ int script_generate_bin(void *bin, size_t UNUSED(bin_size),
(void*)data-bin);
head->sections = sections;
head->version[0] = 0;
head->version[1] = 1;
head->version[2] = 2;
head->filesize = bin_size;
head->version[0] = 1;
head->version[1] = 2;
for (ls = list_first(&script->sections); ls;
ls = list_next(&script->sections, ls)) {
......@@ -326,11 +326,10 @@ int script_decompile_bin(void *bin, size_t bin_size,
unsigned int i;
struct script_bin_head *head = bin;
if (((head->version[0] & 0x3FFF) > SCRIPT_BIN_VERSION_LIMIT) ||
(head->version[1] > SCRIPT_BIN_VERSION_LIMIT) ||
(head->version[2] > SCRIPT_BIN_VERSION_LIMIT)) {
pr_err("Malformed data: version %u.%u.%u.\n",
head->version[0], head->version[1], head->version[2]);
if ((head->version[0] > SCRIPT_BIN_VERSION_LIMIT) ||
(head->version[1] > SCRIPT_BIN_VERSION_LIMIT)) {
pr_err("Malformed data: version %u.%u.\n",
head->version[0], head->version[1]);
return 0;
}
......@@ -340,10 +339,10 @@ int script_decompile_bin(void *bin, size_t bin_size,
return 0;
}
pr_info("%s: version: %u.%u.%u\n", filename,
head->version[0] & 0x3FFF, head->version[1], head->version[2]);
pr_info("%s: size: %zu (%u sections)\n", filename,
bin_size, head->sections);
pr_info("%s: version: %u.%u\n", filename,
head->version[0], head->version[1]);
pr_info("%s: size: %zu (%u sections), header value: %u\n", filename,
bin_size, head->sections, head->filesize);
/* TODO: SANITY: compare head.sections with bin_size */
for (i=0; i < head->sections; i++) {
......
......@@ -27,7 +27,8 @@ struct script_bin_section {
/** binary representation of the head of the script file */
struct script_bin_head {
uint32_t sections;
uint32_t version[3];
uint32_t filesize;
uint32_t version[2];
struct script_bin_section section[];
};
......
......@@ -348,7 +348,15 @@ int script_parse_fex(FILE *in, const char *filename, struct script *script)
continue;
}
} else {
goto invalid_char_at_p;
/* goto invalid_char_at_p; */
errf("Warning: %s:%zu: unquoted value '%s', assuming string\n",
filename, line, p);
if (script_string_entry_new(last_section, key, pe-p, p)) {
pr_debug("%s.%s = \"%s\"\n",
last_section->name, key, p);
continue;
}
perror("malloc");
}
errf("E: %s:%zu: parse error at %zu.\n",
filename, line, p-buffer+1);
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment