]> Pileus Git - lackey/commitdiff
Free unused cal memory memory
authorAndy Spencer <andy753421@gmail.com>
Mon, 10 Jun 2013 03:50:39 +0000 (03:50 +0000)
committerAndy Spencer <andy753421@gmail.com>
Mon, 10 Jun 2013 04:56:46 +0000 (04:56 +0000)
This makes all the string in events and todos dynamically allocated.
The memory for the event and any underlying data is now owned by cal.c,
and will be freed when no longer needed.

Maybe someday we'll go back to making these constants, since that would
require less duplicated strings, but for now it's easiest to just make
everything freeable

cals/dummy.c
src/cal.c
src/cal.h

index 8b0279c8758164ba60d2b77a83294b061b3c5cbe..1926bdbff99f299fdf2fc4e69bd9ef86d7b37628 100644 (file)
@@ -45,32 +45,43 @@ static todo_t todo = {
 };
 
 static int     enable;
-static event_t events[8];
-static todo_t  todos[6];
 
 /* Event functions */
 event_t *dummy_events(date_t start, date_t end)
 {
-       for (int i = 0; i < N_ELEMENTS(events); i++) {
-               date_t *s = &events[i].start;
-               date_t *e = &events[i].end;
-               events[i] = event;
+       event_t *last = &event;
+       for (int i = 0; i < 8; i++) {
+               last->next        = new0(event_t);
+               last->next->cal   = event.cal;
+               last->next->start = event.start;
+               last->next->end   = event.end;
+               last->next->name  = strcopy(event.name);
+               last->next->desc  = strcopy(event.desc);
+
+               date_t *s = &last->next->start;
+               date_t *e = &last->next->end;
                add_days(&s->year, &s->month, &s->day, 7*i);
                add_days(&e->year, &e->month, &e->day, 7*i);
-               if (i+1 < N_ELEMENTS(events))
-                       events[i].next = &events[i+1];
+
+               last = last->next;
+               last->next = NULL;
        }
-       return enable ? &events[0] : 0;
+       return enable ? event.next : 0;
 }
 
 /* Todo functions */
 todo_t *dummy_todos(date_t start, date_t end)
 {
-       for (int i = 0; i < N_ELEMENTS(todos); i++) {
-               todos[i] = todo;
-               todos[i].status = i*20;
-               if (i+1 < N_ELEMENTS(todos))
-                       todos[i].next = &todos[i+1];
+       todo_t *last = &todo;
+       for (int i = 0; i < 6; i++) {
+               last->next = new0(event_t);
+               last->next->cal    = todo.cal;
+               last->next->name   = strcopy(todo.name);
+               last->next->desc   = strcopy(todo.desc);
+               last->next->due    = todo.due;
+               last->next->status = todo.status;
+               last = last->next;
+               last->next = NULL;
        }
-       return enable ? &todos[0] : 0;
+       return enable ? todo.next : 0;
 }
index 2fda7a1fb895603cb04790dbf14d7e45cfb11702..435bd336f81c6ecf3caa6404ff51e437b80e5b29 100644 (file)
--- a/src/cal.c
+++ b/src/cal.c
@@ -116,7 +116,21 @@ void cal_load(year_t year, month_t month, day_t day, int days)
                return;
 
        /* Free uneeded data */
-       // TODO
+       for (event_t *next, *cur = EVENTS; cur; cur = next) {
+               next = cur->next;
+               if (cur->name) free(cur->name);
+               if (cur->desc) free(cur->desc);
+               if (cur->loc)  free(cur->loc);
+               if (cur->cat)  free(cur->cat);
+               free(cur);
+       }
+       for (todo_t *next, *cur = TODOS; cur; cur = next) {
+               next = cur->next;
+               if (cur->name) free(cur->name);
+               if (cur->desc) free(cur->desc);
+               if (cur->cat)  free(cur->cat);
+               free(cur);
+       }
 
        /* Push dates out a bit to avoid reloading,
         * enough to at least cover the current year */
index 2fb05cb692bb1782ae8aa287ffc151d5a415488a..ae41f3b1fc070371f0df3bfae34f334775730a65 100644 (file)
--- a/src/cal.h
+++ b/src/cal.h
@@ -30,10 +30,10 @@ typedef struct {
 
 /* Calendar item types */
 typedef struct event_t {
-       const char     *name;
-       const char     *desc;
-       const char     *loc;
-       const char     *cat;
+       char           *name;
+       char           *desc;
+       char           *loc;
+       char           *cat;
        date_t          start;
        date_t          end;
        const cal_t    *cal;
@@ -41,9 +41,9 @@ typedef struct event_t {
 } event_t;
 
 typedef struct todo_t {
-       const char    *name;
-       const char    *desc;
-       const char    *cat;
+       char          *name;
+       char          *desc;
+       char          *cat;
        status_t       status;
        date_t         start;
        date_t         due;