[ldns-users] suggestion for a parse-rrs callback method

Robert Edmonds edmonds at debian.org
Mon May 27 15:17:31 UTC 2013


Jelte Jansen wrote:
> So what would be very useful is a general construct to define a
> function that is called for every RR in a given file stream, e.g. a
> callback that gets an RR and probably a callback-specific void*
> 'state' object. Said construct would keep track of the state
> involved in 'real' parsing so that I don't have to repeat the same
> code over and over again.
> 
> Ideally, the calling program would then just have to define its
> callback, open the file, and call the ldns parser code, and be done
> with it, e.g. in the case of ldns I'd want something like:
> 
> // Callback to print the RR, no state.
> int printer(ldns_rr* rr, void* state) {
> 	ldns_rr_print(stdout, rr);
> 	return 0;
> }
> 
> in = fopen("my.zone", "r");
> if (in != NULL) {
> 	ldns_parse_rr_stream(in, printer, NULL);
> 	fclose(in);
> }

this seems like a very simple iterator pattern.  why complicate it with
a callback?  e.g.,

    in = fopen("my.zone", "r");
    if (in != NULL) {
        ldns_rr *rr;
        ldns_rr_iter *iter = ldns_parse_rr_iter_frm_fp(in);
        while ((rr = ldns_rr_iter_next(iter)) != NULL)
            ldns_rr_print(stdout, rr);
        ldns_rr_iter_free(iter);
    }

this makes the interface much easier to call in languages that are not C
or C++.

-- 
Robert Edmonds
edmonds at debian.org



More information about the ldns-users mailing list