static krb5_error_code parse_list(struct fileptr *f, unsigned *lineno, krb5_config_binding **parent, const char **error_message) { char buf[BUFSIZ]; krb5_error_code ret; krb5_config_binding *b = NULL; unsigned beg_lineno = *lineno; while(config_fgets(buf, sizeof(buf), f) != NULL) { char *p; ++*lineno; buf[strcspn(buf, "\r\n")] = '\0'; p = buf; while(isspace((unsigned char)*p)) ++p; if (*p == '#' || *p == ';' || *p == '\0') continue; while(isspace((unsigned char)*p)) ++p; if (*p == '}') return 0; if (*p == '\0') continue; ret = parse_binding (f, lineno, p, &b, parent, error_message); if (ret) return ret; } *lineno = beg_lineno; *error_message = "unclosed {"; return KRB5_CONFIG_BADFORMAT; }
static krb5_error_code krb5_config_parse_debug (struct fileptr *f, krb5_config_section **res, unsigned *lineno, const char **error_message) { krb5_config_section *s = NULL; krb5_config_binding *b = NULL; char buf[BUFSIZ]; krb5_error_code ret; while (config_fgets(buf, sizeof(buf), f) != NULL) { char *p; ++*lineno; if(buf[strlen(buf) - 1] == '\n') buf[strlen(buf) - 1] = '\0'; p = buf; while(isspace((unsigned char)*p)) ++p; if (*p == '#' || *p == ';') continue; if (*p == '[') { ret = parse_section(p, &s, res, error_message); if (ret) return ret; b = NULL; } else if (*p == '}') { *error_message = "unmatched }"; return EINVAL; /* XXX */ } else if(*p != '\0') { if (s == NULL) { *error_message = "binding before section"; return EINVAL; } ret = parse_binding(f, lineno, p, &b, &s->u.list, error_message); if (ret) return ret; } } return 0; }