From 393c87af52df8cfbb62d7ce884990819dae8d208 Mon Sep 17 00:00:00 2001 From: JP Rosevear Date: Wed, 4 Aug 1999 18:37:50 +0000 Subject: BUGFIX #1819 Please note that the calendar_save routine is now responsible for changing the filename attribute of the calendar struct, rather than the calling function. This was so that the filename could be reverted if the open failed. svn path=/trunk/; revision=1080 --- calendar/calendar.c | 27 ++++++++++++++++++++++----- calendar/gui/calendar.c | 27 ++++++++++++++++++++++----- calendar/gui/main.c | 9 ++++----- calendar/main.c | 9 ++++----- 4 files changed, 52 insertions(+), 20 deletions(-) diff --git a/calendar/calendar.c b/calendar/calendar.c index 339995cb92..dfeb1d6cc8 100644 --- a/calendar/calendar.c +++ b/calendar/calendar.c @@ -12,6 +12,8 @@ * */ +#include +#include #include #include #include @@ -396,8 +398,11 @@ void calendar_save (Calendar *cal, char *fname) { VObject *vcal; + FILE *fp; + GtkWidget *dlg; struct stat s; - + int status; + if (fname == NULL) fname = cal->filename; @@ -412,11 +417,23 @@ calendar_save (Calendar *cal, char *fname) g_free (backup_name); } - writeVObjectToFile (fname, vcal); + fp = fopen(fname,"w"); + if (fp) { + writeVObject(fp, vcal); + fclose(fp); + if (strcmp(cal->filename, fname)) { + if (cal->filename) + g_free (cal->filename); + cal->filename = g_strdup (fname); + } + status = stat (fname, &s); + cal->file_time = s.st_mtime; + } else { + dlg = gnome_message_box_new(_("Failed to save calendar!"), + GNOME_MESSAGE_BOX_ERROR, "Ok", NULL); + gtk_widget_show(dlg); + } - stat (fname, &s); - cal->file_time = s.st_mtime; - cleanVObject (vcal); cleanStrTbl (); } diff --git a/calendar/gui/calendar.c b/calendar/gui/calendar.c index 339995cb92..dfeb1d6cc8 100644 --- a/calendar/gui/calendar.c +++ b/calendar/gui/calendar.c @@ -12,6 +12,8 @@ * */ +#include +#include #include #include #include @@ -396,8 +398,11 @@ void calendar_save (Calendar *cal, char *fname) { VObject *vcal; + FILE *fp; + GtkWidget *dlg; struct stat s; - + int status; + if (fname == NULL) fname = cal->filename; @@ -412,11 +417,23 @@ calendar_save (Calendar *cal, char *fname) g_free (backup_name); } - writeVObjectToFile (fname, vcal); + fp = fopen(fname,"w"); + if (fp) { + writeVObject(fp, vcal); + fclose(fp); + if (strcmp(cal->filename, fname)) { + if (cal->filename) + g_free (cal->filename); + cal->filename = g_strdup (fname); + } + status = stat (fname, &s); + cal->file_time = s.st_mtime; + } else { + dlg = gnome_message_box_new(_("Failed to save calendar!"), + GNOME_MESSAGE_BOX_ERROR, "Ok", NULL); + gtk_widget_show(dlg); + } - stat (fname, &s); - cal->file_time = s.st_mtime; - cleanVObject (vcal); cleanStrTbl (); } diff --git a/calendar/gui/main.c b/calendar/gui/main.c index 3a49dfaa9a..6c4a4b4522 100644 --- a/calendar/gui/main.c +++ b/calendar/gui/main.c @@ -367,15 +367,14 @@ static void save_ok (GtkWidget *widget, GtkFileSelection *fs) { GnomeCalendar *gcal; + gchar *fname; gcal = GNOME_CALENDAR (gtk_object_get_user_data (GTK_OBJECT (fs))); gtk_window_set_wmclass (GTK_WINDOW (gcal), "gnomecal", "gnomecal"); - if (gcal->cal->filename) - g_free (gcal->cal->filename); - - gcal->cal->filename = g_strdup (gtk_file_selection_get_filename (fs)); - calendar_save (gcal->cal, gcal->cal->filename); + fname = g_strdup (gtk_file_selection_get_filename (fs)); + calendar_save (gcal->cal, fname); + g_free(fname); gtk_main_quit (); } diff --git a/calendar/main.c b/calendar/main.c index 3a49dfaa9a..6c4a4b4522 100644 --- a/calendar/main.c +++ b/calendar/main.c @@ -367,15 +367,14 @@ static void save_ok (GtkWidget *widget, GtkFileSelection *fs) { GnomeCalendar *gcal; + gchar *fname; gcal = GNOME_CALENDAR (gtk_object_get_user_data (GTK_OBJECT (fs))); gtk_window_set_wmclass (GTK_WINDOW (gcal), "gnomecal", "gnomecal"); - if (gcal->cal->filename) - g_free (gcal->cal->filename); - - gcal->cal->filename = g_strdup (gtk_file_selection_get_filename (fs)); - calendar_save (gcal->cal, gcal->cal->filename); + fname = g_strdup (gtk_file_selection_get_filename (fs)); + calendar_save (gcal->cal, fname); + g_free(fname); gtk_main_quit (); } -- cgit