41 lines
633 B
Go
41 lines
633 B
Go
package pe
|
|
|
|
import "io"
|
|
|
|
func readfully(r io.Reader, p []byte) error {
|
|
n, err := r.Read(p)
|
|
if n < 0 || n > len(p) {
|
|
panic("invalid read length")
|
|
}
|
|
if err != nil && err != io.EOF {
|
|
return err
|
|
}
|
|
for n < len(p) {
|
|
m, err := r.Read(p[n:])
|
|
if m < 0 || m > len(p[n:]) {
|
|
panic("invalid read length")
|
|
}
|
|
n += m
|
|
if n < len(p) && err != nil {
|
|
return err
|
|
}
|
|
if n >= len(p) && err != nil && err != io.EOF {
|
|
return err
|
|
}
|
|
}
|
|
return nil
|
|
}
|
|
|
|
func readsz(r io.Reader) string {
|
|
name := []byte{}
|
|
for {
|
|
b := [1]byte{}
|
|
r.Read(b[:])
|
|
if b[0] == 0 {
|
|
break
|
|
}
|
|
name = append(name, b[0])
|
|
}
|
|
return string(name)
|
|
}
|