mirror of
https://github.com/ScuroNeko/mtg.git
synced 2026-09-02 00:11:56 +03:00
Correctly manage partial writes
This commit is contained in:
@@ -61,26 +61,22 @@ func (r *Record) Read(reader io.Reader) error {
|
||||
}
|
||||
|
||||
func (r *Record) Dump(writer io.Writer) error {
|
||||
buf := [2]byte{byte(r.Type), 0}
|
||||
buf := acquireBytesBuffer()
|
||||
defer releaseBytesBuffer(buf)
|
||||
|
||||
if _, err := writer.Write(buf[:1]); err != nil {
|
||||
return fmt.Errorf("cannot dump type: %w", err)
|
||||
}
|
||||
bufSlice := [2]byte{byte(r.Type), 0}
|
||||
buf.Write(bufSlice[:1])
|
||||
|
||||
binary.BigEndian.PutUint16(buf[:], uint16(r.Version))
|
||||
binary.BigEndian.PutUint16(bufSlice[:], uint16(r.Version))
|
||||
buf.Write(bufSlice[:])
|
||||
|
||||
if _, err := writer.Write(buf[:]); err != nil {
|
||||
return fmt.Errorf("cannot dump version: %w", err)
|
||||
}
|
||||
binary.BigEndian.PutUint16(bufSlice[:], uint16(r.Payload.Len()))
|
||||
buf.Write(bufSlice[:])
|
||||
|
||||
binary.BigEndian.PutUint16(buf[:], uint16(r.Payload.Len()))
|
||||
buf.Write(r.Payload.Bytes())
|
||||
|
||||
if _, err := writer.Write(buf[:]); err != nil {
|
||||
return fmt.Errorf("cannot dump payload length: %w", err)
|
||||
}
|
||||
|
||||
if _, err := writer.Write(r.Payload.Bytes()); err != nil {
|
||||
return fmt.Errorf("cannot dump payload: %w", err)
|
||||
if _, err := buf.WriteTo(writer); err != nil {
|
||||
return fmt.Errorf("cannot dump record: %w", err)
|
||||
}
|
||||
|
||||
return nil
|
||||
|
||||
Reference in New Issue
Block a user