tVery very very horrible unsafe GetGlobalPointer function replaced with not qui… | |
git clone git://src.adamsgaard.dk/vaccinewars | |
Log | |
Files | |
Refs | |
README | |
LICENSE | |
--- | |
commit 7fe7009ee0a97396c4acddb98e67eff07abc8544 | |
parent 1c6668cc7168d4c7303ead9888e80216734256ee | |
Author: Ben Webb <[email protected]> | |
Date: Mon, 25 Feb 2002 18:31:08 +0000 | |
Very very very horrible unsafe GetGlobalPointer function replaced with not | |
quite so horrible, typesafe, functions GetGlobalInt, GetGlobalString etc. | |
Diffstat: | |
M src/dopewars.c | 68 +++++++++++++++++++++++------… | |
M src/dopewars.h | 6 +++++- | |
2 files changed, 56 insertions(+), 18 deletions(-) | |
--- | |
diff --git a/src/dopewars.c b/src/dopewars.c | |
t@@ -1877,7 +1877,7 @@ int GetGlobalIndex(gchar *ID1, gchar *ID2) | |
return -1; | |
} | |
-void *GetGlobalPointer(int GlobalIndex, int StructIndex) | |
+static void *GetGlobalPointer(int GlobalIndex, int StructIndex) | |
{ | |
void *ValPt = NULL; | |
t@@ -1903,6 +1903,41 @@ void *GetGlobalPointer(int GlobalIndex, int StructIndex) | |
} | |
} | |
+gchar **GetGlobalString(int GlobalIndex, int StructIndex) | |
+{ | |
+ g_assert(Globals[GlobalIndex].StringVal); | |
+ | |
+ return (gchar **)GetGlobalPointer(GlobalIndex, StructIndex); | |
+} | |
+ | |
+gint *GetGlobalInt(int GlobalIndex, int StructIndex) | |
+{ | |
+ g_assert(Globals[GlobalIndex].IntVal); | |
+ | |
+ return (gint *)GetGlobalPointer(GlobalIndex, StructIndex); | |
+} | |
+ | |
+price_t *GetGlobalPrice(int GlobalIndex, int StructIndex) | |
+{ | |
+ g_assert(Globals[GlobalIndex].PriceVal); | |
+ | |
+ return (price_t *)GetGlobalPointer(GlobalIndex, StructIndex); | |
+} | |
+ | |
+gboolean *GetGlobalBoolean(int GlobalIndex, int StructIndex) | |
+{ | |
+ g_assert(Globals[GlobalIndex].BoolVal); | |
+ | |
+ return (gboolean *)GetGlobalPointer(GlobalIndex, StructIndex); | |
+} | |
+ | |
+gchar ***GetGlobalStringList(int GlobalIndex, int StructIndex) | |
+{ | |
+ g_assert(Globals[GlobalIndex].StringList); | |
+ | |
+ return (gchar ***)GetGlobalPointer(GlobalIndex, StructIndex); | |
+} | |
+ | |
gboolean CheckMaxIndex(GScanner *scanner, int GlobalIndex, int StructIndex, | |
gboolean IndexGiven) | |
{ | |
t@@ -1943,20 +1978,19 @@ static void WriteConfigValue(FILE *fp, int GlobalIndex… | |
if (Globals[GlobalIndex].IntVal) { | |
fprintf(fp, "%s = %d\n", GlobalName, | |
- *((int *)GetGlobalPointer(GlobalIndex, StructIndex))); | |
+ *GetGlobalInt(GlobalIndex, StructIndex)); | |
} else if (Globals[GlobalIndex].BoolVal) { | |
fprintf(fp, "%s = %s\n", GlobalName, | |
- *((gboolean *)GetGlobalPointer(GlobalIndex, StructIndex)) ? | |
- _("TRUE") : _("FALSE")); | |
+ *GetGlobalBoolean(GlobalIndex, StructIndex) ? | |
+ _("TRUE") : _("FALSE")); | |
} else if (Globals[GlobalIndex].PriceVal) { | |
- gchar *prstr = pricetostr(*((price_t *)GetGlobalPointer(GlobalIndex, | |
- StructIndex))); | |
+ gchar *prstr = pricetostr(*GetGlobalPrice(GlobalIndex, StructIndex)); | |
fprintf(fp, "%s = %s\n", GlobalName, prstr); | |
g_free(prstr); | |
} else if (Globals[GlobalIndex].StringVal) { | |
fprintf(fp, "%s = \"%s\"\n", GlobalName, | |
- *((gchar **)GetGlobalPointer(GlobalIndex, StructIndex))); | |
+ *GetGlobalString(GlobalIndex, StructIndex)); | |
} else if (Globals[GlobalIndex].StringList) { | |
int i; | |
t@@ -2011,23 +2045,23 @@ void PrintConfigValue(int GlobalIndex, int StructIndex, | |
if (Globals[GlobalIndex].IntVal) { | |
/* Display of a numeric config. file variable - e.g. "NumDrug is 6" */ | |
g_print(_("%s is %d\n"), GlobalName, | |
- *((int *)GetGlobalPointer(GlobalIndex, StructIndex))); | |
+ *GetGlobalInt(GlobalIndex, StructIndex)); | |
} else if (Globals[GlobalIndex].BoolVal) { | |
/* Display of a boolean config. file variable - e.g. "DrugValue is | |
* TRUE" */ | |
g_print(_("%s is %s\n"), GlobalName, | |
- *((gboolean *)GetGlobalPointer(GlobalIndex, StructIndex)) ? | |
+ *GetGlobalBoolean(GlobalIndex, StructIndex) ? | |
_("TRUE") : _("FALSE")); | |
} else if (Globals[GlobalIndex].PriceVal) { | |
/* Display of a price config. file variable - e.g. "Bitch.MinPrice is | |
* $200" */ | |
dpg_print(_("%s is %P\n"), GlobalName, | |
- *((price_t *)GetGlobalPointer(GlobalIndex, StructIndex))); | |
+ *GetGlobalPrice(GlobalIndex, StructIndex)); | |
} else if (Globals[GlobalIndex].StringVal) { | |
/* Display of a string config. file variable - e.g. "LoanSharkName is | |
* \"the loan shark\"" */ | |
g_print(_("%s is \"%s\"\n"), GlobalName, | |
- *((gchar **)GetGlobalPointer(GlobalIndex, StructIndex))); | |
+ *GetGlobalString(GlobalIndex, StructIndex)); | |
} else if (Globals[GlobalIndex].StringList) { | |
if (IndexGiven) { | |
/* Display of an indexed string list config. file variable - e.g. | |
t@@ -2096,7 +2130,7 @@ gboolean SetConfigValue(int GlobalIndex, int StructIndex, | |
UpdatePlayer(tmp); | |
} | |
} | |
- *((int *)GetGlobalPointer(GlobalIndex, StructIndex)) = IntVal; | |
+ *GetGlobalInt(GlobalIndex, StructIndex) = IntVal; | |
} else { | |
g_scanner_unexp_token(scanner, G_TOKEN_INT, NULL, NULL, | |
NULL, NULL, FALSE); | |
t@@ -2117,14 +2151,14 @@ gboolean SetConfigValue(int GlobalIndex, int StructInd… | |
g_strcasecmp(scanner->value.v_identifier, _("ON")) == 0 || | |
strcmp(scanner->value.v_identifier, "1") == 0) { | |
parsed = TRUE; | |
- *((gboolean *)GetGlobalPointer(GlobalIndex, StructIndex)) = TRUE; | |
+ *GetGlobalBoolean(GlobalIndex, StructIndex) = TRUE; | |
} else if (g_strcasecmp(scanner->value.v_identifier, _("FALSE")) == 0 | |
|| g_strcasecmp(scanner->value.v_identifier, _("NO")) == 0 | |
|| g_strcasecmp(scanner->value.v_identifier, | |
_("OFF")) == 0 | |
|| strcmp(scanner->value.v_identifier, "0") == 0) { | |
parsed = TRUE; | |
- *((gboolean *)GetGlobalPointer(GlobalIndex, StructIndex)) = FALSE; | |
+ *GetGlobalBoolean(GlobalIndex, StructIndex) = FALSE; | |
} | |
} | |
if (!parsed) { | |
t@@ -2136,7 +2170,7 @@ gboolean SetConfigValue(int GlobalIndex, int StructIndex, | |
} else if (Globals[GlobalIndex].PriceVal) { | |
token = g_scanner_get_next_token(scanner); | |
if (token == G_TOKEN_INT) { | |
- *((price_t *)GetGlobalPointer(GlobalIndex, StructIndex)) = | |
+ *GetGlobalPrice(GlobalIndex, StructIndex) = | |
(price_t)scanner->value.v_int; | |
} else { | |
g_scanner_unexp_token(scanner, G_TOKEN_INT, NULL, NULL, | |
t@@ -2153,10 +2187,10 @@ gboolean SetConfigValue(int GlobalIndex, int StructInd… | |
G_CSET_LATINC; | |
token = g_scanner_get_next_token(scanner); | |
if (token == G_TOKEN_STRING) { | |
- AssignName((gchar **)GetGlobalPointer(GlobalIndex, StructIndex), | |
+ AssignName(GetGlobalString(GlobalIndex, StructIndex), | |
scanner->value.v_string); | |
} else if (token == G_TOKEN_IDENTIFIER) { | |
- AssignName((gchar **)GetGlobalPointer(GlobalIndex, StructIndex), | |
+ AssignName(GetGlobalString(GlobalIndex, StructIndex), | |
scanner->value.v_identifier); | |
} else { | |
g_scanner_unexp_token(scanner, G_TOKEN_STRING, NULL, NULL, | |
diff --git a/src/dopewars.h b/src/dopewars.h | |
t@@ -401,7 +401,11 @@ void GeneralStartup(int argc, char *argv[]); | |
void ReadConfigFile(char *FileName); | |
gboolean ParseNextConfig(GScanner *scanner, gboolean print); | |
int GetGlobalIndex(gchar *ID1, gchar *ID2); | |
-void *GetGlobalPointer(int GlobalIndex, int StructIndex); | |
+gchar **GetGlobalString(int GlobalIndex, int StructIndex); | |
+gint *GetGlobalInt(int GlobalIndex, int StructIndex); | |
+price_t *GetGlobalPrice(int GlobalIndex, int StructIndex); | |
+gboolean *GetGlobalBoolean(int GlobalIndex, int StructIndex); | |
+gchar ***GetGlobalStringList(int GlobalIndex, int StructIndex); | |
void PrintConfigValue(int GlobalIndex, int StructIndex, | |
gboolean IndexGiven, GScanner *scanner); | |
gboolean SetConfigValue(int GlobalIndex, int StructIndex, |