Browse Source

admin list parsing base

pull/3/head
fall-leaf 10 months ago
parent
commit
0eaa8afa93
1 changed files with 56 additions and 1 deletions
  1. +56
    -1
      src/parse.c

+ 56
- 1
src/parse.c View File

@@ -27,6 +27,7 @@
#define PARAMS_COUNT 5

creds_t creds = {0};
char ** admins = NULL;

enum cred_param_ids_e
{
@@ -177,7 +178,6 @@ fail:
return 1;
}


void
clean_creds(void)
{
@@ -189,3 +189,58 @@ clean_creds(void)
FULL_FREE(creds.server);
#undef FULL_FREE
}

DECL int
parse_admin_list(char const * admin_list_path)
{
#define ADMIN_LIST_INIT_SIZE 8
/* prealloc with 8 */
size_t current_array_size = ADMIN_LIST_INIT_SIZE;

FILE * stream;
size_t lines_read = 0;
char * line = NULL;
size_t nread = 0;

admins = calloc(ADMIN_LIST_INIT_SIZE, sizeof(char *));

stream = fopen(admin_list_path, "r");
if (stream == NULL)
{
PERROR(1);
}

while (getline(&line, &nread, stream) > 0)
{
if (++lines_read > current_array_size)
{
/* double the space*/
current_array_size *= 2;
realloc(admins, current_array_size);
}

admins[lines_read - 1] = line;
}

/* set up array end marker for proper clean-up later */
if (lines_read + 1 > current_array_size)
{
realloc(admins, current_array_size + 1);
}
admins[lines_read] = NULL;

return 0;
}

DECL void
clean_admin_list()
{
if (admins == NULL)
{ return; }

for (size_t i = 0; admins[i]; ++i)
{ free(admins[i]); }

free(admins);
admins = NULL;
}