diff --git a/database_info.c b/database_info.c index 73a3e5540a..3ae1d14223 100644 --- a/database_info.c +++ b/database_info.c @@ -286,7 +286,7 @@ static int database_cursor_iterate(libretrodb_cursor_t *cur, db_info->size = val->uint_; break; case DB_CURSOR_CHECKSUM_CRC32: - db_info->crc32 = bin_to_hex_alloc((uint8_t*)val->binary.buff, val->binary.len); + db_info->crc32 = swap_if_little32(*(uint32_t*)val->binary.buff); break; case DB_CURSOR_CHECKSUM_SHA1: db_info->sha1 = bin_to_hex_alloc((uint8_t*)val->binary.buff, val->binary.len); @@ -512,8 +512,6 @@ void database_info_list_free(database_info_list_t *database_info_list) free(info->esrb_rating); if (info->bbfc_rating) free(info->bbfc_rating); - if (info->crc32) - free(info->crc32); if (info->sha1) free(info->sha1); if (info->md5) diff --git a/database_info.h b/database_info.h index 8335500786..d7d0d26fe8 100644 --- a/database_info.h +++ b/database_info.h @@ -75,7 +75,7 @@ typedef struct char *pegi_rating; char *cero_rating; char *enhancement_hw; - char *crc32; + uint32_t crc32; char *sha1; char *md5; unsigned size; diff --git a/menu/menu_displaylist.c b/menu/menu_displaylist.c index d5b63c253d..e25c5fdc13 100644 --- a/menu/menu_displaylist.c +++ b/menu/menu_displaylist.c @@ -945,11 +945,14 @@ static int menu_displaylist_parse_database_entry(menu_displaylist_info_t *info) for (i = 0; i < db_info->count; i++) { char tmp[PATH_MAX_LENGTH]; + char crc_str[20] = {0}; database_info_t *db_info_entry = &db_info->list[i]; if (!db_info_entry) continue; + snprintf(crc_str, sizeof(crc_str), "%08X", db_info_entry->crc32); + if (playlist) { for (j = 0; j < playlist->size; j++) @@ -973,7 +976,7 @@ static int menu_displaylist_parse_database_entry(menu_displaylist_info_t *info) switch (hash_value) { case MENU_VALUE_CRC: - if (!strcmp(db_info_entry->crc32, elem0)) + if (!strcmp(crc_str, elem0)) match_found = true; break; case MENU_VALUE_SHA1: @@ -1147,7 +1150,7 @@ static int menu_displaylist_parse_database_entry(menu_displaylist_info_t *info) if (db_info_entry->crc32) { if (create_string_list_rdb_entry_string("CRC32 Checksum", - "rdb_entry_crc32", db_info_entry->crc32, + "rdb_entry_crc32", crc_str, info->path, info->list) == -1) goto error; } @@ -1165,7 +1168,6 @@ static int menu_displaylist_parse_database_entry(menu_displaylist_info_t *info) info->path, info->list) == -1) goto error; } - } if (db_info->count < 1) diff --git a/tasks/task_database.c b/tasks/task_database.c index 7dc704ec30..c2cb8b7e9c 100644 --- a/tasks/task_database.c +++ b/tasks/task_database.c @@ -177,7 +177,7 @@ static int database_info_list_iterate_found_match( playlist = content_playlist_init(db_playlist_path, 1000); - snprintf(db_crc, sizeof(db_crc), "%s|crc", db_info_entry->crc32); + snprintf(db_crc, sizeof(db_crc), "%08X|crc", db_info_entry->crc32); strlcpy(entry_path_str, entry_path, sizeof(entry_path_str)); if (zip_name && zip_name[0] != '\0') @@ -236,18 +236,13 @@ static int database_info_iterate_crc_lookup( { database_info_t *db_info_entry = &db_state->info->list[db_state->entry_index]; - if (db_info_entry && db_info_entry->crc32 && db_info_entry->crc32[0] != '\0') + if (db_info_entry && db_info_entry->crc32) { - char entry_state_crc[PATH_MAX_LENGTH]; - /* Check if the CRC matches with the current entry. */ - snprintf(entry_state_crc, sizeof(entry_state_crc), "%x", db_state->crc); - #if 0 - RARCH_LOG("CRC32: 0x%s , entry CRC32: 0x%s (%s).\n", - entry_state_crc, db_info_entry->crc32, db_info_entry->name); + RARCH_LOG("CRC32: 0x%08X , entry CRC32: 0x%08X (%s).\n", + db_state->crc, db_info_entry->crc32, db_info_entry->name); #endif - - if (strcasestr(entry_state_crc, db_info_entry->crc32)) + if (db_state->crc == db_info_entry->crc32) database_info_list_iterate_found_match(db_state, db, zip_entry); } }