From 71e445c1ffd01b371c9b3060a57c866dc85e3e00 Mon Sep 17 00:00:00 2001 From: Patrick McDermott Date: Tue, 16 Mar 2021 10:13:58 -0400 Subject: db_games_find(): Initialize game structures --- (limited to 'src/game.c') diff --git a/src/game.c b/src/game.c index d136005..6989b6e 100644 --- a/src/game.c +++ b/src/game.c @@ -23,6 +23,12 @@ #include "game.h" #include "output.h" +struct db_game { + char *id; + char *name; + char *desc; +}; + static int _db_game_is_dir(const struct dirent *entry) { @@ -30,7 +36,7 @@ _db_game_is_dir(const struct dirent *entry) } int -db_games_find(const char *games_dir, char ***games) +db_games_find(const char *games_dir, struct db_game ***games) { struct dirent **entries; int n; @@ -51,7 +57,16 @@ db_games_find(const char *games_dir, char ***games) } for (i = 0; i < n; ++i) { - (*games)[i] = strdup(entries[i]->d_name); + (*games)[i] = calloc(1, sizeof(***games)); + if ((*games)[i] == NULL) { + db_err("Failed to allocate memory"); + while (--i >= 0) { + db_game_free((*games)[i]); + } + free(*games); + return -1; + } + (*games)[i]->id = strdup(entries[i]->d_name); free(entries[i]); } @@ -59,3 +74,30 @@ db_games_find(const char *games_dir, char ***games) return n; } + +const char * +db_game_get_name(struct db_game *game) +{ + return game->name; +} + +const char * +db_game_get_desc(struct db_game *game) +{ + return game->desc; +} + +void +db_game_free(struct db_game *game) +{ + if (game->id) { + free(game->id); + } + if (game->name) { + free(game->name); + } + if (game->desc) { + free(game->desc); + } + free(game); +} -- cgit v0.9.1