better error handling, check in for Gulácsi Tamás

This commit is contained in:
Chris Lu
2013-01-20 03:40:04 -08:00
parent 768eaff4b8
commit 866d15023d
6 changed files with 160 additions and 81 deletions

View File

@@ -50,20 +50,28 @@ func runFix(cmd *Command, args []string) bool {
log.Fatalf("cannot read superblock: %s", e)
}
ver, _, _ := storage.ParseSuperBlock(header)
ver, _, e := storage.ParseSuperBlock(header)
if e != nil {
log.Fatalf("error parsing superblock: %s", e)
}
n, rest := storage.ReadNeedleHeader(dataFile, ver)
n, rest, e := storage.ReadNeedleHeader(dataFile, ver)
if e != nil {
log.Fatalf("error reading needle header: %s", e)
}
dataFile.Seek(int64(rest), 1)
nm := storage.NewNeedleMap(indexFile)
offset := uint32(storage.SuperBlockSize)
for n != nil {
debug("key", n.Id, "volume offset", offset, "data_size", n.Size, "rest", rest)
if n.Size > 0 {
count, pe := nm.Put(n.Id, offset/8, n.Size)
count, pe := nm.Put(n.Id, offset/storage.NeedlePaddingSize, n.Size)
debug("saved", count, "with error", pe)
}
offset += rest + 16
n, rest = storage.ReadNeedleHeader(dataFile, ver)
if n, rest, e = storage.ReadNeedleHeader(dataFile, ver); e != nil {
log.Fatalf("error reading needle header: %s", e)
}
dataFile.Seek(int64(rest), 1)
}
return true