73 lines
1.5 KiB
C
73 lines
1.5 KiB
C
#include <stdio.h>
|
|
|
|
#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. */
|
|
}
|
|
}
|
|
|