From 8f36e6816b5d5bd968f28e3c0acb269560d2796f Mon Sep 17 00:00:00 2001 From: louie Date: Sat, 11 Jul 2020 17:08:41 -0700 Subject: Added hiding of empty groups --- group.c | 49 +++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 49 insertions(+) (limited to 'group.c') diff --git a/group.c b/group.c index 9c1736c..36d0df3 100644 --- a/group.c +++ b/group.c @@ -20,6 +20,8 @@ typedef struct group{ GROUP *create_group(char *new_name); void group_add(char *gname, ENTRY *addme); +void group_rm(GROUP *g); +void clean_groups(); //remove empty groups from linked list GROUP **get_groups(); char *get_gname(GROUP *g); char *get_gprog(GROUP *g); @@ -110,6 +112,53 @@ void group_add(char *gname, ENTRY *addme){ return; } +void group_rm(GROUP *g){ + ENTRY **e = get_entries(g->head, g->entry_count); + int i; + + for(i = 0; i < g->entry_count; i++){ + entry_rm(e[i]); + } + + free(e); + free(g); + group_count--; + return; +} + +void clean_groups(){ + GROUP *dummy_head; + GROUP *trav; + GROUP *hold; + + if(group_count == 0){ + printf("Error: no groups!\n"); + exit(0); + } + + else{ + dummy_head = create_group("dummy"); + dummy_head->next = groups_head; + trav = dummy_head; + + while(trav != NULL){ + //found empty group for removal + if(trav->next != NULL && trav->next->entry_count < 1){ + printf("Omitting empty group \"%s\"\n", trav->next->name); + hold = trav->next; + trav->next = trav->next->next; + group_rm(hold); + } + else trav = trav->next; + } + } + + group_rm(dummy_head); + return; + +} + + GROUP **get_groups(){ GROUP **arr = malloc(sizeof(GROUP *) * group_count); GROUP *trav = groups_head; -- cgit