From 6ab7e6951d99c25656dde1bd1928fc12b938a0ff Mon Sep 17 00:00:00 2001 From: Patrick McDermott Date: Mon, 15 Mar 2021 17:08:02 -0400 Subject: db_games_find(): New function --- (limited to 'src') diff --git a/src/game.c b/src/game.c new file mode 100644 index 0000000..001fcca --- /dev/null +++ b/src/game.c @@ -0,0 +1,55 @@ +/* + * Copyright (C) 2021 P. J. McDermott + * + * This file is part of Dodge Balls + * + * Dodge Balls is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * Dodge Balls is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Dodge Balls. If not, see . + */ + +#include +#include +#include +#include "game.h" +#include "output.h" + +static int +_db_game_is_dir(const struct dirent *entry) +{ + return (entry->d_type == DT_DIR && entry->d_name[0] != '.'); +} + +int +db_games_find(char ***games) +{ + struct dirent **entries; + int n; + int i; + + n = scandir("games", &entries, &_db_game_is_dir, alphasort); + + *games = calloc(n, sizeof(**games)); + if (*games == NULL) { + db_err("Failed to allocate memory"); + return -1; + } + + for (i = 0; i < n; ++i) { + (*games)[i] = strdup(entries[i]->d_name); + free(entries[i]); + } + + free(entries); + + return n; +} diff --git a/src/game.h b/src/game.h new file mode 100644 index 0000000..447d56b --- /dev/null +++ b/src/game.h @@ -0,0 +1,25 @@ +/* + * Copyright (C) 2021 P. J. McDermott + * + * This file is part of Dodge Balls + * + * Dodge Balls is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * Dodge Balls is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Dodge Balls. If not, see . + */ + +#ifndef DB_GAME_H_ +#define DB_GAME_H_ + +int db_games_find(char ***games); + +#endif /* DB_GAME_H_ */ diff --git a/src/local.mk b/src/local.mk index 9e51a3d..196ae0c 100644 --- a/src/local.mk +++ b/src/local.mk @@ -1,4 +1,6 @@ dodge_balls_SOURCES += \ + %reldir%/game.c \ + %reldir%/game.h \ %reldir%/main.c \ %reldir%/output.c \ %reldir%/output.h \ diff --git a/src/main.c b/src/main.c index 380a615..64d8e3d 100644 --- a/src/main.c +++ b/src/main.c @@ -1,9 +1,20 @@ #include #include +#include "game.h" int main(int argc, char *argv[]) { - puts("Hello, world!"); + char **games; + int n; + int i; + + n = db_games_find(&games); + printf("%d games:\n", n); + for (i = 0; i < n; ++i) { + printf("\t%s\n", games[i]); + free(games[i]); + } + free(games); return EXIT_SUCCESS; } -- cgit v0.9.1