size_t match_len;
ssize_t slen;
char const *p;
+ fr_sbuff_t sbuff;
/*
* Parse data types
*/
if (*p == '"'){
p++;
+ sbuff = FR_SBUFF_IN(p, strlen(p));
slen = fr_value_box_from_substr(box, box, FR_TYPE_STRING, NULL,
- &FR_SBUFF_IN(p, strlen(p)),
+ &sbuff,
&value_parse_rules_double_quoted,
false);
if (slen < 0) {
RETURN_OK_WITH_ERROR();
}
- p += slen;
+ p += fr_sbuff_used(&sbuff);
if (*p != '"') {
RETURN_PARSE_ERROR(0);
}
}
} else {
+ sbuff = FR_SBUFF_IN(p, strlen(p));
+
slen = fr_value_box_from_substr(box, box, type, NULL,
- &FR_SBUFF_IN(p, strlen(p)),
+ &sbuff,
&value_parse_rules_bareword_unquoted,
false);
if (slen < 0) {
RETURN_OK_WITH_ERROR();
}
- p += slen;
+ p += fr_sbuff_used(&sbuff);
}
fr_skip_whitespace(p);
p += match_len;
} else {
op = token2op[(uint8_t) p[0]];
- if (op == T_INVALID) RETURN_PARSE_ERROR(0);
+ if (op == T_INVALID) {
+ fr_strerror_printf("Unknown operator '%c'", p[0]);
+ RETURN_PARSE_ERROR(0);
+ }
p++;
}
fr_skip_whitespace(p);