diff options
Diffstat (limited to 'src/game.c')
-rw-r--r-- | src/game.c | 55 |
1 files changed, 55 insertions, 0 deletions
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 <http://www.gnu.org/licenses/>. + */ + +#include <dirent.h> +#include <stdlib.h> +#include <string.h> +#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; +} |