Start refactoring database_info_write_rdl

This commit is contained in:
twinaphex 2015-02-16 07:25:40 +01:00
parent 07df7c108d
commit b1d8d2c3e3
2 changed files with 40 additions and 8 deletions

View File

@ -57,24 +57,47 @@ static bool zlib_compare_crc32(const char *name, const char *valid_exts,
} }
#endif #endif
int database_info_write_rdl(const char *dir) database_info_rdl_handle_t *database_info_write_rdl_init(const char *dir)
{ {
size_t i;
const char *exts = ""; const char *exts = "";
struct string_list *str_list = NULL; database_info_rdl_handle_t *dbl = calloc(1, sizeof(*dbl));
if (!dbl)
return NULL;
if (g_extern.core_info) if (g_extern.core_info)
exts = core_info_list_get_all_extensions(g_extern.core_info); exts = core_info_list_get_all_extensions(g_extern.core_info);
str_list = dir_list_new(dir, exts, false); dbl->list = dir_list_new(dir, exts, false);
dbl->list_ptr = 0;
dbl->blocking = false;
if (!str_list) return dbl;
}
void database_info_write_rdl_deinit(database_info_rdl_handle_t *dbl)
{
if (!dbl)
return;
string_list_free(dbl->list);
free(dbl);
}
int database_info_write_rdl(const char *dir)
{
database_info_rdl_handle_t *dbl = database_info_write_rdl_init(dir);
if (!dbl)
return -1; return -1;
for (i = 0; i < str_list->size; i++) if (dbl->blocking)
return 1;
for (; dbl->list_ptr < dbl->list->size; dbl->list_ptr++)
{ {
char parent_dir[PATH_MAX_LENGTH]; char parent_dir[PATH_MAX_LENGTH];
const char *name = str_list->elems[i].data; const char *name = dbl->list->elems[dbl->list_ptr].data;
if (!name) if (!name)
continue; continue;
@ -113,7 +136,8 @@ int database_info_write_rdl(const char *dir)
} }
} }
string_list_free(str_list); database_info_write_rdl_deinit(dbl);
dbl = NULL;
return 0; return 0;
} }

View File

@ -19,12 +19,20 @@
#define DATABASE_INFO_H_ #define DATABASE_INFO_H_
#include <stddef.h> #include <stddef.h>
#include <boolean.h>
#include "libretrodb/libretrodb.h" #include "libretrodb/libretrodb.h"
#ifdef __cplusplus #ifdef __cplusplus
extern "C" { extern "C" {
#endif #endif
typedef struct
{
bool blocking;
size_t list_ptr;
struct string_list *list;
} database_info_rdl_handle_t;
typedef struct typedef struct
{ {
char *name; char *name;