Lines Matching +full:p +full:- +full:state
1 /* -*- mode: c; c-basic-offset: 4; indent-tabs-mode: nil -*- */
23 int state; member
25 int discard; /* group_level of a final-flagged section */
30 static errcode_t parse_file(FILE *f, struct parse_state *state,
42 char *p = line + strlen(line); in strip_line() local
43 while (p > line && (p[-1] == '\n' || p[-1] == '\r')) in strip_line()
44 *--p = 0; in strip_line()
75 static errcode_t parse_std_line(char *line, struct parse_state *state) in parse_std_line() argument
78 char *p; in parse_std_line() local
93 if (state->group_level > 1) in parse_std_line()
96 p = strchr(cp, ']'); in parse_std_line()
97 if (p == NULL) in parse_std_line()
99 *p = '\0'; in parse_std_line()
100 retval = profile_add_node(state->root_section, cp, NULL, 0, in parse_std_line()
101 &state->current_section); in parse_std_line()
104 state->group_level = 1; in parse_std_line()
106 * discard values until the next top-level section. */ in parse_std_line()
107 state->discard = profile_is_node_final(state->current_section) ? in parse_std_line()
113 cp = p+1; in parse_std_line()
115 profile_make_node_final(state->current_section); in parse_std_line()
127 if (state->group_level < 2) in parse_std_line()
130 profile_make_node_final(state->current_section); in parse_std_line()
131 state->group_level--; in parse_std_line()
133 if (state->group_level < state->discard) in parse_std_line()
134 state->discard = 0; in parse_std_line()
137 if (!state->discard) { in parse_std_line()
138 retval = profile_get_node_parent(state->current_section, in parse_std_line()
139 &state->current_section); in parse_std_line()
155 p = tag; in parse_std_line()
156 /* Look for whitespace on left-hand side. */ in parse_std_line()
157 while (p < cp && !isspace((int)*p)) in parse_std_line()
158 p++; in parse_std_line()
159 if (p < cp) { in parse_std_line()
161 *p++ = 0; in parse_std_line()
162 /* If we have more non-whitespace, it's an error. */ in parse_std_line()
163 while (p < cp) { in parse_std_line()
164 if (!isspace((int)*p)) in parse_std_line()
166 p++; in parse_std_line()
176 state->state = STATE_GET_OBRACE; in parse_std_line()
180 cp = value + strlen(value) - 1; in parse_std_line()
182 *cp-- = 0; in parse_std_line()
185 p = strchr(tag, '*'); in parse_std_line()
186 if (p) in parse_std_line()
187 *p = '\0'; in parse_std_line()
188 state->group_level++; in parse_std_line()
189 if (!state->discard) { in parse_std_line()
190 retval = profile_add_node(state->current_section, tag, NULL, 0, in parse_std_line()
191 &state->current_section); in parse_std_line()
196 if (profile_is_node_final(state->current_section)) in parse_std_line()
197 state->discard = state->group_level; in parse_std_line()
198 if (p) in parse_std_line()
199 profile_make_node_final(state->current_section); in parse_std_line()
203 p = strchr(tag, '*'); in parse_std_line()
204 if (p) in parse_std_line()
205 *p = '\0'; in parse_std_line()
206 if (!state->discard) { in parse_std_line()
207 profile_add_node(state->current_section, tag, value, 1, &node); in parse_std_line()
208 if (p && node) in parse_std_line()
220 struct parse_state state; in parse_include_file() local
222 /* Create a new state so that fragments are syntactically independent but in parse_include_file()
224 state.state = STATE_INIT_COMMENT; in parse_include_file()
225 state.group_level = state.discard = 0; in parse_include_file()
226 state.root_section = root_section; in parse_include_file()
227 state.current_section = NULL; in parse_include_file()
232 retval = parse_file(fp, &state, NULL); in parse_include_file()
237 /* Return non-zero if filename contains only alphanumeric characters, dashes,
241 const char *p; in valid_name() local
248 if (len >= 5 && !strcmp(filename + len - 5, ".conf")) in valid_name()
251 for (p = filename; *p != '\0'; p++) { in valid_name()
252 if (!isalnum((unsigned char)*p) && *p != '-' && *p != '_') in valid_name()
290 static errcode_t parse_line(char *line, struct parse_state *state, in parse_line() argument
299 return parse_include_file(cp, state->root_section); in parse_line()
304 return parse_include_dir(cp, state->root_section); in parse_line()
307 switch (state->state) { in parse_line()
328 state->state = STATE_STD_LINE; in parse_line()
330 return parse_std_line(line, state); in parse_line()
335 state->state = STATE_STD_LINE; in parse_line()
340 static errcode_t parse_file(FILE *f, struct parse_state *state, in parse_file() argument
355 retval = parse_line(bptr, state, ret_modspec); in parse_file()
362 char *p, *end; in parse_file() local
364 if (strlen(bptr) >= BUF_SIZE - 1) { in parse_file()
366 gotten chopped off on a non-newline in parse_file()
371 for (offset = 0; offset > -BUF_SIZE; offset--) { in parse_file()
377 c--; in parse_file()
382 for (p = bptr; *p != '\0'; p++) { in parse_file()
383 if (*p == '\r') in parse_file()
384 *p = '\n'; in parse_file()
387 p = bptr; in parse_file()
389 while (p < end) { in parse_file()
393 newline = strchr (p, '\n'); in parse_file()
397 /* parse_line modifies contents of p */ in parse_file()
398 newp = p + strlen (p) + 1; in parse_file()
399 retval = parse_line (p, state, ret_modspec); in parse_file()
405 p = newp; in parse_file()
418 struct parse_state state; in profile_parse_file() local
423 /* Initialize parsing state with a new root node. */ in profile_parse_file()
424 state.state = STATE_INIT_COMMENT; in profile_parse_file()
425 state.group_level = state.discard = 0; in profile_parse_file()
426 state.current_section = NULL; in profile_parse_file()
427 retval = profile_create_node("(root)", 0, &state.root_section); in profile_parse_file()
431 retval = parse_file(f, &state, ret_modspec); in profile_parse_file()
433 profile_free_node(state.root_section); in profile_parse_file()
436 *root = state.root_section; in profile_parse_file()
468 if (isspace((int) (*str)) ||isspace((int) (*(str + strlen(str) - 1)))) in need_double_quotes()
532 struct profile_node *p; in dump_profile() local
558 &name, &p); in dump_profile()
565 cb(profile_is_node_final(p) ? "*" : "", data); in dump_profile()
567 dump_profile(p, level+1, cb, data); in dump_profile()
575 dump_profile(p, level+1, cb, data); in dump_profile()
579 cb(profile_is_node_final(p) ? "*" : "", data); in dump_profile()
604 if (b->err) in add_data_to_buffer()
606 if (b->max - b->cur < len) { in add_data_to_buffer()
610 newsize = b->max + (b->max >> 1) + len + 1024; in add_data_to_buffer()
611 newptr = realloc(b->base, newsize); in add_data_to_buffer()
613 b->err = 1; in add_data_to_buffer()
616 b->base = newptr; in add_data_to_buffer()
617 b->max = newsize; in add_data_to_buffer()
619 memcpy(b->base + b->cur, d, len); in add_data_to_buffer()
620 b->cur += len; /* ignore overflow */ in add_data_to_buffer()
639 if (prof_buf.max - prof_buf.cur > (prof_buf.max >> 3)) { in profile_write_tree_to_buffer()