From 5df79c53745fde5d6c3340a2979b1429cd5892c1 Mon Sep 17 00:00:00 2001 From: Henrik Rydberg Date: Sat, 8 Oct 2011 20:30:28 +0200 Subject: Initial import of htcd system 1.0 Signed-off-by: Henrik Rydberg --- src/hdb/hdbfix.cc | 140 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 140 insertions(+) create mode 100644 src/hdb/hdbfix.cc (limited to 'src/hdb/hdbfix.cc') diff --git a/src/hdb/hdbfix.cc b/src/hdb/hdbfix.cc new file mode 100644 index 0000000..b82f151 --- /dev/null +++ b/src/hdb/hdbfix.cc @@ -0,0 +1,140 @@ +/************************************************************************* + * + * 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<