mirror of
https://github.com/CTCaer/RetroArch.git
synced 2024-12-03 00:06:47 +00:00
Update RDB building to ignore missing keys
This change makes it so that when building the RDB files, the entries that are missing `serial` keys will simply be ignored and the RDB file will still build. When it's missing the key, it also logs which line it's processing so that we can easily fix the broken entry in libretro-database.
This commit is contained in:
parent
0dd2304e7c
commit
11f8938f7e
@ -192,7 +192,7 @@ static dat_converter_bt_node_t* dat_converter_bt_node_insert(
|
||||
{
|
||||
int i;
|
||||
|
||||
retro_assert(list->values[(*node)->index].map.value.list->type
|
||||
retro_assert(list->values[(*node)->index].map.value.list->type
|
||||
== map->value.list->type);
|
||||
|
||||
for (i = 0; i < map->value.list->count; i++)
|
||||
@ -241,7 +241,7 @@ static void dat_converter_list_append(dat_converter_list_t* dst, void* item)
|
||||
else
|
||||
{
|
||||
map->hash = djb2_calculate(map->key);
|
||||
dat_converter_bt_node_t* new_node =
|
||||
dat_converter_bt_node_t* new_node =
|
||||
dat_converter_bt_node_insert(dst, &dst->bt_root, map);
|
||||
|
||||
if (!new_node)
|
||||
@ -268,7 +268,7 @@ static void dat_converter_list_append(dat_converter_list_t* dst, void* item)
|
||||
static dat_converter_list_t* dat_converter_lexer(
|
||||
char* src, const char* dat_path)
|
||||
{
|
||||
dat_converter_list_t* token_list =
|
||||
dat_converter_list_t* token_list =
|
||||
dat_converter_list_create(DAT_CONVERTER_TOKEN_LIST);
|
||||
dat_converter_token_t token = {NULL, 1, 1, dat_path};
|
||||
bool quoted_token = false;
|
||||
@ -332,7 +332,7 @@ static dat_converter_list_t* dat_converter_lexer(
|
||||
static dat_converter_list_t* dat_parser_table(
|
||||
dat_converter_list_item_t** start_token)
|
||||
{
|
||||
dat_converter_list_t* parsed_table =
|
||||
dat_converter_list_t* parsed_table =
|
||||
dat_converter_list_create(DAT_CONVERTER_MAP_LIST);
|
||||
dat_converter_map_t map = {0};
|
||||
dat_converter_list_item_t* current = *start_token;
|
||||
@ -527,23 +527,27 @@ static dat_converter_list_t* dat_converter_parser(
|
||||
if (match_key)
|
||||
{
|
||||
map.key = dat_converter_get_match(map.value.list, match_key);
|
||||
// If the key is not found, report, and mark it to be skipped.
|
||||
if (!map.key)
|
||||
{
|
||||
printf("missing match key '");
|
||||
printf("Missing match key '");
|
||||
while (match_key->next)
|
||||
{
|
||||
printf("%s.", match_key->value);
|
||||
match_key = match_key->next;
|
||||
}
|
||||
printf("%s' in one of the entries\n", match_key->value);
|
||||
dat_converter_exit(1);
|
||||
printf("%s' on line %d\n", match_key->value, current->token.line_no);
|
||||
skip = true;
|
||||
}
|
||||
}
|
||||
else
|
||||
map.key = NULL;
|
||||
|
||||
dat_converter_list_append(target, &map);
|
||||
skip = true;
|
||||
// If we are still not to skip the entry, append it to the list.
|
||||
if (!skip) {
|
||||
dat_converter_list_append(target, &map);
|
||||
skip = true;
|
||||
}
|
||||
}
|
||||
else
|
||||
dat_converter_list_free(map.value.list);
|
||||
@ -619,7 +623,7 @@ dat_converter_rdb_mappings_t rdb_mappings[] =
|
||||
{"rom.serial", "serial", DAT_CONVERTER_RDB_TYPE_BINARY}
|
||||
};
|
||||
|
||||
dat_converter_match_key_t* rdb_mappings_mk[(sizeof(rdb_mappings)
|
||||
dat_converter_match_key_t* rdb_mappings_mk[(sizeof(rdb_mappings)
|
||||
/ sizeof(*rdb_mappings))] = {0};
|
||||
|
||||
static void dat_converter_value_provider_init(void)
|
||||
@ -695,7 +699,7 @@ static int dat_converter_value_provider(
|
||||
case DAT_CONVERTER_RDB_TYPE_HEX:
|
||||
current->value.type = RDT_BINARY;
|
||||
current->value.val.binary.len = strlen(value) / 2;
|
||||
current->value.val.binary.buff =
|
||||
current->value.val.binary.buff =
|
||||
malloc(current->value.val.binary.len);
|
||||
{
|
||||
const char* hex_char = value;
|
||||
@ -812,11 +816,11 @@ int main(int argc, char** argv)
|
||||
dat_converter_exit(1);
|
||||
}
|
||||
|
||||
dat_converter_list_item_t* current_item =
|
||||
dat_converter_list_item_t* current_item =
|
||||
&dat_parser_list->values[dat_parser_list->count];
|
||||
|
||||
dat_converter_value_provider_init();
|
||||
libretrodb_create(rdb_file,
|
||||
libretrodb_create(rdb_file,
|
||||
(libretrodb_value_provider)&dat_converter_value_provider,
|
||||
¤t_item);
|
||||
dat_converter_value_provider_free();
|
||||
@ -833,4 +837,3 @@ int main(int argc, char** argv)
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user