#include #include "list_file.h" #define BUF_SIZE 1024 List_Entry * list_file_load(const char *filename) { List_Entry *ret = NULL; char buf[BUF_SIZE] = ""; FILE *file; file = fopen(filename, "r"); if (!file) { perror("Failed opening list file"); return NULL; } while (fgets(buf, BUF_SIZE, file)) { /* Skip comment/empty lines. */ if ((*buf == '#') || (*buf == '\n') || (!*buf)) continue; char *tmp; List_Entry *cur = calloc(1, sizeof(*cur)); cur->name = strdup(buf); /* Set the command to the second half and put a \0 in between. */ tmp = strchr(cur->name, ' '); if (tmp) { *tmp = '\0'; cur->command = tmp + 1; } else { /* FIXME: error. */ cur->command = ""; } /* Replace the newline char with a \0. */ tmp = strchr(cur->command, '\n'); if (tmp) { *tmp = '\0'; } ret = EINA_INLIST_CONTAINER_GET( eina_inlist_append(EINA_INLIST_GET(ret), EINA_INLIST_GET(cur)), List_Entry); } return ret; } void list_file_free(List_Entry *list) { while (list) { List_Entry *ent = list; list = EINA_INLIST_CONTAINER_GET(EINA_INLIST_GET(list)->next, List_Entry); free(ent->name); free(ent); /* we don't free ent->command because it's allocated together. */ } }