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>
This commit is contained in:
Lukas Fleischer 2011-09-02 11:52:26 +02:00
parent c77d1a573f
commit 6c7edfbb86
8 changed files with 47 additions and 64 deletions

View File

@ -46,21 +46,21 @@ static struct apoint bkp_cut_apoint;
static int hilt; static int hilt;
void void
apoint_free_bkp (enum eraseflg flag) apoint_free_bkp (void)
{ {
if (bkp_cut_apoint.mesg) if (bkp_cut_apoint.mesg)
{ {
mem_free (bkp_cut_apoint.mesg); mem_free (bkp_cut_apoint.mesg);
bkp_cut_apoint.mesg = 0; bkp_cut_apoint.mesg = 0;
} }
erase_note (&bkp_cut_apoint.note, flag); erase_note (&bkp_cut_apoint.note);
} }
static void static void
apoint_free (struct apoint *apt) apoint_free (struct apoint *apt)
{ {
mem_free (apt->mesg); mem_free (apt->mesg);
erase_note (&apt->note, ERASE_FORCE_KEEP_NOTE); erase_note (&apt->note);
mem_free (apt); mem_free (apt);
} }
@ -500,20 +500,18 @@ apoint_delete_bynum (long start, unsigned num, enum eraseflg flag)
switch (flag) switch (flag)
{ {
case ERASE_FORCE_ONLY_NOTE: case ERASE_FORCE_ONLY_NOTE:
erase_note (&apt->note, flag); erase_note (&apt->note);
break; break;
case ERASE_CUT: case ERASE_CUT:
apoint_free_bkp (ERASE_FORCE); apoint_free_bkp ();
apoint_dup (apt, &bkp_cut_apoint); apoint_dup (apt, &bkp_cut_apoint);
erase_note (&apt->note, ERASE_FORCE_KEEP_NOTE); erase_note (&apt->note);
/* FALLTHROUGH */ /* FALLTHROUGH */
default: default:
if (notify_bar ()) if (notify_bar ())
need_check_notify = notify_same_item (apt->start); need_check_notify = notify_same_item (apt->start);
LLIST_TS_REMOVE (&alist_p, i); LLIST_TS_REMOVE (&alist_p, i);
mem_free (apt->mesg); mem_free (apt->mesg);
if (flag != ERASE_FORCE_KEEP_NOTE && flag != ERASE_CUT)
erase_note (&apt->note, flag);
mem_free (apt); mem_free (apt);
if (need_check_notify) if (need_check_notify)
notify_check_next_app (0); notify_check_next_app (0);
@ -733,5 +731,5 @@ apoint_paste_item (void)
if (notify_bar ()) if (notify_bar ())
notify_check_added (bkp_cut_apoint.mesg, bkp_start, bkp_cut_apoint.state); notify_check_added (bkp_cut_apoint.mesg, bkp_start, bkp_cut_apoint.state);
apoint_free_bkp (ERASE_FORCE_KEEP_NOTE); apoint_free_bkp ();
} }

View File

@ -484,7 +484,6 @@ enum item_type {
enum eraseflg { enum eraseflg {
ERASE_DONT_FORCE, ERASE_DONT_FORCE,
ERASE_FORCE, ERASE_FORCE,
ERASE_FORCE_KEEP_NOTE,
ERASE_FORCE_ONLY_NOTE, ERASE_FORCE_ONLY_NOTE,
ERASE_CUT ERASE_CUT
}; };
@ -554,7 +553,7 @@ enum save_display {
/* apoint.c */ /* apoint.c */
extern llist_ts_t alist_p; 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_init (void);
void apoint_llist_free (void); void apoint_llist_free (void);
void apoint_hilt_set (int); void apoint_hilt_set (int);
@ -645,7 +644,7 @@ void dmon_stop (void);
/* event.c */ /* event.c */
extern llist_t eventlist; extern llist_t eventlist;
void event_free_bkp (enum eraseflg); void event_free_bkp (void);
void event_llist_init (void); void event_llist_init (void);
void event_llist_free (void); void event_llist_free (void);
struct event *event_new (char *, char *, long, int); struct event *event_new (char *, char *, long, int);
@ -753,7 +752,7 @@ void mem_stats (void);
/* note.c */ /* note.c */
void edit_note (char **, char *); void edit_note (char **, char *);
void view_note (char *, char *); void view_note (char *, char *);
void erase_note (char **, enum eraseflg); void erase_note (char **);
void note_read (char *, FILE *); void note_read (char *, FILE *);
/* notify.c */ /* notify.c */
@ -782,8 +781,8 @@ void notify_config_bar (void);
/* recur.c */ /* recur.c */
extern llist_ts_t recur_alist_p; extern llist_ts_t recur_alist_p;
extern llist_t recur_elist; extern llist_t recur_elist;
void recur_event_free_bkp (enum eraseflg); void recur_event_free_bkp (void);
void recur_apoint_free_bkp (enum eraseflg); void recur_apoint_free_bkp (void);
void recur_apoint_llist_init (void); void recur_apoint_llist_init (void);
void recur_apoint_llist_free (void); void recur_apoint_llist_free (void);
void recur_event_llist_free (void); void recur_event_llist_free (void);

View File

@ -45,21 +45,21 @@ llist_t eventlist;
static struct event bkp_cut_event; static struct event bkp_cut_event;
void void
event_free_bkp (enum eraseflg flag) event_free_bkp (void)
{ {
if (bkp_cut_event.mesg) if (bkp_cut_event.mesg)
{ {
mem_free (bkp_cut_event.mesg); mem_free (bkp_cut_event.mesg);
bkp_cut_event.mesg = 0; bkp_cut_event.mesg = 0;
} }
erase_note (&bkp_cut_event.note, flag); erase_note (&bkp_cut_event.note);
} }
static void static void
event_free (struct event *ev) event_free (struct event *ev)
{ {
mem_free (ev->mesg); mem_free (ev->mesg);
erase_note (&ev->note, ERASE_FORCE_KEEP_NOTE); erase_note (&ev->note);
mem_free (ev); mem_free (ev);
} }
@ -194,18 +194,16 @@ event_delete_bynum (long start, unsigned num, enum eraseflg flag)
switch (flag) switch (flag)
{ {
case ERASE_FORCE_ONLY_NOTE: case ERASE_FORCE_ONLY_NOTE:
erase_note (&ev->note, flag); erase_note (&ev->note);
break; break;
case ERASE_CUT: case ERASE_CUT:
event_free_bkp (ERASE_FORCE); event_free_bkp ();
event_dup (ev, &bkp_cut_event); event_dup (ev, &bkp_cut_event);
erase_note (&ev->note, ERASE_FORCE_KEEP_NOTE); erase_note (&ev->note);
/* FALLTHROUGH */ /* FALLTHROUGH */
default: default:
LLIST_REMOVE (&eventlist, i); LLIST_REMOVE (&eventlist, i);
mem_free (ev->mesg); mem_free (ev->mesg);
if (flag != ERASE_FORCE_KEEP_NOTE && flag != ERASE_CUT)
erase_note (&ev->note, flag);
mem_free (ev); mem_free (ev);
break; break;
} }
@ -217,5 +215,5 @@ event_paste_item (void)
(void)event_new (bkp_cut_event.mesg, bkp_cut_event.note, (void)event_new (bkp_cut_event.mesg, bkp_cut_event.note,
date2sec (*calendar_get_slctd_day (), 12, 0), date2sec (*calendar_get_slctd_day (), 12, 0),
bkp_cut_event.id); bkp_cut_event.id);
event_free_bkp (ERASE_FORCE_KEEP_NOTE); event_free_bkp ();
} }

View File

@ -1749,7 +1749,7 @@ ical_store_todo (int priority, char *mesg, char *note)
{ {
todo_add (mesg, priority, note); todo_add (mesg, priority, note);
mem_free (mesg); mem_free (mesg);
erase_note (&note, ERASE_FORCE_KEEP_NOTE); erase_note (&note);
} }
static void 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); event_new (mesg, note, day, EVENTID);
} }
mem_free (mesg); mem_free (mesg);
erase_note (&note, ERASE_FORCE_KEEP_NOTE); erase_note (&note);
} }
static void static void
@ -1803,7 +1803,7 @@ ical_store_apoint (char *mesg, char *note, long start, long dur,
apoint_new (mesg, note, start, dur, state); apoint_new (mesg, note, start, dur, state);
} }
mem_free (mesg); mem_free (mesg);
erase_note (&note, ERASE_FORCE_KEEP_NOTE); erase_note (&note);
} }
/* /*

View File

@ -65,7 +65,7 @@ edit_note (char **note, char *editor)
wins_launch_external (tmppath, editor); wins_launch_external (tmppath, editor);
if (io_file_is_empty (tmppath) > 0) if (io_file_is_empty (tmppath) > 0)
erase_note (note, ERASE_FORCE_KEEP_NOTE); erase_note (note);
else if ((fp = fopen (tmppath, "r"))) else if ((fp = fopen (tmppath, "r")))
{ {
sha1_stream (fp, sha1); sha1_stream (fp, sha1);
@ -93,18 +93,10 @@ view_note (char *note, char *pager)
/* Erase a note previously attached to an item. */ /* Erase a note previously attached to an item. */
void void
erase_note (char **note, enum eraseflg flag) erase_note (char **note)
{ {
char fullname[BUFSIZ];
if (*note == NULL) if (*note == NULL)
return; 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); mem_free (*note);
*note = NULL; *note = NULL;
} }

View File

@ -93,7 +93,7 @@ exc_dup (llist_t *in, llist_t *exc)
} }
void void
recur_event_free_bkp (enum eraseflg flag) recur_event_free_bkp (void)
{ {
if (bkp_cut_recur_event.mesg) if (bkp_cut_recur_event.mesg)
{ {
@ -106,11 +106,11 @@ recur_event_free_bkp (enum eraseflg flag)
bkp_cut_recur_event.rpt = 0; bkp_cut_recur_event.rpt = 0;
} }
free_exc_list (&bkp_cut_recur_event.exc); free_exc_list (&bkp_cut_recur_event.exc);
erase_note (&bkp_cut_recur_event.note, flag); erase_note (&bkp_cut_recur_event.note);
} }
void void
recur_apoint_free_bkp (enum eraseflg flag) recur_apoint_free_bkp (void)
{ {
if (bkp_cut_recur_apoint.mesg) if (bkp_cut_recur_apoint.mesg)
{ {
@ -123,7 +123,7 @@ recur_apoint_free_bkp (enum eraseflg flag)
bkp_cut_recur_apoint.rpt = 0; bkp_cut_recur_apoint.rpt = 0;
} }
free_exc_list (&bkp_cut_recur_apoint.exc); 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 static void
@ -740,12 +740,12 @@ recur_event_erase (long start, unsigned num, unsigned delete_whole,
switch (flag) switch (flag)
{ {
case ERASE_FORCE_ONLY_NOTE: case ERASE_FORCE_ONLY_NOTE:
erase_note (&rev->note, flag); erase_note (&rev->note);
break; break;
case ERASE_CUT: case ERASE_CUT:
recur_event_free_bkp (ERASE_FORCE); recur_event_free_bkp ();
recur_event_dup (rev, &bkp_cut_recur_event); recur_event_dup (rev, &bkp_cut_recur_event);
erase_note (&rev->note, ERASE_FORCE_KEEP_NOTE); erase_note (&rev->note);
/* FALLTHROUGH */ /* FALLTHROUGH */
default: default:
LLIST_REMOVE (&recur_elist, i); LLIST_REMOVE (&recur_elist, i);
@ -756,8 +756,6 @@ recur_event_erase (long start, unsigned num, unsigned delete_whole,
rev->rpt = 0; rev->rpt = 0;
} }
free_exc_list (&rev->exc); free_exc_list (&rev->exc);
if (flag != ERASE_FORCE_KEEP_NOTE && flag != ERASE_CUT)
erase_note (&rev->note, flag);
mem_free (rev); mem_free (rev);
break; break;
} }
@ -791,12 +789,12 @@ recur_apoint_erase (long start, unsigned num, unsigned delete_whole,
switch (flag) switch (flag)
{ {
case ERASE_FORCE_ONLY_NOTE: case ERASE_FORCE_ONLY_NOTE:
erase_note (&rapt->note, flag); erase_note (&rapt->note);
break; break;
case ERASE_CUT: case ERASE_CUT:
recur_apoint_free_bkp (ERASE_FORCE); recur_apoint_free_bkp ();
recur_apoint_dup (rapt, &bkp_cut_recur_apoint); recur_apoint_dup (rapt, &bkp_cut_recur_apoint);
erase_note (&rapt->note, ERASE_FORCE_KEEP_NOTE); erase_note (&rapt->note);
/* FALLTHROUGH */ /* FALLTHROUGH */
default: default:
LLIST_TS_REMOVE (&recur_alist_p, i); LLIST_TS_REMOVE (&recur_alist_p, i);
@ -807,8 +805,6 @@ recur_apoint_erase (long start, unsigned num, unsigned delete_whole,
rapt->rpt = 0; rapt->rpt = 0;
} }
free_exc_list (&rapt->exc); free_exc_list (&rapt->exc);
if (flag != ERASE_FORCE_KEEP_NOTE && flag != ERASE_CUT)
erase_note (&rapt->note, flag);
mem_free (rapt); mem_free (rapt);
if (need_check_notify) if (need_check_notify)
notify_check_next_app (0); notify_check_next_app (0);
@ -970,7 +966,7 @@ recur_repeat_item (struct conf *conf)
EXIT (_("wrong item type")); EXIT (_("wrong item type"));
/* NOTREACHED */ /* 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->freq,
bkp_cut_recur_event.rpt->until, bkp_cut_recur_event.rpt->until,
&bkp_cut_recur_event.exc); &bkp_cut_recur_event.exc);
recur_event_free_bkp (ERASE_FORCE_KEEP_NOTE); recur_event_free_bkp ();
} }
void void
@ -1145,5 +1141,5 @@ recur_apoint_paste_item (void)
if (notify_bar ()) if (notify_bar ())
notify_check_repeated (&bkp_cut_recur_apoint); notify_check_repeated (&bkp_cut_recur_apoint);
recur_apoint_free_bkp (ERASE_FORCE_KEEP_NOTE); recur_apoint_free_bkp ();
} }

View File

@ -204,12 +204,12 @@ todo_delete_note_bynum (unsigned num)
if (!todo->note) if (!todo->note)
EXIT (_("no note attached")); EXIT (_("no note attached"));
erase_note (&todo->note, ERASE_FORCE_ONLY_NOTE); erase_note (&todo->note);
} }
/* Delete an item from the todo linked list. */ /* Delete an item from the todo linked list. */
static void static void
todo_delete_bynum (unsigned num, enum eraseflg flag) todo_delete_bynum (unsigned num)
{ {
llist_item_t *i = LLIST_NTH (&todolist, 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); LLIST_REMOVE (&todolist, i);
mem_free (todo->mesg); mem_free (todo->mesg);
erase_note (&todo->note, flag); erase_note (&todo->note);
mem_free (todo); mem_free (todo);
} }
@ -288,7 +288,7 @@ todo_delete (struct conf *conf)
switch (answer) switch (answer)
{ {
case 't': case 't':
todo_delete_bynum (hilt - 1, ERASE_FORCE); todo_delete_bynum (hilt - 1);
todos--; todos--;
if (hilt > 1) if (hilt > 1)
hilt--; hilt--;
@ -358,7 +358,7 @@ todo_chg_priority (int action)
} }
if (do_chg) 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); backup = todo_add (backup_mesg, backup_id, backup_note);
hilt = todo_get_position (backup); hilt = todo_get_position (backup);
} }
@ -516,7 +516,7 @@ void
todo_free (struct todo *todo) todo_free (struct todo *todo)
{ {
mem_free (todo->mesg); mem_free (todo->mesg);
erase_note (&todo->note, ERASE_FORCE_KEEP_NOTE); erase_note (&todo->note);
mem_free (todo); mem_free (todo);
} }

View File

@ -89,13 +89,13 @@ free_user_data (void)
{ {
day_free_list (); day_free_list ();
event_llist_free (); event_llist_free ();
event_free_bkp (ERASE_FORCE); event_free_bkp ();
apoint_llist_free (); apoint_llist_free ();
apoint_free_bkp (ERASE_FORCE); apoint_free_bkp ();
recur_apoint_llist_free (); recur_apoint_llist_free ();
recur_event_llist_free (); recur_event_llist_free ();
recur_apoint_free_bkp (ERASE_FORCE); recur_apoint_free_bkp ();
recur_event_free_bkp (ERASE_FORCE); recur_event_free_bkp ();
todo_free_list (); todo_free_list ();
notify_free_app (); notify_free_app ();
} }