diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/calcurse.h | 4 | ||||
-rw-r--r-- | src/recur.c | 30 | ||||
-rw-r--r-- | src/ui-day.c | 24 |
3 files changed, 34 insertions, 24 deletions
diff --git a/src/calcurse.h b/src/calcurse.h index 768993e..a2fea09 100644 --- a/src/calcurse.h +++ b/src/calcurse.h @@ -1033,7 +1033,9 @@ void pcal_export_data(FILE *); /* recur.c */ extern llist_ts_t recur_alist_p; extern llist_t recur_elist; -int recur_update_exc(llist_t *, char *); +void recur_free_exc_list(llist_t *); +void recur_exc_dup(llist_t *, llist_t *); +int recur_str2exc(llist_t *, char *); char *recur_exc2str(llist_t *); struct recur_event *recur_event_dup(struct recur_event *); struct recur_apoint *recur_apoint_dup(struct recur_apoint *); diff --git a/src/recur.c b/src/recur.c index 3907082..168ba17 100644 --- a/src/recur.c +++ b/src/recur.c @@ -51,7 +51,7 @@ static void free_exc(struct excp *exc) mem_free(exc); } -static void free_exc_list(llist_t * exc) +void recur_free_exc_list(llist_t * exc) { LLIST_FREE_INNER(exc, free_exc); LLIST_FREE(exc); @@ -70,7 +70,7 @@ static void recur_add_exc(llist_t * exc, time_t day) LLIST_ADD_SORTED(exc, o, exc_cmp_day); } -static void exc_dup(llist_t * in, llist_t * exc) +void recur_exc_dup(llist_t * in, llist_t * exc) { llist_item_t *i; @@ -103,10 +103,10 @@ char *recur_exc2str(llist_t *exc) } /* - * Update the list of exceptions from a string of days. Any positive number of + * Update a list of exceptions from a string of days. Any positive number of * spaces are allowed before, between and after the days. */ -int recur_update_exc(llist_t *exc, char *days) +int recur_str2exc(llist_t *exc, char *days) { int updated = 0; char *d; @@ -130,11 +130,11 @@ int recur_update_exc(llist_t *exc, char *days) else break; } - free_exc_list(exc); - exc_dup(exc, &nexc); + recur_free_exc_list(exc); + recur_exc_dup(exc, &nexc); updated = 1; cleanup: - free_exc_list(&nexc); + recur_free_exc_list(&nexc); return updated; } @@ -153,7 +153,7 @@ struct recur_event *recur_event_dup(struct recur_event *in) rev->rpt->freq = in->rpt->freq; rev->rpt->until = in->rpt->until; - exc_dup(&rev->exc, &in->exc); + recur_exc_dup(&rev->exc, &in->exc); if (in->note) rev->note = mem_strdup(in->note); @@ -180,7 +180,7 @@ struct recur_apoint *recur_apoint_dup(struct recur_apoint *in) rapt->rpt->freq = in->rpt->freq; rapt->rpt->until = in->rpt->until; - exc_dup(&rapt->exc, &in->exc); + recur_exc_dup(&rapt->exc, &in->exc); if (in->note) rapt->note = mem_strdup(in->note); @@ -207,7 +207,7 @@ void recur_apoint_free(struct recur_apoint *rapt) mem_free(rapt->note); if (rapt->rpt) mem_free(rapt->rpt); - free_exc_list(&rapt->exc); + recur_free_exc_list(&rapt->exc); mem_free(rapt); } @@ -218,7 +218,7 @@ void recur_event_free(struct recur_event *rev) mem_free(rev->note); if (rev->rpt) mem_free(rev->rpt); - free_exc_list(&rev->exc); + recur_free_exc_list(&rev->exc); mem_free(rev); } @@ -277,8 +277,8 @@ struct recur_apoint *recur_apoint_new(char *mesg, char *note, time_t start, * Note. The exception dates are in the list rapt->exc. * The (empty) list rapt->rpt->exc is not used. */ - exc_dup(&rapt->exc, &rpt->exc); - free_exc_list(&rpt->exc); + recur_exc_dup(&rapt->exc, &rpt->exc); + recur_free_exc_list(&rpt->exc); LLIST_INIT(&rapt->rpt->exc); LLIST_TS_LOCK(&recur_alist_p); @@ -301,8 +301,8 @@ struct recur_event *recur_event_new(char *mesg, char *note, time_t day, rev->rpt = mem_malloc(sizeof(struct rpt)); *rev->rpt = *rpt; /* Similarly as for recurrent appointment. */ - exc_dup(&rev->exc, &rpt->exc); - free_exc_list(&rpt->exc); + recur_exc_dup(&rev->exc, &rpt->exc); + recur_free_exc_list(&rpt->exc); LLIST_INIT(&rev->rpt->exc); LLIST_ADD_SORTED(&recur_elist, rev, recur_event_cmp); diff --git a/src/ui-day.c b/src/ui-day.c index cb038d1..f2bcba5 100644 --- a/src/ui-day.c +++ b/src/ui-day.c @@ -273,8 +273,8 @@ static void update_desc(char **desc) updatestring(win[STA].p, desc, 0, 1); } -/* Edit the list of exception days for a recurrent item. */ -static int update_exc(llist_t *exc) +/* Edit a list of exception days for a recurrent item. */ +static int edit_exc(llist_t *exc) { int updated = 0; @@ -288,7 +288,7 @@ static int update_exc(llist_t *exc) while (1) { ret = updatestring(win[STA].p, &days, 0, 1); if (ret == GETSTRING_VALID || ret == GETSTRING_RET) { - if (recur_update_exc(exc, days)) { + if (recur_str2exc(exc, days)) { updated = 1; break; } else { @@ -313,7 +313,7 @@ static void update_rept(struct rpt **rpt, const time_t start, llist_t *exc) char *timstr = NULL; char *outstr = NULL; - /* Update repetition type. */ + /* Edit repetition type. */ int newtype; const char *msg_rpt_prefix = _("Enter the new repetition type:"); const char *msg_rpt_daily = _("(d)aily"); @@ -362,7 +362,7 @@ static void update_rept(struct rpt **rpt, const time_t start, llist_t *exc) goto cleanup; } - /* Update frequency. */ + /* Edit frequency. */ int newfreq; const char *msg_wrong_freq = _("Invalid frequency."); const char *msg_enter = _("Press [Enter] to continue"); @@ -382,7 +382,7 @@ static void update_rept(struct rpt **rpt, const time_t start, llist_t *exc) } while (newfreq == 0); - /* Update end date. */ + /* Edit end date. */ time_t newuntil; const char *msg_until_1 = _("Enter end date or duration ('?' for input formats):"); @@ -449,13 +449,21 @@ static void update_rept(struct rpt **rpt, const time_t start, llist_t *exc) keys_wgetch(win[KEY].p); } - /* Update exception list. */ - if (!update_exc(exc)) + /* Edit exception list. */ + llist_t newexc; + recur_exc_dup(&newexc, exc); + if (!edit_exc(&newexc)) { + recur_free_exc_list(&newexc); goto cleanup; + } + /* Update all recurrence parameters. */ (*rpt)->type = recur_char2def(newtype); (*rpt)->freq = newfreq; (*rpt)->until = newuntil; + recur_free_exc_list(exc); + recur_exc_dup(exc, &newexc); + recur_free_exc_list(&newexc); cleanup: mem_free(msg_rpt_current); |