Example #1
0
static int task_database_iterate_crc_lookup(
      database_state_handle_t *db_state,
      database_info_handle_t *db,
      const char *zip_entry)
{

   if (!db_state->list || 
         (unsigned)db_state->list_index == (unsigned)db_state->list->size)
      return database_info_list_iterate_end_no_match(db_state);

   if (db_state->entry_index == 0)
   {
      char query[50] = {0};
      snprintf(query, sizeof(query),
            "{crc:or(b\"%08X\",b\"%08X\")}",
            swap_if_big32(db_state->crc), swap_if_big32(db_state->zip_crc));

      database_info_list_iterate_new(db_state, query);
   }

   if (db_state->info)
   {
      database_info_t *db_info_entry = 
         &db_state->info->list[db_state->entry_index];

      if (db_info_entry && db_info_entry->crc32)
      {
#if 0
         RARCH_LOG("CRC32: 0x%08X , entry CRC32: 0x%08X (%s).\n",
               db_state->crc, db_info_entry->crc32, db_info_entry->name);
#endif
         if (db_state->zip_crc == db_info_entry->crc32)
            return database_info_list_iterate_found_match(
                  db_state, db, NULL);
         if (db_state->crc == db_info_entry->crc32)
            return database_info_list_iterate_found_match(
                  db_state, db, zip_entry);
      }
   }

   db_state->entry_index++;

   if (db_state->info)
   {
      if (db_state->entry_index >= db_state->info->count)
         return database_info_list_iterate_next(db_state);
   }

   /* If we haven't reached the end of the database list yet,
    * continue iterating. */
   if (db_state->list_index < db_state->list->size)
      return 1;

   database_info_list_free(db_state->info);
   return 0;
}
Example #2
0
static int task_database_iterate_serial_lookup(
    database_state_handle_t *db_state,
    database_info_handle_t *db, const char *name)
{
    if (!db_state->list ||
            (unsigned)db_state->list_index == (unsigned)db_state->list->size)
        return database_info_list_iterate_end_no_match(db_state);

    if (db_state->entry_index == 0)
    {
        char query[50];
        char *serial_buf =
            bin_to_hex_alloc((uint8_t*)db_state->serial, 10 * sizeof(uint8_t));

        if (!serial_buf)
            return 1;

        query[0] = '\0';

        snprintf(query, sizeof(query), "{'serial': b'%s'}", serial_buf);
        database_info_list_iterate_new(db_state, query);

        free(serial_buf);
    }

    if (db_state->info)
    {
        database_info_t *db_info_entry = &db_state->info->list[
                                             db_state->entry_index];

        if (db_info_entry && db_info_entry->serial)
        {
#if 0
            RARCH_LOG("serial: %s , entry serial: %s (%s).\n",
                      db_state->serial, db_info_entry->serial,
                      db_info_entry->name);
#endif
            if (string_is_equal(db_state->serial, db_info_entry->serial))
                return database_info_list_iterate_found_match(db_state, db, NULL);
        }
    }

    db_state->entry_index++;

    if (db_state->info)
    {
        if (db_state->entry_index >= db_state->info->count)
            return database_info_list_iterate_next(db_state);
    }

    /* If we haven't reached the end of the database list yet,
     * continue iterating. */
    if (db_state->list_index < db_state->list->size)
        return 1;

    database_info_list_free(db_state->info);
    free(db_state->info);
    return 0;
}
static int database_info_iterate_serial_lookup(
      database_state_handle_t *db_state,
      database_info_handle_t *db, const char *name)
{
   if (!db_state->list || (unsigned)db_state->list_index == (unsigned)db_state->list->size)
      return database_info_list_iterate_end_no_match(db_state);

   if (db_state->entry_index == 0)
   {
      char query[50] = {0};
      snprintf(query, sizeof(query), "{'serial': '%s'}", db_state->serial);

      database_info_list_iterate_new(db_state, query);
   }

   if (db_state->info)
   {
      database_info_t *db_info_entry = &db_state->info->list[db_state->entry_index];

      if (db_info_entry && db_info_entry->serial)
      {
#if 1
         RARCH_LOG("serial: %s , entry serial: %s (%s).\n",
                   db_state->serial, db_info_entry->serial, db_info_entry->name);
#endif
         if (db_state->serial == db_info_entry->serial)
            database_info_list_iterate_found_match(db_state, db, NULL);
      }
   }

   db_state->entry_index++;

   if (db_state->entry_index >= db_state->info->count)
      return database_info_list_iterate_next(db_state);

   if (db_state->list_index < db_state->list->size)
   {
      /* Didn't reach the end of the database list yet,
       * continue iterating. */
      return 1;
   }

   if (db_state->info)
      database_info_list_free(db_state->info);
   return 0;
}
static int task_database_iterate_crc_lookup(
      db_handle_t *_db,
      database_state_handle_t *db_state,
      database_info_handle_t *db,
      const char *name,
      const char *archive_entry)
{

   if (!db_state->list ||
         (unsigned)db_state->list_index == (unsigned)db_state->list->size)
      return database_info_list_iterate_end_no_match(db, db_state, name);

   if (db_state->entry_index == 0)
   {
      char query[50];

      query[0] = '\0';

      /* don't scan files that can't be in this database */
      if (!(path_contains_compressed_file(name) &&
         core_info_database_match_archive_member(
         db_state->list->elems[db_state->list_index].data)) &&
          !core_info_database_supports_content_path(
         db_state->list->elems[db_state->list_index].data, name))
         return database_info_list_iterate_next(db_state);

      snprintf(query, sizeof(query),
            "{crc:or(b\"%08X\",b\"%08X\")}",
            db_state->crc, db_state->archive_crc);

      database_info_list_iterate_new(db_state, query);
   }

   if (db_state->info)
   {
      database_info_t *db_info_entry =
         &db_state->info->list[db_state->entry_index];

      if (db_info_entry && db_info_entry->crc32)
      {
#if 0
         RARCH_LOG("CRC32: 0x%08X , entry CRC32: 0x%08X (%s).\n",
               db_state->crc, db_info_entry->crc32, db_info_entry->name);
#endif
         if (db_state->archive_crc == db_info_entry->crc32)
            return database_info_list_iterate_found_match(
                  _db,
                  db_state, db, NULL);
         if (db_state->crc == db_info_entry->crc32)
            return database_info_list_iterate_found_match(
                  _db,
                  db_state, db, archive_entry);
      }
   }

   db_state->entry_index++;

   if (db_state->info)
   {
      if (db_state->entry_index >= db_state->info->count)
         return database_info_list_iterate_next(db_state);
   }

   /* If we haven't reached the end of the database list yet,
    * continue iterating. */
   if (db_state->list_index < db_state->list->size)
      return 1;

   database_info_list_free(db_state->info);

   if (db_state->info)
      free(db_state->info);

   return 0;
}