From 3997b79936ef33d735110135aabb9ae933bf5faf Mon Sep 17 00:00:00 2001 From: Wouter Wijngaards Date: Thu, 6 Feb 2014 11:19:28 +0000 Subject: [PATCH] prettier parse code. git-svn-id: file:///svn/unbound/trunk@3073 be551aaa-1e26-0410-a405-d3ace91eadb9 --- ldns/str2wire.c | 57 +++++++++++++++++++++++++++---------------------- 1 file changed, 31 insertions(+), 26 deletions(-) diff --git a/ldns/str2wire.c b/ldns/str2wire.c index e1eb84fba..9dd25b34f 100644 --- a/ldns/str2wire.c +++ b/ldns/str2wire.c @@ -585,6 +585,29 @@ sldns_parse_rdf_token(sldns_buffer* strbuf, char* token, size_t token_len, return 1; } +/** Add space and one more rdf token onto the existing token string. */ +static int +sldns_affix_token(sldns_buffer* strbuf, char* token, size_t* token_len, + int* quoted, int* parens, int* tokquote, size_t* pre_data_pos, + const char* delimiters, sldns_rdf_type rdftype, size_t* token_strlen) +{ + size_t addlen = *token_len - *token_strlen; + size_t addstrlen = 0; + + /* add space */ + if(addlen < 1) return 0; + token[*token_strlen] = ' '; + token[++(*token_strlen)] = 0; + + /* read another token */ + addlen = *token_len - *token_strlen; + if(!sldns_parse_rdf_token(strbuf, token+*token_strlen, addlen, quoted, + parens, tokquote, pre_data_pos, delimiters, rdftype, + &addstrlen)) + return 0; + (*token_strlen) += addstrlen; + return 1; +} /** parse rdata from string into rr buffer(-remainder after dname). */ static int @@ -634,34 +657,16 @@ rrinternal_parse_rdata(sldns_buffer* strbuf, char* token, size_t token_len, } else if(token_strlen > 0 || quoted) { if(rdftype == LDNS_RDF_TYPE_HIP) { /* affix the HIT and PK fields, with a space */ - size_t addlen = token_len - token_strlen; - size_t addstrlen = 0; - /* add space */ - if(addlen < 1) break; - token[token_strlen] = ' '; - token[++token_strlen] = 0; - /* read another token */ - addlen = token_len - token_strlen; - if(!sldns_parse_rdf_token(strbuf, - token+token_strlen, addlen, "ed, - &parens, &tokquote, &pre_data_pos, - delimiters, rdftype, &addstrlen)) + if(!sldns_affix_token(strbuf, token, + &token_len, "ed, &parens, + &tokquote, &pre_data_pos, delimiters, + rdftype, &token_strlen)) break; - token_strlen += addstrlen; - /* add space */ - addlen = token_len - token_strlen; - if(addlen < 1) break; - token[token_strlen] = ' '; - token[++token_strlen] = 0; - /* read another token */ - addlen = token_len - token_strlen; - addstrlen = 0; - if(!sldns_parse_rdf_token(strbuf, - token+token_strlen, addlen, "ed, - &parens, &tokquote, &pre_data_pos, - delimiters, rdftype, &addstrlen)) + if(!sldns_affix_token(strbuf, token, + &token_len, "ed, &parens, + &tokquote, &pre_data_pos, delimiters, + rdftype, &token_strlen)) break; - token_strlen += addstrlen; } /* normal RR */