File tree 2 files changed +22
-2
lines changed
2 files changed +22
-2
lines changed Original file line number Diff line number Diff line change @@ -37,7 +37,7 @@ func XXD(r io.Reader, w io.Writer) error {
37
37
r = bufio .NewReader (r )
38
38
buf := make ([]byte , 16 )
39
39
for {
40
- n , err := r . Read ( buf )
40
+ n , err := io . ReadFull ( r , buf )
41
41
if n == 0 || err == io .EOF {
42
42
break
43
43
}
Original file line number Diff line number Diff line change @@ -28,7 +28,7 @@ func TestXXD(t *testing.T) {
28
28
size := n % uint64 (len (data ))
29
29
fmt .Printf ("%d\n " , size )
30
30
var out bytes.Buffer
31
- if err := fn (bytes . NewBuffer ( data [0 :size ]) , & out ); err != nil {
31
+ if err := fn (& pathologicalReader { data [0 :size ]} , & out ); err != nil {
32
32
return []string {err .Error ()}
33
33
}
34
34
return strings .Split (out .String (), "\n " )
@@ -48,6 +48,26 @@ func TestXXD(t *testing.T) {
48
48
}
49
49
}
50
50
51
+ type pathologicalReader struct {
52
+ data []byte
53
+ }
54
+
55
+ func (p * pathologicalReader ) Read (b []byte ) (int , error ) {
56
+ n := len (b )
57
+ if n > len (p .data ) {
58
+ n = len (p .data )
59
+ }
60
+ if n > 1 {
61
+ n --
62
+ }
63
+ copy (b , p .data [0 :n ])
64
+ p .data = p .data [n :]
65
+ if len (p .data ) == 0 {
66
+ return n , io .EOF
67
+ }
68
+ return n , nil
69
+ }
70
+
51
71
func BenchmarkXXD (b * testing.B ) {
52
72
b .StopTimer ()
53
73
data := make ([]byte , b .N )
You can’t perform that action at this time.
0 commit comments