/************************************************************************* * * HTCd - Copyright (C) 1998-2006 Henrik Rydberg * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ #include static fp_stream mout(stdout),merr(stderr); main(int argc,char* argv[]) try { if(argc<2) { mout<<"Usage: "<\n"; return -1; } mstring path; int silent; if(argc>2) { silent=1; path=argv[2]; } else { silent=0; path=argv[1]; } mstring map; if(map.load(path)<0) THROW("hdbfix: could not open "<mem.get()<=0) { if(!silent&&rec->mem.get()<0) mout<<"ending mem: "<mem.get()<<"\n"; break; } last=top; top+=rec->mem.get(); } if(top==head.filetop.get()&&head.filesize.get()==map.size()) { if(!silent) mout<=last;p-=4){ int val=ntohl(*(long*)(map.data()+p)); if(p+val==end) { nend++; end=p; } } int gap=end-top; mout<<"GAP DATA\n"; mout<<"==============================\n"; for(int i=top;i0) { mout<<"Do you want to mark the gap as deleted?\n"; getline(answer,stdin); answer.tolower(); if(*answer=='y') { filemap::rec_t* rec=(filemap::rec_t*)(map.data()+top); rec->mem.set(gap); rec->caps.set(0); save=1; mout<<"Done.\n"; } else { mout<<"No change - quitting.\n"; return 0; } } } } if(save) map.save(path); return 0; } catch(const merror_t& e) { merr<