Cleanup (memory + dead code)

This commit is contained in:
2020-06-12 18:14:22 -07:00
parent 81fd753efd
commit cddaf13050
5 changed files with 87 additions and 59 deletions

View File

@@ -3,12 +3,13 @@ LDLIBS=-lncurses -lcurl
.phony: clean
hdrs := $(wildcard **/*.h)
srcs := $(wildcard **/*.c)
objects := $(patsubst %.c,%.o,$(srcs))
ncac: $(objects)
tags: $(srcs)
tags: $(srcs) $(hdrs)
ctags -w -t $^
clean:

View File

@@ -225,3 +225,80 @@ asana_err user_task_list(char *task_list_gid, Project *task_list) {
return ret;
}
void asana_free_resource_array(Resource *resource, size_t len) {
if (resource == NULL)
return;
if (len > 0) {
size_t size = asana_resource_size(resource);
for (size_t i = 0; i < len; i++) {
Resource *item = (Resource *)(((char *)resource) + i * size);
asana_free_resource(item);
}
}
free(resource);
}
void asana_free_resource(Resource *resource) {
if (resource == NULL)
return;
User *user;
Task *task;
Project *project;
switch (resource->type) {
case WORKSPACE:
if (resource->gid != NULL)
free(resource->gid);
if (resource->name != NULL)
free(resource->name);
return;
case USER:
user = (User *)resource;
if (user->gid != NULL)
free(user->gid);
if (user->name != NULL)
free(user->name);
asana_free_resource_array((Resource *)user->workspaces,
user->workspaces_len);
return;
case TASK:
task = (Task *)resource;
if (task->gid != NULL)
free(task->gid);
if (task->name != NULL)
free(task->name);
if (task->notes != NULL)
free(task->notes);
return;
case PROJECT:
project = (Project *)resource;
if (project->gid != NULL)
free(project->gid);
if (project->name != NULL)
free(project->name);
asana_free_resource_array((Resource *)project->tasks, project->tasks_len);
return;
}
fprintf(stderr, "asana_free_resource: Unknown resource type %d\n",
resource->type);
}
size_t asana_resource_size(Resource *resource) {
switch (resource->type) {
case WORKSPACE:
return sizeof(Workspace);
case USER:
return sizeof(User);
case TASK:
return sizeof(Task);
case PROJECT:
return sizeof(Project);
}
fprintf(stderr, "asana_resource_size: Unknown resource type %d\n",
resource->type);
}

View File

@@ -72,4 +72,8 @@ asana_err user_info(User *user);
asana_err user_task_list_gid(char *workspace_gid, char *gid);
asana_err user_task_list(char *task_list_gid, Project *task_list);
void asana_free_resource_array(Resource *resource, size_t len);
void asana_free_resource(Resource *resource);
size_t asana_resource_size(Resource *resource);
#endif // ASANA_ASANA_H_

58
ncac.c
View File

@@ -119,61 +119,5 @@ static void setup() {
signal(SIGINT, &finish);
signal(SIGKILL, &finish);
signal(SIGTERM, &finish);
}
void get_me(int *curs_x, int *curs_y) {
User me;
user_info(&me);
if (me.workspaces == NULL || me.workspaces_len == 0) {
fprintf(stderr, "Unable to get workspaces.\n");
return;
}
char gid[64];
gid[0] = '\0';
user_task_list_gid(me.workspaces[0].gid, gid);
fprintf(stderr, "Got a task list? %s\n", gid);
*curs_x = 0;
(*curs_y)++;
// draw_text(gid, curs_x, curs_y);
}
void get_my_tasks(int *curs_x, int *curs_y) {
User me;
user_info(&me);
if (me.workspaces == NULL || me.workspaces_len == 0) {
fprintf(stderr, "Unable to get workspaces.\n");
return;
}
char gid[64];
gid[0] = '\0';
if (user_task_list_gid(me.workspaces[me.workspaces_len-1].gid, gid) != ASANA_ERR_OK) {
fprintf(stderr, "Unable to get task list ID. %s\n", gid);
return;
}
Project my_tasks;
if (user_task_list(gid, &my_tasks) != ASANA_ERR_OK) {
fprintf(stderr, "Unable to get task list.\n");
return;
}
*curs_x = 0;
*curs_y = 0;
// draw_text("My Tasks", curs_x, curs_y);
*curs_x = 0;
(*curs_y)+=2;
for (size_t i=0; i<my_tasks.tasks_len;i++) {
// draw_text(my_tasks.tasks[i].name, curs_x, curs_y);
*curs_x = 0;
(*curs_y)++;
}
signal(SIGSEGV, &finish);
}

View File

@@ -69,7 +69,7 @@ bool ui_mytasks(ui_state *state) {
clrtobot();
refresh();
Project my_tasks;
Project my_tasks = {PROJECT, NULL, NULL, 0, NULL};
if (user_task_list(gid, &my_tasks) != ASANA_ERR_OK) {
fprintf(stderr, "Unable to get task list.\n");
return true;
@@ -87,6 +87,8 @@ bool ui_mytasks(ui_state *state) {
clrtoeol();
}
asana_free_resource((Resource *)&my_tasks);
clrtobot();
return false;