/*
- * a generic (simple) parser. Use to parse rr's, private key
+ * a generic (simple) parser. Use to parse rr's, private key
* information and /etc/resolv.conf files
*
* a Net::DNS like library for C
#include <strings.h>
ldns_lookup_table ldns_directive_types[] = {
- { LDNS_DIR_TTL, "$TTL" },
- { LDNS_DIR_ORIGIN, "$ORIGIN" },
- { LDNS_DIR_INCLUDE, "$INCLUDE" },
+ { LDNS_DIR_TTL, "$TTL" },
+ { LDNS_DIR_ORIGIN, "$ORIGIN" },
+ { LDNS_DIR_INCLUDE, "$INCLUDE" },
{ 0, NULL }
};
/* add max_limit here? */
ssize_t
ldns_fget_token(FILE *f, char *token, const char *delim, size_t limit)
-{
+{
return ldns_fget_token_l(f, token, delim, limit, NULL);
}
ssize_t
ldns_fget_token_l(FILE *f, char *token, const char *delim, size_t limit, int *line_nr)
-{
+{
int c, prev_c;
int p; /* 0 -> no parenthese seen, >0 nr of ( seen */
int com, quoted;
continue;
}
-
+
if (c == '\n' && p != 0 && t > token) {
/* in parentheses */
if (line_nr) {
ldns_fget_keyword_data(FILE *f, const char *keyword, const char *k_del, char *data,
const char *d_del, size_t data_limit)
{
- return ldns_fget_keyword_data_l(f, keyword, k_del, data, d_del,
+ return ldns_fget_keyword_data_l(f, keyword, k_del, data, d_del,
data_limit, NULL);
}
ssize_t
ldns_bget_token(ldns_buffer *b, char *token, const char *delim, size_t limit)
-{
+{
int c, lc;
int p; /* 0 -> no parenthese seen, >0 nr of ( seen */
int com, quoted;
goto tokenread;
}
}
-
+
*t++ = c;
i++;
- if (limit > 0 && i >= limit - 1) {
+ if (limit > 0 && i >= limit) {
*t = '\0';
return -1;
}
tokenread:
ldns_bskipcs(b, delim);
*t = '\0';
-
+
if (p != 0) {
- return -1;
+ return -1;
}
return (ssize_t)i;
}
ldns_bskipc(ldns_buffer *buffer, char c)
{
while (c == (char) ldns_buffer_read_u8_at(buffer, ldns_buffer_position(buffer))) {
- if (ldns_buffer_available_at(buffer,
+ if (ldns_buffer_available_at(buffer,
buffer->_position + sizeof(char), sizeof(char))) {
buffer->_position += sizeof(char);
} else {
/* search list domain dname */
gtr = ldns_fget_token_l(fp, word, LDNS_PARSE_SKIP_SPACE, 0, line_nr);
b = LDNS_MALLOC(ldns_buffer);
- ldns_buffer_new_frm_data(b, word, (size_t) gtr);
- gtr = ldns_bget_token(b, word, LDNS_PARSE_NORMAL, (size_t) gtr);
+ ldns_buffer_new_frm_data(b, word, (size_t) gtr);
+ gtr = ldns_bget_token(b, word, LDNS_PARSE_NORMAL, (size_t) gtr + 1);
while (gtr > 0) {
tmp = ldns_rdf_new_frm_str(LDNS_RDF_TYPE_DNAME, word);
if (!tmp) {
ldns_resolver_push_searchlist(r, tmp);
ldns_rdf_deep_free(tmp);
- gtr = ldns_bget_token(b, word, LDNS_PARSE_NORMAL, (size_t) gtr);
+ gtr = ldns_bget_token(b, word, LDNS_PARSE_NORMAL, (size_t) gtr + 1);
}
ldns_buffer_free(b);
gtr = 1;