On Windows, put Ethereal configuration files under the "Application
[obnox/wireshark/wip.git] / gtk / prefs_dlg.c
index 99c42db30964008060debc94309b5785481019bb..e1512ccfbaab68fd3ee3a032a263a88d7d588567 100644 (file)
@@ -1,7 +1,7 @@
 /* prefs_dlg.c
  * Routines for handling preferences
  *
- * $Id: prefs_dlg.c,v 1.28 2001/10/13 07:56:27 guy Exp $
+ * $Id: prefs_dlg.c,v 1.32 2001/10/24 06:13:07 guy Exp $
  *
  * Ethereal - Network traffic analyzer
  * By Gerald Combs <gerald@ethereal.com>
 #include <sys/stat.h>
 #endif
 
+#include <epan/filesystem.h>
+
 #include "main.h"
+#include "gtkglobals.h"
 #include "packet.h"
 #include "file.h"
 #include "prefs.h"
@@ -642,7 +645,8 @@ prefs_main_save_cb(GtkWidget *save_bt, gpointer parent_w)
 {
   gboolean must_redissect = FALSE;
   int err;
-  char *pf_path;
+  char *pf_dir_path;
+  const char *pf_path;
 
   /* Fetch the preferences (i.e., make sure all the values set in all of
      the preferences panes have been copied to "prefs" and the registered
@@ -653,12 +657,21 @@ prefs_main_save_cb(GtkWidget *save_bt, gpointer parent_w)
   gui_prefs_fetch(gtk_object_get_data(GTK_OBJECT(parent_w), E_GUI_PAGE_KEY));
   prefs_module_foreach(module_prefs_fetch, &must_redissect);
 
-  /* Write the preferencs out. */
-  err = write_prefs(&pf_path);
-  if (err != 0) {
+  /* Create the directory that holds personal configuration files, if
+     necessary.  */
+  if (create_persconffile_dir(&pf_dir_path) == -1) {
      simple_dialog(ESD_TYPE_WARN, NULL,
-      "Can't open preferences file\n\"%s\": %s.", pf_path,
-      strerror(err));
+      "Can't create directory\n\"%s\"\nfor preferences file: %s.", pf_dir_path,
+      strerror(errno));
+     g_free(pf_dir_path);
+  } else {
+    /* Write the preferencs out. */
+    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));
+    }
   }
 
   /* Now apply those preferences.