aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--gtk/prefs_dlg.c14
-rw-r--r--prefs.c20
-rw-r--r--prefs.h4
3 files changed, 26 insertions, 12 deletions
diff --git a/gtk/prefs_dlg.c b/gtk/prefs_dlg.c
index 66495b0276..9f610d1705 100644
--- a/gtk/prefs_dlg.c
+++ b/gtk/prefs_dlg.c
@@ -1,7 +1,7 @@
/* prefs_dlg.c
* Routines for handling preferences
*
- * $Id: prefs_dlg.c,v 1.6 1999/12/29 05:53:48 guy Exp $
+ * $Id: prefs_dlg.c,v 1.7 2000/01/03 06:29:39 guy Exp $
*
* Ethereal - Network traffic analyzer
* By Gerald Combs <gerald@zing.org>
@@ -34,6 +34,7 @@
#include <gtk/gtk.h>
#include <stdlib.h>
+#include <string.h>
#include <ctype.h>
#include <errno.h>
@@ -54,6 +55,7 @@
#include "stream_prefs.h"
#include "gui_prefs.h"
#include "util.h"
+#include "ui_util.h"
static void prefs_main_ok_cb(GtkWidget *, gpointer);
static void prefs_main_save_cb(GtkWidget *, gpointer);
@@ -168,11 +170,19 @@ prefs_main_ok_cb(GtkWidget *ok_bt, gpointer parent_w)
static void
prefs_main_save_cb(GtkWidget *save_bt, gpointer parent_w)
{
+ int err;
+ char *pf_path;
+
printer_prefs_save(gtk_object_get_data(GTK_OBJECT(parent_w), E_PRINT_PAGE_KEY));
column_prefs_save(gtk_object_get_data(GTK_OBJECT(parent_w), E_COLUMN_PAGE_KEY));
stream_prefs_save(gtk_object_get_data(GTK_OBJECT(parent_w), E_STREAM_PAGE_KEY));
gui_prefs_save(gtk_object_get_data(GTK_OBJECT(parent_w), E_GUI_PAGE_KEY));
- write_prefs();
+ err = write_prefs(&pf_path);
+ if (err != 0) {
+ simple_dialog(ESD_TYPE_WARN, NULL,
+ "Can't open preferences file\n\"%s\": %s.", pf_path,
+ strerror(err));
+ }
}
static void
diff --git a/prefs.c b/prefs.c
index bf2e90c433..46d7ba40a1 100644
--- a/prefs.c
+++ b/prefs.c
@@ -1,7 +1,7 @@
/* prefs.c
* Routines for handling preferences
*
- * $Id: prefs.c,v 1.28 1999/12/30 23:02:38 gram Exp $
+ * $Id: prefs.c,v 1.29 2000/01/03 06:29:32 guy Exp $
*
* Ethereal - Network traffic analyzer
* By Gerald Combs <gerald@zing.org>
@@ -51,7 +51,6 @@
#include "prefs.h"
#include "column.h"
#include "print.h"
-#include "ui_util.h"
/* Internal functions */
static int set_pref(gchar*, gchar*);
@@ -454,8 +453,8 @@ set_pref(gchar *pref, gchar *value) {
return 1;
}
-void
-write_prefs(void) {
+int
+write_prefs(char **pf_path_return) {
FILE *pf;
struct stat s_buf;
@@ -480,10 +479,9 @@ write_prefs(void) {
sprintf(pf_path, "%s/%s/%s", getenv("HOME"), PF_DIR, PF_NAME);
if ((pf = fopen(pf_path, "w")) == NULL) {
- simple_dialog(ESD_TYPE_WARN, NULL,
- "Can't open preferences file\n\"%s\".", pf_path);
- return;
- }
+ *pf_path_return = pf_path;
+ return errno;
+ }
fputs("# Configuration file for Ethereal " VERSION ".\n"
"#\n"
@@ -551,4 +549,10 @@ write_prefs(void) {
gui_ptree_expander_style_text[prefs.gui_ptree_expander_style]);
fclose(pf);
+
+ /* XXX - catch I/O errors (e.g. "ran out of disk space") and return
+ an error indication, or maybe write to a new preferences file and
+ rename that file on top of the old one only if there are not I/O
+ errors. */
+ return 0;
}
diff --git a/prefs.h b/prefs.h
index 5e53c58743..52e9a4675d 100644
--- a/prefs.h
+++ b/prefs.h
@@ -1,7 +1,7 @@
/* prefs.h
* Definitions for preference handling routines
*
- * $Id: prefs.h,v 1.13 1999/12/30 23:02:39 gram Exp $
+ * $Id: prefs.h,v 1.14 2000/01/03 06:29:33 guy Exp $
*
* Ethereal - Network traffic analyzer
* By Gerald Combs <gerald@zing.org>
@@ -54,6 +54,6 @@ typedef struct _e_prefs {
extern e_prefs prefs;
e_prefs* read_prefs(char **);
-void write_prefs(void);
+int write_prefs(char **);
#endif /* prefs.h */