(dst io.Writer, src io.Reader, dir string)
| 141 | const debugCopy = false |
| 142 | |
| 143 | func copyData(dst io.Writer, src io.Reader, dir string) (written int64, err error) { |
| 144 | if debugCopy { |
| 145 | // copyBuffer is based on stdio Copy implementation but shows copied data |
| 146 | copyBuffer := func(dst io.Writer, src io.Reader, dir string) (written int64, err error) { |
| 147 | var buf []byte |
| 148 | size := 32 * 1024 |
| 149 | buf = make([]byte, size) |
| 150 | for { |
| 151 | t := time.Now() |
| 152 | nr, er := src.Read(buf) |
| 153 | if nr > 0 { |
| 154 | fmt.Println(dir, t.UnixNano(), "\n"+hex.Dump(buf[0:nr])) |
| 155 | nw, ew := dst.Write(buf[0:nr]) |
| 156 | if nw < 0 || nr < nw { |
| 157 | nw = 0 |
| 158 | if ew == nil { |
| 159 | ew = errors.New("invalid write") |
| 160 | } |
| 161 | } |
| 162 | written += int64(nw) |
| 163 | if ew != nil { |
| 164 | err = ew |
| 165 | break |
| 166 | } |
| 167 | if nr != nw { |
| 168 | err = io.ErrShortWrite |
| 169 | break |
| 170 | } |
| 171 | } |
| 172 | if er != nil { |
| 173 | if er != io.EOF { |
| 174 | err = er |
| 175 | } |
| 176 | break |
| 177 | } |
| 178 | } |
| 179 | return written, err |
| 180 | } |
| 181 | return copyBuffer(dst, src, dir) |
| 182 | } else { |
| 183 | return cfio.Copy(dst, src) |
| 184 | } |
| 185 | } |
no test coverage detected