From ae24e6ccc3bfde27d71d779892a81c5828434261 Mon Sep 17 00:00:00 2001
From: Frederic Culot <calcurse@culot.org>
Date: Thu, 14 Dec 2006 08:26:24 +0000
Subject: improvements in the memory deallocation in day_edit_item()

---
 src/day.c | 44 +++++++++++++++++++++++++++-----------------
 1 file changed, 27 insertions(+), 17 deletions(-)

(limited to 'src')

diff --git a/src/day.c b/src/day.c
index da6b2f4..84cd6ae 100755
--- a/src/day.c
+++ b/src/day.c
@@ -1,4 +1,4 @@
-/*	$calcurse: day.c,v 1.12 2006/12/08 08:40:19 culot Exp $	*/
+/*	$calcurse: day.c,v 1.13 2006/12/14 08:26:24 culot Exp $	*/
 
 /*
  * Calcurse - text-based organizer
@@ -406,7 +406,7 @@ void day_edit_item(int year, int month, int day, int item_num, int colr)
 	recur_apoint_llist_node_t *ra, *ra_new;
 	long newtime = 0;
 	const long date = date2sec(year, month, day, 0, 0);
-	int i, ch = 0, valid_date = 0, newfreq = 0, date_entered = 0;
+	int cancel, i, ch = 0, valid_date = 0, newfreq = 0, date_entered = 0;
 	int newmonth, newday, newyear;
 	int nb_item[MAX_TYPES];
 	unsigned hr, mn;
@@ -446,7 +446,6 @@ void day_edit_item(int year, int month, int day, int item_num, int colr)
 
 	switch (p->type) {
 	case RECUR_EVNT:
-		rpt = (struct rpt_s *) malloc(sizeof(struct rpt_s));
 		re = recur_get_event(date, nb_item[RECUR_EVNT - 1]);
 		rpt = re->rpt;
 		status_mesg(msg_event_recur, choice_event_recur);
@@ -458,7 +457,6 @@ void day_edit_item(int year, int month, int day, int item_num, int colr)
 		ch = DESC;
 		break;
 	case RECUR_APPT:
-		rpt = (struct rpt_s *) malloc(sizeof(struct rpt_s));
 		ra = recur_get_apoint(date, nb_item[RECUR_APPT - 1]);
 		rpt = ra->rpt;
 		status_mesg(msg_recur, choice_recur);
@@ -477,6 +475,7 @@ void day_edit_item(int year, int month, int day, int item_num, int colr)
 		while (!valid_date) {
 			timestr = day_edit_time(p->start, colr);
 			sscanf(timestr, "%u:%u", &hr, &mn);
+			free(timestr);
 			newtime = update_time_in_date(p->start, hr, mn);
 			if (newtime < p->start + p->appt_dur) {
 				p->start = newtime;
@@ -492,6 +491,7 @@ void day_edit_item(int year, int month, int day, int item_num, int colr)
 			timestr = day_edit_time(
 				p->start + p->appt_dur, colr);
 			sscanf(timestr, "%u:%u", &hr, &mn);
+			free(timestr);
 			newtime = update_time_in_date(
 				p->start + p->appt_dur, hr, mn);
 			if (newtime > p->start) {
@@ -509,33 +509,40 @@ void day_edit_item(int year, int month, int day, int item_num, int colr)
 		break;
 	case REPT:
 		while ( (ch != 'D') && (ch != 'W') && (ch != 'M') 
-		    && (ch != 'Y') && (ch != ESCAPE) ) {
+		    && (ch != 'Y') ) {
 			status_mesg(mesg_type_1, mesg_type_2);
 			typestr = (char *) malloc(sizeof(char)); 
 			*typestr = recur_def2char(rpt->type);
-			updatestring(swin, colr, &typestr, 0, 1);
+			cancel = updatestring(swin, colr, &typestr, 0, 1);
 			ch = toupper(*typestr);
+			free(typestr);
+			if (cancel)
+				return;
 		}
-		if (ch == ESCAPE)
-			return;
-		else
-			rpt->type = recur_char2def(ch);
 		while (newfreq == 0) {
 			status_mesg(mesg_freq_1, "");
 			freqstr = (char *) malloc(MAX_LENGTH); 
 			sprintf(freqstr, "%d", rpt->freq);
-			updatestring(swin, colr, &freqstr, 0, 1);
+			cancel = updatestring(swin, colr, &freqstr, 0, 1);
 			newfreq = atoi(freqstr);
-			if (newfreq == 0) {
-				status_mesg(mesg_wrong_freq, enter_str);
-				wgetch(swin);
-			} else
-				rpt->freq = newfreq;
+			free(freqstr);
+			if (cancel)	
+				return;
+			else {
+				if (newfreq == 0) {
+					status_mesg(mesg_wrong_freq, enter_str);
+					wgetch(swin);
+				}
+			}
 		}
 		while (!date_entered) {
 			status_mesg(mesg_until_1, "");
 			timestr = date_sec2date_str(rpt->until);
-			updatestring(swin, colr, &timestr, 0, 1);
+			cancel = updatestring(swin, colr, &timestr, 0, 1);
+			if (cancel) {
+				free(timestr);
+				return;
+			}
 			if (strlen(timestr) == 1 && 
 			    strncmp(timestr, "0", 1) == 0 )  {
 				rpt->until = 0;
@@ -564,6 +571,9 @@ void day_edit_item(int year, int month, int day, int item_num, int colr)
 				}
 			}
 		}
+		free(timestr);
+		rpt->freq = newfreq;
+		rpt->type = recur_char2def(ch);
 		break;
 	}
 	day_erase_item(date, item_num, 1);
-- 
cgit v1.2.3-70-g09d2