-extern void read_config_file(char * path, enum cleanup_flag cleanup,
- void (* read) (char *, uint32_t, char *,
- struct EntrySkeleton *, FILE *),
- size_t size, struct EntrySkeleton ** entry_start)
-{
- char * f_name = "init_map_object_defs()";
- char * context_prefix = "Failed reading config file: ";
- char context[strlen(context_prefix) + strlen(path) + 1];
- sprintf(context, "%s%s", context_prefix, path);
- char * err_uniq = "Declaration of ID already used.";
- FILE * file = try_fopen(path, "r", f_name);
- uint32_t linemax = textfile_width(file);
- char line[linemax + 1];
- reset_err_try_fgets_counter();
- struct EntrySkeleton ** entry_ptr_ptr = entry_start;
- while (1)
- {
- int test_for_end = try_fgetc(file, f_name);
- if (EOF == test_for_end || '\n' == test_for_end)
- {
- break;
- }
- exit_trouble(EOF == ungetc(test_for_end, file), f_name, "ungetc()");
- err_try_fgets(line, linemax, file, context, "nfi8");
- struct EntrySkeleton * entry = try_malloc(size, f_name);
- entry->id = atoi(line);
- struct EntrySkeleton * entry_test = * entry_start;
- for (; NULL != entry_test; entry_test = entry_test->next)
- {
- err_line(entry->id == entry_test->id, line, context, err_uniq);
- }
- read(line, linemax, context, entry, file);
- entry->next = NULL;
- * entry_ptr_ptr = entry;
- entry_ptr_ptr = &entry->next;
- err_try_fgets(line, linemax, file, context, "d");
- }
- try_fclose(file, f_name);
- set_cleanup_flag(cleanup);
-}
-
-
-