From d496beeb5abe8191324b14b39dfbfd3606543c87 Mon Sep 17 00:00:00 2001 From: JadingTsunami Date: Fri, 10 Nov 2023 07:41:21 -0800 Subject: [PATCH] Add init after config load as loading defaults is only necessary if the user didn't supply some, which will happen most of the time. --- prboom2/src/c_cmd.c | 5 ++--- prboom2/src/c_cvar.c | 32 ++++++++++++++++++++++++++------ prboom2/src/c_cvar.h | 4 ++++ 3 files changed, 32 insertions(+), 9 deletions(-) diff --git a/prboom2/src/c_cmd.c b/prboom2/src/c_cmd.c index 110aa0e34..977bcdb16 100644 --- a/prboom2/src/c_cmd.c +++ b/prboom2/src/c_cmd.c @@ -1533,8 +1533,6 @@ void C_LoadSettings() FILE* bindfile = NULL; char* linebuffer = malloc(sizeof(char)*CONSOLE_CONFIG_LINE_MAX); - C_CvarInit(); - bindfile = M_fopen(C_GetConsoleSettingsFile(), "r"); if (bindfile) { while (!feof(bindfile)) { @@ -1558,10 +1556,11 @@ void C_LoadSettings() C_printcmd(linebuffer); } + C_CvarInit(); + free(linebuffer); } - /* Complete a partial command with the nearest match * If successful, returns the string match * Returns NULL if no match was found. diff --git a/prboom2/src/c_cvar.c b/prboom2/src/c_cvar.c index 61dbbf1ac..df0500ba8 100644 --- a/prboom2/src/c_cvar.c +++ b/prboom2/src/c_cvar.c @@ -73,6 +73,7 @@ const char* cvarstatus_error_strings[] = "Invalid CVAR type", "Invalid CVAR value", "Wrong CVAR type supplied", + "CVAR already exists", "CVAR not found", NULL }; @@ -97,12 +98,12 @@ void C_CvarInit() if (!initialized) { initialized = true; - C_CvarCreateOrOverwrite("allmap_always", "0", CVAR_TYPE_INT, CVAR_FLAG_ARCHIVE); - C_CvarCreateOrOverwrite("plat_skip", "0", CVAR_TYPE_INT, CVAR_FLAG_ARCHIVE); - C_CvarCreateOrOverwrite("regenerate", "0", CVAR_TYPE_INT, CVAR_FLAG_ARCHIVE); - C_CvarCreateOrOverwrite("hudadd_showfps", "0", CVAR_TYPE_INT, CVAR_FLAG_ARCHIVE); - C_CvarCreateOrOverwrite("showfps", "0", CVAR_TYPE_INT, CVAR_FLAG_ARCHIVE); - C_CvarCreateOrOverwrite("r_drawplayersprites", "1", CVAR_TYPE_INT, CVAR_FLAG_ARCHIVE); + C_CvarCreate("allmap_always", "0", CVAR_TYPE_INT, CVAR_FLAG_ARCHIVE); + C_CvarCreate("plat_skip", "0", CVAR_TYPE_INT, CVAR_FLAG_ARCHIVE); + C_CvarCreate("regenerate", "0", CVAR_TYPE_INT, CVAR_FLAG_ARCHIVE); + C_CvarCreate("hudadd_showfps", "0", CVAR_TYPE_INT, CVAR_FLAG_ARCHIVE); + C_CvarCreate("showfps", "0", CVAR_TYPE_INT, CVAR_FLAG_ARCHIVE); + C_CvarCreate("r_drawplayersprites", "1", CVAR_TYPE_INT, CVAR_FLAG_ARCHIVE); } } @@ -266,6 +267,25 @@ cvarstatus_t C_CvarCreateOrOverwrite(const char* key, const char* value, cvartyp return CVAR_STATUS_OK; } +cvarstatus_t C_CvarCreate(const char* key, const char* value, cvartype_t type, cvarflags_t flags) +{ + cvarstatus_t status; + cvar_t* cvar; + uint8_t hash; + char c; + + if (key) + for (c = *key; c; c++) + c = tolower(c); + + cvar = C_CvarFind(key, &status); + + if (cvar) + return CVAR_STATUS_ALREADY_EXISTS; + else + return C_CvarCreateOrOverwrite(key, value, type, flags); +} + cvarstatus_t C_CvarDelete(const char* key) { cvarstatus_t status; diff --git a/prboom2/src/c_cvar.h b/prboom2/src/c_cvar.h index a9046b540..d3dd22e31 100644 --- a/prboom2/src/c_cvar.h +++ b/prboom2/src/c_cvar.h @@ -38,6 +38,7 @@ typedef enum cvarstatus_e { CVAR_STATUS_INVALID_VALUE, CVAR_STATUS_WRONG_TYPE, CVAR_STATUS_KEY_NOT_FOUND, + CVAR_STATUS_ALREADY_EXISTS, CVAR_STATUS_MAX } cvarstatus_t; @@ -74,6 +75,9 @@ char* C_CvarGetAsString(const char* key, cvarstatus_t* status); /* type is changed if it's something else */ cvarstatus_t C_CvarCreateOrOverwrite(const char* key, const char* value, cvartype_t type, cvarflags_t flags); + +/* does NOT overwrite if exists; returns failure status */ +cvarstatus_t C_CvarCreate(const char* key, const char* value, cvartype_t type, cvarflags_t flags); cvarstatus_t C_CvarDelete(const char* key); const char* C_CvarComplete(const char* partial);