71acf_file_read(
const char *filename)
74 FILE *fp = fopen(filename,
"rb");
77 bool_t parsing_props = B_FALSE;
80 logMsg(
"Error reading acf file %s: %s", filename,
88 for (
int line_num = 1; getline(&line, &cap, fp) > 0; line_num++) {
96 char **comps =
strsplit(line,
" ", B_TRUE, &n_comps);
98 if (n_comps >= 2 && strcmp(comps[1],
"Version") == 0) {
99 acf->version = atoi(comps[0]);
100 }
else if (line_num == 3 &&
101 strcmp(comps[0],
"ACF") != 0) {
102 logMsg(
"Error reading acf file %s: missing "
103 "file header. Are you sure this is an "
104 "ACF file?", filename);
111 if (!parsing_props) {
112 if (strncmp(line,
"PROPERTIES_BEGIN", 16) == 0)
113 parsing_props = B_TRUE;
116 if (strncmp(line,
"PROPERTIES_END", 14) == 0)
118 if (strncmp(line,
"P ", 2) != 0)
121 name_end = strchr(&line[2],
' ');
122 if (name_end == NULL) {
123 logMsg(
"Error reading acf file %s:%d: bad parameter "
124 "line.", filename, line_num);
133 if (
avl_find(&acf->props, prop, &where) != NULL) {
134 logMsg(
"Error reading acf file %s:%d duplicate "
135 "property \"%s\" found.", filename, line_num,
void avl_create(avl_tree_t *tree, int(*compar)(const void *, const void *), size_t size, size_t offset)