feat: Add EOD handling

This commit is contained in:
Felicitas Pojtinger
2021-11-18 03:17:22 +01:00
parent a38e7bd710
commit 10168d6130

View File

@@ -31,23 +31,19 @@ type Operation struct {
}
type Counter struct {
reader io.Reader
Reader io.Reader
bytesRead int
BytesRead int
}
func (r *Counter) Read(p []byte) (n int, err error) {
n, err = r.reader.Read(p)
n, err = r.Reader.Read(p)
r.bytesRead += n
r.BytesRead += n
return n, err
}
func (r *Counter) GetBytesRead() int {
return r.bytesRead
}
func main() {
file := flag.String("file", "/dev/nst0", "File (tape drive or tar file) to open")
recordSize := flag.Int("recordSize", 20, "Amount of 512-bit blocks per record")
@@ -135,7 +131,9 @@ func main() {
}
} else {
br := bufio.NewReaderSize(f, blockSize**recordSize)
counter := &Counter{reader: br}
counter := &Counter{Reader: br}
errorCounter := 0
record := int64(0)
block := int64(0)
@@ -144,6 +142,14 @@ func main() {
tr := tar.NewReader(counter)
hdr, err := tr.Next()
if err != nil {
if counter.BytesRead != 0 && errorCounter == counter.BytesRead {
// EOD
break
}
errorCounter = counter.BytesRead
continue
}
@@ -153,7 +159,7 @@ func main() {
log.Println("Record:", record, "Block:", block, "Header:", hdr)
nextBytes := int64(counter.GetBytesRead()) + hdr.Size + blockSize - 1
nextBytes := int64(counter.BytesRead) + hdr.Size + blockSize - 1
record = nextBytes / (blockSize * int64(*recordSize))
block = (nextBytes - (record * int64(*recordSize) * blockSize)) / blockSize