diff --git a/database_info.c b/database_info.c index 2dfeaeedec..cca0cab313 100644 --- a/database_info.c +++ b/database_info.c @@ -159,6 +159,25 @@ database_info_list_t *database_info_list_new(const char *rdb_path, const char *q if (!strcmp(key->string.buff, "analog")) db_info->analog_supported = val->uint_; + + if (!strcmp(key->string.buff, "crc")) + { + unsigned i; + db_info->crc32 = (char*)calloc(val->binary.len, sizeof(unsigned char)); + + if (db_info->crc32) + { + char crc32[PATH_MAX_LENGTH]; + + for (i = 0; i < val->binary.len; i++) + { + char crc32_cat[PATH_MAX_LENGTH]; + snprintf(crc32_cat, sizeof(crc32_cat), "%02X", (unsigned char)val->binary.buff[i]); + strlcat(crc32, crc32_cat, sizeof(crc32)); + } + strlcpy(db_info->crc32, crc32, sizeof(db_info->crc32)); + } + } } i++; } @@ -216,6 +235,8 @@ 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); } free(database_info_list->list); diff --git a/database_info.h b/database_info.h index 5f3ab1ebc1..72d65a6300 100644 --- a/database_info.h +++ b/database_info.h @@ -40,6 +40,7 @@ typedef struct char *pegi_rating; char *cero_rating; char *enhancement_hw; + char *crc32; unsigned edge_magazine_rating; unsigned edge_magazine_issue; unsigned max_users; diff --git a/menu/menu_entries_cbs.c b/menu/menu_entries_cbs.c index 2fa8dd672c..5d28e8979d 100644 --- a/menu/menu_entries_cbs.c +++ b/menu/menu_entries_cbs.c @@ -777,7 +777,7 @@ static int create_string_list_rdb_entry_string(const char *desc, const char *lab return 0; } -static int create_string_list_rdb_entry_int(const char *desc, const char *label, +static uint32_t create_string_list_rdb_entry_int(const char *desc, const char *label, int actual_int, const char *path, file_list_t *list) { char tmp[PATH_MAX_LENGTH]; @@ -985,6 +985,13 @@ static int deferred_push_rdb_entry_detail(void *data, void *userdata, (db_info_entry->rumble_supported == -1) ? "N/A" : "false"); menu_list_push(list, tmp, "rdb_entry_rumble", 0, 0); + if (db_info_entry->crc32) + { + if (create_string_list_rdb_entry_string("CRC32 Checksum", + "rdb_entry_crc32", db_info_entry->crc32, + path, list) == -1) + return -1; + } } if (db_info->count < 1)