From 6c7edfbb862b1598b74e4413121dfa42e3a79211 Mon Sep 17 00:00:00 2001
From: Lukas Fleischer <calcurse@cryptocrack.de>
Date: Fri, 2 Sep 2011 11:52:26 +0200
Subject: Do not unlink() note files on note removal

Now that we use hash-based note file names, note files should never be
unlinked as a note file might be shared.

Also, remove the ERASE_FORCE_KEEP_NOTE flag that no longer makes any
sense.

Signed-off-by: Lukas Fleischer <calcurse@cryptocrack.de>
---
 src/apoint.c   | 16 +++++++---------
 src/calcurse.h | 11 +++++------
 src/event.c    | 16 +++++++---------
 src/io.c       |  6 +++---
 src/note.c     | 12 ++----------
 src/recur.c    | 30 +++++++++++++-----------------
 src/todo.c     | 12 ++++++------
 src/utils.c    |  8 ++++----
 8 files changed, 47 insertions(+), 64 deletions(-)

(limited to 'src')

diff --git a/src/apoint.c b/src/apoint.c
index 6fd9e64..a49b156 100644
--- a/src/apoint.c
+++ b/src/apoint.c
@@ -46,21 +46,21 @@ static struct apoint  bkp_cut_apoint;
 static int            hilt;
 
 void
-apoint_free_bkp (enum eraseflg flag)
+apoint_free_bkp (void)
 {
   if (bkp_cut_apoint.mesg)
     {
       mem_free (bkp_cut_apoint.mesg);
       bkp_cut_apoint.mesg = 0;
     }
-  erase_note (&bkp_cut_apoint.note, flag);
+  erase_note (&bkp_cut_apoint.note);
 }
 
 static void
 apoint_free (struct apoint *apt)
 {
   mem_free (apt->mesg);
-  erase_note (&apt->note, ERASE_FORCE_KEEP_NOTE);
+  erase_note (&apt->note);
   mem_free (apt);
 }
 
@@ -500,20 +500,18 @@ apoint_delete_bynum (long start, unsigned num, enum eraseflg flag)
   switch (flag)
     {
     case ERASE_FORCE_ONLY_NOTE:
-      erase_note (&apt->note, flag);
+      erase_note (&apt->note);
       break;
     case ERASE_CUT:
-      apoint_free_bkp (ERASE_FORCE);
+      apoint_free_bkp ();
       apoint_dup (apt, &bkp_cut_apoint);
-      erase_note (&apt->note, ERASE_FORCE_KEEP_NOTE);
+      erase_note (&apt->note);
       /* FALLTHROUGH */
     default:
       if (notify_bar ())
         need_check_notify = notify_same_item (apt->start);
       LLIST_TS_REMOVE (&alist_p, i);
       mem_free (apt->mesg);
-      if (flag != ERASE_FORCE_KEEP_NOTE && flag != ERASE_CUT)
-        erase_note (&apt->note, flag);
       mem_free (apt);
       if (need_check_notify)
         notify_check_next_app (0);
@@ -733,5 +731,5 @@ apoint_paste_item (void)
   if (notify_bar ())
     notify_check_added (bkp_cut_apoint.mesg, bkp_start, bkp_cut_apoint.state);
 
-  apoint_free_bkp (ERASE_FORCE_KEEP_NOTE);
+  apoint_free_bkp ();
 }
diff --git a/src/calcurse.h b/src/calcurse.h
index 4f0dc20..adf9d2d 100644
--- a/src/calcurse.h
+++ b/src/calcurse.h
@@ -484,7 +484,6 @@ enum item_type {
 enum eraseflg {
   ERASE_DONT_FORCE,
   ERASE_FORCE,
-  ERASE_FORCE_KEEP_NOTE,
   ERASE_FORCE_ONLY_NOTE,
   ERASE_CUT
 };
@@ -554,7 +553,7 @@ enum save_display {
 
 /* apoint.c */
 extern llist_ts_t alist_p;
-void               apoint_free_bkp (enum eraseflg);
+void               apoint_free_bkp (void);
 void               apoint_llist_init (void);
 void               apoint_llist_free (void);
 void               apoint_hilt_set (int);
@@ -645,7 +644,7 @@ void   dmon_stop (void);
 
 /* event.c */
 extern llist_t eventlist;
-void          event_free_bkp (enum eraseflg);
+void          event_free_bkp (void);
 void          event_llist_init (void);
 void          event_llist_free (void);
 struct event *event_new (char *, char *, long, int);
@@ -753,7 +752,7 @@ void   mem_stats (void);
 /* note.c */
 void  edit_note (char **, char *);
 void  view_note (char *, char *);
-void  erase_note (char **, enum eraseflg);
+void  erase_note (char **);
 void  note_read (char *, FILE *);
 
 /* notify.c */
@@ -782,8 +781,8 @@ void      notify_config_bar (void);
 /* recur.c */
 extern llist_ts_t recur_alist_p;
 extern llist_t recur_elist;
-void                  recur_event_free_bkp (enum eraseflg);
-void                  recur_apoint_free_bkp (enum eraseflg);
+void                  recur_event_free_bkp (void);
+void                  recur_apoint_free_bkp (void);
 void                  recur_apoint_llist_init (void);
 void                  recur_apoint_llist_free (void);
 void                  recur_event_llist_free (void);
diff --git a/src/event.c b/src/event.c
index c395ed8..6c7e70f 100644
--- a/src/event.c
+++ b/src/event.c
@@ -45,21 +45,21 @@ llist_t              eventlist;
 static struct event  bkp_cut_event;
 
 void
-event_free_bkp (enum eraseflg flag)
+event_free_bkp (void)
 {
   if (bkp_cut_event.mesg)
     {
       mem_free (bkp_cut_event.mesg);
       bkp_cut_event.mesg = 0;
     }
-  erase_note (&bkp_cut_event.note, flag);
+  erase_note (&bkp_cut_event.note);
 }
 
 static void
 event_free (struct event *ev)
 {
   mem_free (ev->mesg);
-  erase_note (&ev->note, ERASE_FORCE_KEEP_NOTE);
+  erase_note (&ev->note);
   mem_free (ev);
 }
 
@@ -194,18 +194,16 @@ event_delete_bynum (long start, unsigned num, enum eraseflg flag)
   switch (flag)
     {
     case ERASE_FORCE_ONLY_NOTE:
-      erase_note (&ev->note, flag);
+      erase_note (&ev->note);
       break;
     case ERASE_CUT:
-      event_free_bkp (ERASE_FORCE);
+      event_free_bkp ();
       event_dup (ev, &bkp_cut_event);
-      erase_note (&ev->note, ERASE_FORCE_KEEP_NOTE);
+      erase_note (&ev->note);
       /* FALLTHROUGH */
     default:
       LLIST_REMOVE (&eventlist, i);
       mem_free (ev->mesg);
-      if (flag != ERASE_FORCE_KEEP_NOTE && flag != ERASE_CUT)
-        erase_note (&ev->note, flag);
       mem_free (ev);
       break;
     }
@@ -217,5 +215,5 @@ event_paste_item (void)
   (void)event_new (bkp_cut_event.mesg, bkp_cut_event.note,
                    date2sec (*calendar_get_slctd_day (), 12, 0),
                    bkp_cut_event.id);
-  event_free_bkp (ERASE_FORCE_KEEP_NOTE);
+  event_free_bkp ();
 }
diff --git a/src/io.c b/src/io.c
index 20dab48..c71934a 100644
--- a/src/io.c
+++ b/src/io.c
@@ -1749,7 +1749,7 @@ ical_store_todo (int priority, char *mesg, char *note)
 {
   todo_add (mesg, priority, note);
   mem_free (mesg);
-  erase_note (&note, ERASE_FORCE_KEEP_NOTE);
+  erase_note (&note);
 }
 
 static void
@@ -1781,7 +1781,7 @@ ical_store_event (char *mesg, char *note, long day, long end, ical_rpt_t *rpt,
       event_new (mesg, note, day, EVENTID);
     }
   mem_free (mesg);
-  erase_note (&note, ERASE_FORCE_KEEP_NOTE);
+  erase_note (&note);
 }
 
 static void
@@ -1803,7 +1803,7 @@ ical_store_apoint (char *mesg, char *note, long start, long dur,
       apoint_new (mesg, note, start, dur, state);
     }
   mem_free (mesg);
-  erase_note (&note, ERASE_FORCE_KEEP_NOTE);
+  erase_note (&note);
 }
 
 /*
diff --git a/src/note.c b/src/note.c
index 36c2c0f..db5c45a 100644
--- a/src/note.c
+++ b/src/note.c
@@ -65,7 +65,7 @@ edit_note (char **note, char *editor)
   wins_launch_external (tmppath, editor);
 
   if (io_file_is_empty (tmppath) > 0)
-    erase_note (note, ERASE_FORCE_KEEP_NOTE);
+    erase_note (note);
   else if ((fp = fopen (tmppath, "r")))
     {
       sha1_stream (fp, sha1);
@@ -93,18 +93,10 @@ view_note (char *note, char *pager)
 
 /* Erase a note previously attached to an item. */
 void
-erase_note (char **note, enum eraseflg flag)
+erase_note (char **note)
 {
-  char fullname[BUFSIZ];
-
   if (*note == NULL)
     return;
-  if (flag != ERASE_FORCE_KEEP_NOTE)
-    {
-      (void)snprintf (fullname, BUFSIZ, "%s%s", path_notes, *note);
-      if (unlink (fullname) != 0)
-        EXIT (_("could not remove note"));
-    }
   mem_free (*note);
   *note = NULL;
 }
diff --git a/src/recur.c b/src/recur.c
index dbc52ee..0415257 100644
--- a/src/recur.c
+++ b/src/recur.c
@@ -93,7 +93,7 @@ exc_dup (llist_t *in, llist_t *exc)
 }
 
 void
-recur_event_free_bkp (enum eraseflg flag)
+recur_event_free_bkp (void)
 {
   if (bkp_cut_recur_event.mesg)
     {
@@ -106,11 +106,11 @@ recur_event_free_bkp (enum eraseflg flag)
       bkp_cut_recur_event.rpt = 0;
     }
   free_exc_list (&bkp_cut_recur_event.exc);
-  erase_note (&bkp_cut_recur_event.note, flag);
+  erase_note (&bkp_cut_recur_event.note);
 }
 
 void
-recur_apoint_free_bkp (enum eraseflg flag)
+recur_apoint_free_bkp (void)
 {
   if (bkp_cut_recur_apoint.mesg)
     {
@@ -123,7 +123,7 @@ recur_apoint_free_bkp (enum eraseflg flag)
       bkp_cut_recur_apoint.rpt = 0;
     }
   free_exc_list (&bkp_cut_recur_apoint.exc);
-  erase_note (&bkp_cut_recur_apoint.note, flag);
+  erase_note (&bkp_cut_recur_apoint.note);
 }
 
 static void
@@ -740,12 +740,12 @@ recur_event_erase (long start, unsigned num, unsigned delete_whole,
       switch (flag)
         {
         case ERASE_FORCE_ONLY_NOTE:
-          erase_note (&rev->note, flag);
+          erase_note (&rev->note);
           break;
         case ERASE_CUT:
-          recur_event_free_bkp (ERASE_FORCE);
+          recur_event_free_bkp ();
           recur_event_dup (rev, &bkp_cut_recur_event);
-          erase_note (&rev->note, ERASE_FORCE_KEEP_NOTE);
+          erase_note (&rev->note);
           /* FALLTHROUGH */
         default:
           LLIST_REMOVE (&recur_elist, i);
@@ -756,8 +756,6 @@ recur_event_erase (long start, unsigned num, unsigned delete_whole,
               rev->rpt = 0;
             }
           free_exc_list (&rev->exc);
-          if (flag != ERASE_FORCE_KEEP_NOTE && flag != ERASE_CUT)
-            erase_note (&rev->note, flag);
           mem_free (rev);
           break;
         }
@@ -791,12 +789,12 @@ recur_apoint_erase (long start, unsigned num, unsigned delete_whole,
       switch (flag)
         {
         case ERASE_FORCE_ONLY_NOTE:
-          erase_note (&rapt->note, flag);
+          erase_note (&rapt->note);
           break;
         case ERASE_CUT:
-          recur_apoint_free_bkp (ERASE_FORCE);
+          recur_apoint_free_bkp ();
           recur_apoint_dup (rapt, &bkp_cut_recur_apoint);
-          erase_note (&rapt->note, ERASE_FORCE_KEEP_NOTE);
+          erase_note (&rapt->note);
           /* FALLTHROUGH */
         default:
           LLIST_TS_REMOVE (&recur_alist_p, i);
@@ -807,8 +805,6 @@ recur_apoint_erase (long start, unsigned num, unsigned delete_whole,
               rapt->rpt = 0;
             }
           free_exc_list (&rapt->exc);
-          if (flag != ERASE_FORCE_KEEP_NOTE && flag != ERASE_CUT)
-            erase_note (&rapt->note, flag);
           mem_free (rapt);
           if (need_check_notify)
             notify_check_next_app (0);
@@ -970,7 +966,7 @@ recur_repeat_item (struct conf *conf)
       EXIT (_("wrong item type"));
       /* NOTREACHED */
     }
-  day_erase_item (date, item_nb, ERASE_FORCE_KEEP_NOTE);
+  day_erase_item (date, item_nb, ERASE_FORCE);
 }
 
 /*
@@ -1111,7 +1107,7 @@ recur_event_paste_item (void)
                          bkp_cut_recur_event.rpt->freq,
                          bkp_cut_recur_event.rpt->until,
                          &bkp_cut_recur_event.exc);
-  recur_event_free_bkp (ERASE_FORCE_KEEP_NOTE);
+  recur_event_free_bkp ();
 }
 
 void
@@ -1145,5 +1141,5 @@ recur_apoint_paste_item (void)
   if (notify_bar ())
     notify_check_repeated (&bkp_cut_recur_apoint);
 
-  recur_apoint_free_bkp (ERASE_FORCE_KEEP_NOTE);
+  recur_apoint_free_bkp ();
 }
diff --git a/src/todo.c b/src/todo.c
index 3c0d1ba..1ccd9f1 100644
--- a/src/todo.c
+++ b/src/todo.c
@@ -204,12 +204,12 @@ todo_delete_note_bynum (unsigned num)
 
   if (!todo->note)
     EXIT (_("no note attached"));
-  erase_note (&todo->note, ERASE_FORCE_ONLY_NOTE);
+  erase_note (&todo->note);
 }
 
 /* Delete an item from the todo linked list. */
 static void
-todo_delete_bynum (unsigned num, enum eraseflg flag)
+todo_delete_bynum (unsigned num)
 {
   llist_item_t *i = LLIST_NTH (&todolist, num);
 
@@ -219,7 +219,7 @@ todo_delete_bynum (unsigned num, enum eraseflg flag)
 
   LLIST_REMOVE (&todolist, i);
   mem_free (todo->mesg);
-  erase_note (&todo->note, flag);
+  erase_note (&todo->note);
   mem_free (todo);
 }
 
@@ -288,7 +288,7 @@ todo_delete (struct conf *conf)
   switch (answer)
     {
     case 't':
-      todo_delete_bynum (hilt - 1, ERASE_FORCE);
+      todo_delete_bynum (hilt - 1);
       todos--;
       if (hilt > 1)
         hilt--;
@@ -358,7 +358,7 @@ todo_chg_priority (int action)
     }
   if (do_chg)
     {
-      todo_delete_bynum (hilt - 1, ERASE_FORCE_KEEP_NOTE);
+      todo_delete_bynum (hilt - 1);
       backup = todo_add (backup_mesg, backup_id, backup_note);
       hilt = todo_get_position (backup);
     }
@@ -516,7 +516,7 @@ void
 todo_free (struct todo *todo)
 {
   mem_free (todo->mesg);
-  erase_note (&todo->note, ERASE_FORCE_KEEP_NOTE);
+  erase_note (&todo->note);
   mem_free (todo);
 }
 
diff --git a/src/utils.c b/src/utils.c
index 4ea2ce3..ac7706c 100644
--- a/src/utils.c
+++ b/src/utils.c
@@ -89,13 +89,13 @@ free_user_data (void)
 {
   day_free_list ();
   event_llist_free ();
-  event_free_bkp (ERASE_FORCE);
+  event_free_bkp ();
   apoint_llist_free ();
-  apoint_free_bkp (ERASE_FORCE);
+  apoint_free_bkp ();
   recur_apoint_llist_free ();
   recur_event_llist_free ();
-  recur_apoint_free_bkp (ERASE_FORCE);
-  recur_event_free_bkp (ERASE_FORCE);
+  recur_apoint_free_bkp ();
+  recur_event_free_bkp ();
   todo_free_list ();
   notify_free_app ();
 }
-- 
cgit v1.2.3-70-g09d2