summaryrefslogtreecommitdiffstats
path: root/src/game.c
diff options
context:
space:
mode:
authorPatrick McDermott <patrick.mcdermott@libiquity.com>2021-03-16 10:13:58 (EDT)
committer Patrick McDermott <patrick.mcdermott@libiquity.com>2021-03-16 10:13:58 (EDT)
commit71e445c1ffd01b371c9b3060a57c866dc85e3e00 (patch)
treeacb798330759368e861b35fd114216a0cd9718b0 /src/game.c
parent60abe24450a8d02b0a0f85c40190f26472fb5ab8 (diff)
downloaddodge-balls-71e445c1ffd01b371c9b3060a57c866dc85e3e00.zip
dodge-balls-71e445c1ffd01b371c9b3060a57c866dc85e3e00.tar.gz
dodge-balls-71e445c1ffd01b371c9b3060a57c866dc85e3e00.tar.bz2
db_games_find(): Initialize game structures
Diffstat (limited to 'src/game.c')
-rw-r--r--src/game.c46
1 files changed, 44 insertions, 2 deletions
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);
+}