From 478394ef81eed323ece69f191ec2a38462650b30 Mon Sep 17 00:00:00 2001 From: Bill Currie Date: Tue, 24 Aug 2010 16:33:22 +0900 Subject: [PATCH] Nuke MAX_GAMEDIR_CALLBACKS The number of gamedir callbacks is now unlimited. --- include/QF/quakefs.h | 2 -- libs/util/quakefs.c | 13 ++++++++++--- 2 files changed, 10 insertions(+), 5 deletions(-) diff --git a/include/QF/quakefs.h b/include/QF/quakefs.h index c3af1f2ef..21783d1b1 100644 --- a/include/QF/quakefs.h +++ b/include/QF/quakefs.h @@ -41,8 +41,6 @@ //============================================================================ -#define MAX_GAMEDIR_CALLBACKS 128 // most QFS_GamedirCallback calls. - typedef struct filelist_s { char **list; int count; diff --git a/libs/util/quakefs.c b/libs/util/quakefs.c index deb283be8..16b5c9529 100644 --- a/libs/util/quakefs.c +++ b/libs/util/quakefs.c @@ -201,8 +201,10 @@ static const char *qfs_default_dirconf = "}"; -static gamedir_callback_t *gamedir_callbacks[MAX_GAMEDIR_CALLBACKS]; +#define GAMEDIR_CALLBACK_CHUNK 16 +static gamedir_callback_t **gamedir_callbacks; static int num_gamedir_callbacks; +static int max_gamedir_callbacks; static const char * qfs_var_get_key (void *_v, void *unused) @@ -1229,8 +1231,13 @@ QFS_Gamedir (const char *dir) VISIBLE void QFS_GamedirCallback (gamedir_callback_t *func) { - if (num_gamedir_callbacks == MAX_GAMEDIR_CALLBACKS) { - Sys_Error ("Too many gamedir callbacks!\n"); + if (num_gamedir_callbacks == max_gamedir_callbacks) { + size_t size = (max_gamedir_callbacks + GAMEDIR_CALLBACK_CHUNK) + * sizeof (gamedir_callback_t *); + gamedir_callbacks = realloc (gamedir_callbacks, size); + if (!gamedir_callbacks) + Sys_Error ("Too many gamedir callbacks!\n"); + max_gamedir_callbacks += GAMEDIR_CALLBACK_CHUNK; } if (!func) {