static int database_info_iterate(database_state_handle_t *db_state, database_info_handle_t *db) { const char *name = db ? db->list->elems[db->list_ptr].data : NULL; if (!db || !db->list) return -1; if (!name) return 0; switch (db->type) { case DATABASE_TYPE_NONE: break; case DATABASE_TYPE_ITERATE: return database_info_iterate_playlist(db_state, db, name); case DATABASE_TYPE_ITERATE_ZIP: return database_info_iterate_playlist_zip(db_state, db, name); case DATABASE_TYPE_SERIAL_LOOKUP: return database_info_iterate_serial_lookup(db_state, db, name); case DATABASE_TYPE_CRC_LOOKUP: return database_info_iterate_crc_lookup(db_state, db, NULL); } return 0; }
static int database_info_iterate_playlist_zip( database_state_handle_t *db_state, database_info_handle_t *db, const char *name) { bool returnerr = true; #ifdef HAVE_ZLIB if (db_state->crc != 0) return database_info_iterate_crc_lookup( db_state, db, db_state->zip_name); if (file_archive_parse_file_iterate(&db->state, &returnerr, name, NULL, zlib_compare_crc32, (void*)db_state) != 0) return 0; if (db_state->crc) file_archive_parse_file_iterate_stop(&db->state); #endif return 1; }