tWriteConfigFile() now writes to a given file handle; functions added to return… | |
git clone git://src.adamsgaard.dk/vaccinewars | |
Log | |
Files | |
Refs | |
README | |
LICENSE | |
--- | |
commit ce6614bddab8d6289b9250c15335d75c8c49efad | |
parent e88781ee1d688779256d6c478bd434e095f0486a | |
Author: Ben Webb <[email protected]> | |
Date: Tue, 26 Feb 2002 13:03:07 +0000 | |
WriteConfigFile() now writes to a given file handle; functions added to | |
return the paths of the local and global configuration files. | |
Diffstat: | |
M src/dopewars.c | 93 +++++++++++++++++++++--------… | |
M src/dopewars.h | 4 +++- | |
M src/gui_client/optdialog.c | 2 +- | |
3 files changed, 68 insertions(+), 31 deletions(-) | |
--- | |
diff --git a/src/dopewars.c b/src/dopewars.c | |
t@@ -2016,9 +2016,9 @@ static void WriteConfigValue(FILE *fp, int GlobalIndex, … | |
/* | |
* Writes all of the configuration file variables that have changed | |
- * (together with their values) to standard output. | |
+ * (together with their values) to the given file. | |
*/ | |
-void WriteConfigFile(void) | |
+void WriteConfigFile(FILE *fp) | |
{ | |
int i, j; | |
t@@ -2026,10 +2026,10 @@ void WriteConfigFile(void) | |
if (Globals[i].Modified) { | |
if (Globals[i].NameStruct[0]) { | |
for (j = 1; j <= *Globals[i].MaxIndex; j++) { | |
- WriteConfigValue(stdout, i, j); | |
+ WriteConfigValue(fp, i, j); | |
} | |
} else { | |
- WriteConfigValue(stdout, i, 0); | |
+ WriteConfigValue(fp, i, 0); | |
} | |
} | |
} | |
t@@ -2275,6 +2275,50 @@ gchar *GetDocIndex(void) | |
return path; | |
} | |
+/* | |
+ * Returns the pathname of the global (all users) configuration file, | |
+ * as a dynamically-allocated string that must be later freed. On | |
+ * error, NULL is returned. | |
+ */ | |
+gchar *GetGlobalConfigFile(void) | |
+{ | |
+#ifdef CYGWIN | |
+ gchar *bindir, *conf = NULL; | |
+ | |
+ /* Global configuration is in the same directory as the dopewars binary */ | |
+ bindir = GetBinaryDir(); | |
+ if (bindir) { | |
+ conf = g_strdup_printf("%s/dopewars-config.txt", conf); | |
+ g_free(bindir); | |
+ } | |
+ return conf; | |
+#else | |
+ return g_strdup("/etc/dopewars"); | |
+#endif | |
+} | |
+ | |
+/* | |
+ * Returns the pathname of the local (per-user) configuration file, | |
+ * as a dynamically-allocated string that must be later freed. On | |
+ * error, NULL is returned. | |
+ */ | |
+gchar *GetLocalConfigFile(void) | |
+{ | |
+#ifdef CYGWIN | |
+ return g_strdup("dopewars-config.txt"); | |
+#else | |
+ gchar *home, *conf = NULL; | |
+ | |
+ /* Local config is in the user's home directory */ | |
+ home = getenv("HOME"); | |
+ if (home) { | |
+ conf = g_strdup_printf("%s/.dopewars", home); | |
+ g_free(home); | |
+ } | |
+ return conf; | |
+#endif | |
+} | |
+ | |
/* | |
* Sets up data - such as the location of the high score file - to | |
* hard-coded internal values, and then processes the global and | |
t@@ -2282,7 +2326,7 @@ gchar *GetDocIndex(void) | |
*/ | |
void SetupParameters(void) | |
{ | |
- char *ConfigFile, *pt; | |
+ gchar *conf; | |
int i; | |
/* Initialise variables */ | |
t@@ -2359,34 +2403,25 @@ void SetupParameters(void) | |
AssignName(&StoppedTo[i], _(DefaultStoppedTo[i])); | |
} | |
-#ifdef CYGWIN | |
+ /* FIXME: this is a bit risky; we haven't dropped privileges yet, | |
+ * so 1. we may be able to read files here that the user shouldn't | |
+ * have access to and 2. a bug in the configuration parsing code | |
+ * could result in a compromise. BUT we don't know where the high | |
+ * score file is until the config files have been parsed. */ | |
- /* Read the global configuration from the directory the binary is | |
- * installed in */ | |
- pt = GetBinaryDir(); | |
- if (pt) { | |
- ConfigFile = g_strdup_printf("%s/dopewars-config.txt", pt); | |
- ReadConfigFile(ConfigFile); | |
- g_free(ConfigFile); | |
- g_free(pt); | |
+ /* Now read in the global configuration file */ | |
+ conf = GetGlobalConfigFile(); | |
+ if (conf) { | |
+ ReadConfigFile(conf); | |
+ g_free(conf); | |
} | |
- /* Now read the local configuration from the current directory */ | |
- ReadConfigFile("dopewars-config.txt"); | |
- | |
-#else /* CYGWIN */ | |
- | |
- /* Now read in the global configuration file */ | |
- ReadConfigFile("/etc/dopewars"); | |
- | |
- /* Next, try to read in the .dopewars file in the user's home directory */ | |
- pt = getenv("HOME"); | |
- if (pt) { | |
- ConfigFile = g_strdup_printf("%s/.dopewars", pt); | |
- ReadConfigFile(ConfigFile); | |
- g_free(ConfigFile); | |
+ /* Finally, try the local configuration file */ | |
+ conf = GetLocalConfigFile(); | |
+ if (conf) { | |
+ ReadConfigFile(conf); | |
+ g_free(conf); | |
} | |
-#endif /* CYGWIN */ | |
} | |
void HandleHelpTexts() | |
diff --git a/src/dopewars.h b/src/dopewars.h | |
t@@ -420,8 +420,10 @@ void OpenLog(void); | |
void CloseLog(void); | |
gboolean IsConnectedPlayer(Player *play); | |
void BackupConfig(void); | |
-void WriteConfigFile(void); | |
+void WriteConfigFile(FILE *fp); | |
gchar *GetDocIndex(void); | |
+gchar *GetGlobalConfigFile(void); | |
+gchar *GetLocalConfigFile(void); | |
#ifndef CURSES_CLIENT | |
void CursesLoop(void); | |
diff --git a/src/gui_client/optdialog.c b/src/gui_client/optdialog.c | |
t@@ -464,7 +464,7 @@ static void list_row_unselect(GtkCList *clist, gint row, g… | |
static void OKCallback(GtkWidget *widget, GtkWidget *dialog) | |
{ | |
SaveConfigWidgets(); | |
- WriteConfigFile(); | |
+ WriteConfigFile(stdout); | |
gtk_widget_destroy(dialog); | |
} | |