Changeset 951 for trunk/pdns/pdns/zoneparser-tng.cc
- Timestamp:
- 02/17/07 00:06:12 (6 years ago)
- Files:
-
- 1 modified
-
trunk/pdns/pdns/zoneparser-tng.cc (modified) (3 diffs)
Legend:
- Unmodified
- Added
- Removed
-
trunk/pdns/pdns/zoneparser-tng.cc
r802 r951 32 32 ZoneParserTNG::ZoneParserTNG(const string& fname, const string& zname) : d_zonename(zname), d_defaultttl(3600) 33 33 { 34 d_fp=fopen(fname.c_str(), "r"); 35 if(!d_fp) 34 stackFile(fname); 35 } 36 37 void ZoneParserTNG::stackFile(const std::string& fname) 38 { 39 FILE *fp=fopen(fname.c_str(), "r"); 40 if(!fp) 36 41 throw runtime_error("Unable to open file '"+fname+"': "+stringerror()); 42 d_fps.push(fp); 37 43 } 38 44 39 45 ZoneParserTNG::~ZoneParserTNG() 40 46 { 41 fclose(d_fp); 47 while(!d_fps.empty()) { 48 fclose(d_fps.top()); 49 d_fps.pop(); 50 } 42 51 } 43 52 … … 91 100 92 101 if(d_line[0]=='$') { 93 if(makeString(d_line, parts[0])=="$TTL" && parts.size() > 1) 102 string command=makeString(d_line, parts[0]); 103 if(command=="$TTL" && parts.size() > 1) 94 104 d_defaultttl=makeTTLFromZone(makeString(d_line,parts[1])); 105 else if(command=="$INCLUDE" && parts.size() > 1) { 106 stackFile(unquotify(makeString(d_line, parts[1]))); 107 } 108 #if 0 109 else if(command=="$GENERATE" && parts.size() > 2) { 110 // $GENERATE 1-127 $ CNAME $.0 111 string range=makeString(d_line, parts[1]); 112 int start, stop, step=0; 113 int ret=sscanf(range.c_str(),"%d-%d/%d", &start, & stop, &step); 114 cerr<<"ret="<<ret<<", start="<<start<<", stop="<<stop<<", step="<<step<<endl; 115 } 116 #endif 95 117 else 96 118 throw exception("Can't parse zone line '"+d_line+"'"); … … 223 245 bool ZoneParserTNG::getLine() 224 246 { 225 char buffer[1024]; 226 if(fgets(buffer, 1024, d_fp)) { 227 d_line=buffer; 228 return true; 247 while(!d_fps.empty()) { 248 char buffer[1024]; 249 if(fgets(buffer, 1024, d_fps.top())) { 250 d_line=buffer; 251 return true; 252 } 253 fclose(d_fps.top()); 254 d_fps.pop(); 229 255 } 230 256 return false;