diff -ruN djbdns-1.05.orig/tinydns-data.c djbdns-1.05/tinydns-data.c --- djbdns-1.05.orig/tinydns-data.c Mon Jan 22 03:51:44 2001 +++ djbdns-1.05/tinydns-data.c Mon Jan 29 18:12:47 2001 @@ -159,11 +159,7 @@ die_datatmp(); } -buffer b; -char bspace[1024]; - static stralloc line; -int match = 1; unsigned long linenum = 0; #define NUMFIELDS 15 @@ -181,7 +177,7 @@ strerr_die4x(111,FATAL,"unable to parse data line ",strnum,why); } -int main() +int load(const char *fname) { int fddata; int i; @@ -196,20 +192,18 @@ char type[2]; char soa[20]; char buf[4]; + int match; + buffer b; + char bspace[1024]; - umask(022); - - fddata = open_read("data"); + fddata = open_read(fname); if (fddata == -1) - strerr_die2sys(111,FATAL,"unable to open data: "); + strerr_die4sys(111,FATAL,"unable to open ",fname,": "); defaultsoa_init(fddata); buffer_init(&b,buffer_unixread,fddata,bspace,sizeof bspace); - fdcdb = open_trunc("data.tmp"); - if (fdcdb == -1) die_datatmp(); - if (cdb_make_start(&cdb,fdcdb) == -1) die_datatmp(); - + match = 1; while (match) { ++linenum; if (getln(&b,&line,&match,'\n') == -1) @@ -444,6 +438,21 @@ default: syntaxerror(": unrecognized leading character"); } + } + close(fddata); +} + +main(int argc, char **argv) +{ + umask(022); + fdcdb = open_trunc("data.tmp"); + if (fdcdb == -1) die_datatmp(); + if (cdb_make_start(&cdb,fdcdb) == -1) die_datatmp(); + + if (argc == 1) + load("data"); + while(--argc) { + load(argv[argc]); } if (cdb_make_finish(&cdb) == -1) die_datatmp();