File tree Expand file tree Collapse file tree 2 files changed +22
-2
lines changed
Expand file tree Collapse file tree 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 {
3737 r = bufio .NewReader (r )
3838 buf := make ([]byte , 16 )
3939 for {
40- n , err := r . Read ( buf )
40+ n , err := io . ReadFull ( r , buf )
4141 if n == 0 || err == io .EOF {
4242 break
4343 }
Original file line number Diff line number Diff line change @@ -28,7 +28,7 @@ func TestXXD(t *testing.T) {
2828 size := n % uint64 (len (data ))
2929 fmt .Printf ("%d\n " , size )
3030 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 {
3232 return []string {err .Error ()}
3333 }
3434 return strings .Split (out .String (), "\n " )
@@ -48,6 +48,26 @@ func TestXXD(t *testing.T) {
4848 }
4949}
5050
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+
5171func BenchmarkXXD (b * testing.B ) {
5272 b .StopTimer ()
5373 data := make ([]byte , b .N )
You can’t perform that action at this time.
0 commit comments