Index: reminder.c

second, third and fourth chunk: scan/serialize time_t as/into into long
long, fixes crashes at runtime due to timestamps corruption.

--- reminder.c.orig
+++ reminder.c
@@ -87,7 +87,7 @@ static struct reminder_config {
 
 struct event_stored {
   gchar *name;
-  guint id;
+  gulong id;
   gint days;
   gint occurs;
   time_t start;
@@ -320,6 +320,8 @@ reminder_load_stored()
 
   while( fscanf( fp, "%[^\n]\n", buffer ) )
     {
+      long long start, end, last_displayed;
+
       current = malloc( sizeof( struct event_stored ) );
       if( !current )
 	break;
@@ -333,14 +335,17 @@ reminder_load_stored()
   //    strcpy( current->name, buffer );
       current->name = g_strdup(buffer);
 
-      if( fscanf( fp, "%u %d %d %ld %ld %ld\n", &current->id, &current->days,
-          &current->occurs, &current->start, &current->end,
-          &current->last_displayed ) != 6 )
+      if( fscanf( fp, "%lu %d %d %lld %lld %lld\n", &current->id, &current->days,
+          &current->occurs, &start, &end,
+          &last_displayed ) != 6 )
 	{
 	  g_free( current->name );
 	  free( current );
 	  break;
 	}
+      current->start = start;
+      current->end = end;
+      current->last_displayed = last_displayed;
       if( current->occurs == TRUE && current->days >> 16 == 0 )
 	{
 	  current->occurs = OPT_WEEKLY;
@@ -431,8 +436,8 @@ reminder_save_stored()
   current = head_stored;
   while( current )
     {
-      fprintf( fp, "%s\n%u %d %d %ld %ld %ld\n", current->name, current->id, current->days,
-	       current->occurs, current->start, current->end, current->last_displayed );
+      fprintf( fp, "%s\n%lu %d %d %lld %lld %lld\n", current->name, current->id, current->days,
+	       current->occurs, (long long)current->start, (long long)current->end, (long long)current->last_displayed );
 
       current = current->next;
     }
@@ -529,7 +534,7 @@ reminder_remove_event_stored( struct event_stored **he
 }
 
 static struct event_stored *
-reminder_find_event_stored( struct event_stored *head_list, guint id )
+reminder_find_event_stored( struct event_stored *head_list, gulong id )
 {
   struct event_stored *current;
 
@@ -1003,8 +1008,8 @@ reminder_build_today( gboolean rebuild )
 static void
 cb_set_days( GtkWidget *window, gpointer data )
 {
-  gint weekdays = (gint) data & 1;
-  gint weekends = (gint) data & 2;
+  gint weekdays = (GPOINTER_TO_INT (data)) & 1;
+  gint weekends = (GPOINTER_TO_INT (data)) & 2;
 
   gtk_toggle_button_set_active( GTK_TOGGLE_BUTTON( check_sun ), weekends );
   gtk_toggle_button_set_active( GTK_TOGGLE_BUTTON( check_sat ), weekends );
@@ -1383,12 +1388,12 @@ static void
 cb_remove( GtkWidget *window, gpointer data )
 {
   struct id_list *current;
-  guint id;
+  gulong id;
 
   if( list_main_row_selected == -1 )
     return;
 
-  id = (guint) gtk_clist_get_row_data( GTK_CLIST( list_main ), list_main_row_selected );
+  id = (gulong) gtk_clist_get_row_data( GTK_CLIST( list_main ), list_main_row_selected );
 
   /* Try to remove event from temp list. If not, add to to-be-deleted list */
   if( !reminder_remove_event_stored( &head_temp, id ) )
@@ -1661,13 +1666,13 @@ cb_sort_days( GtkCList *clist, gconstpointer *p1, gcon
 
   struct event_stored *es1, *es2;
 
-  es1 = reminder_find_event_stored( head_stored, (guint) row1->data );
+  es1 = reminder_find_event_stored( head_stored, (gulong) row1->data );
   if( !es1 )
-    es1 = reminder_find_event_stored( head_temp, (guint) row1->data );
+    es1 = reminder_find_event_stored( head_temp, (gulong) row1->data );
 
-  es2 = reminder_find_event_stored( head_stored, (guint) row2->data );
+  es2 = reminder_find_event_stored( head_stored, (gulong) row2->data );
   if( !es2 )
-    es2 = reminder_find_event_stored( head_temp, (guint) row2->data );
+    es2 = reminder_find_event_stored( head_temp, (gulong) row2->data );
 
   if( es1 && es2 )
     {
@@ -1692,13 +1697,13 @@ cb_sort_time( GtkCList *clist, gconstpointer *p1, gcon
 
   struct event_stored *es1, *es2;
 
-  es1 = reminder_find_event_stored( head_stored, (guint) row1->data );
+  es1 = reminder_find_event_stored( head_stored, (gulong) row1->data );
   if( !es1 )
-    es1 = reminder_find_event_stored( head_temp, (guint) row1->data );
+    es1 = reminder_find_event_stored( head_temp, (gulong) row1->data );
 
-  es2 = reminder_find_event_stored( head_stored, (guint) row2->data );
+  es2 = reminder_find_event_stored( head_stored, (gulong) row2->data );
   if( !es2 )
-    es2 = reminder_find_event_stored( head_temp, (guint) row2->data );
+    es2 = reminder_find_event_stored( head_temp, (gulong) row2->data );
 
   if( es1 && es2 )
     return( ( ( es1->start - TIMEZONE_DIFF ) % SECS_PER_DAY ) -
@@ -1715,13 +1720,13 @@ cb_sort_start( GtkCList *clist, gconstpointer *p1, gco
 
   struct event_stored *es1, *es2;
 
-  es1 = reminder_find_event_stored( head_stored, (guint) row1->data );
+  es1 = reminder_find_event_stored( head_stored, (gulong) row1->data );
   if( !es1 )
-    es1 = reminder_find_event_stored( head_temp, (guint) row1->data );
+    es1 = reminder_find_event_stored( head_temp, (gulong) row1->data );
 
-  es2 = reminder_find_event_stored( head_stored, (guint) row2->data );
+  es2 = reminder_find_event_stored( head_stored, (gulong) row2->data );
   if( !es2 )
-    es2 = reminder_find_event_stored( head_temp, (guint) row2->data );
+    es2 = reminder_find_event_stored( head_temp, (gulong) row2->data );
 
   if( es1 && es2 )
     return es1->start - es2->start;
@@ -1737,13 +1742,13 @@ cb_sort_end( GtkCList *clist, gconstpointer *p1, gcons
 
   struct event_stored *es1, *es2;
 
-  es1 = reminder_find_event_stored( head_stored, (guint) row1->data );
+  es1 = reminder_find_event_stored( head_stored, (gulong) row1->data );
   if( !es1 )
-    es1 = reminder_find_event_stored( head_temp, (guint) row1->data );
+    es1 = reminder_find_event_stored( head_temp, (gulong) row1->data );
 
-  es2 = reminder_find_event_stored( head_stored, (guint) row2->data );
+  es2 = reminder_find_event_stored( head_stored, (gulong) row2->data );
   if( !es2 )
-    es2 = reminder_find_event_stored( head_temp, (guint) row2->data );
+    es2 = reminder_find_event_stored( head_temp, (gulong) row2->data );
 
   if( es1 && es2 )
     return es1->end - es2->end;
@@ -2884,7 +2889,7 @@ reminder_text_button_enable( void )
 static void
 reminder_window_never( GtkWidget *window, gpointer data )
 {
-  guint id = (guint) data;
+  gulong id = (gulong) data;
 
   /* delete event from today */
   num_active--;
@@ -2914,7 +2919,7 @@ reminder_window_never( GtkWidget *window, gpointer dat
 static void
 reminder_window_later( GtkWidget *window, gpointer data )
 {
-  guint id = (guint) data;
+  gulong id = (gulong) data;
   struct event_stored *new, *old;
 
   /* delete event from today */
@@ -2991,7 +2996,7 @@ reminder_window_later( GtkWidget *window, gpointer dat
 static void
 reminder_window_dismiss( GtkWidget *window, gpointer data )
 {
-  guint id = (guint) data;
+  gulong id = (gulong) data;
 
   /* delete event from today */
   num_active--;
