Skip to content

Commit e68eb7c

Browse files
committed
Fix for hexdumpc with --length
1 parent 1b26315 commit e68eb7c

1 file changed

Lines changed: 16 additions & 7 deletions

File tree

‎cmd/hexdumpc/hexdumpc.go‎

Lines changed: 16 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -28,19 +28,24 @@ func hexdump(fileName string, offset, length int64, w io.Writer) error {
2828
return err
2929
}
3030
defer file.Close()
31-
// Seek to the offset
31+
32+
reader := bufio.NewReaderSize(file, 1024*1024)
33+
3234
if offset > 0 {
33-
if _, err := file.Seek(offset, io.SeekStart); err != nil {
35+
skip := make([]byte, offset)
36+
skipCount, err := io.ReadFull(reader, skip)
37+
if err != nil {
3438
return err
3539
}
40+
if int64(skipCount) != offset {
41+
return fmt.Errorf("failed to skip the requested number of bytes (actual: %d, expected: %d)", skipCount, offset)
42+
}
3643
}
3744

38-
reader := bufio.NewReaderSize(file, 1024*1024)
39-
4045
var count int64 = 0
46+
var buf = make([]byte, 16)
4147
for {
4248
// Read a chunk of data
43-
buf := make([]byte, 16)
4449
n, err := reader.Read(buf)
4550
if err != nil {
4651
if err == io.EOF {
@@ -133,8 +138,12 @@ func main() {
133138
arg = "/dev/stdin"
134139
}
135140

136-
if err := hexdump(arg, *offset, *length, bufio.NewWriter(os.Stdout)); err != nil {
137-
panic(err)
141+
w := bufio.NewWriter(os.Stdout)
142+
if err := hexdump(arg, *offset, *length, w); err != nil {
143+
w.Flush()
144+
fmt.Printf("ERROR: %v\n", err)
145+
os.Exit(1)
138146
}
147+
w.Flush()
139148
}
140149
}

0 commit comments

Comments
 (0)