Skip to content

Commit e6baf3f

Browse files
author
yang.yu
committed
fix: fix writer
1 parent d6b14e9 commit e6baf3f

File tree

3 files changed

+23
-58
lines changed

3 files changed

+23
-58
lines changed

README.md

Lines changed: 10 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -42,10 +42,15 @@ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
4242

4343
```go
4444
func ReadAndWrite() {
45-
resp := NewSmbNegotiateResponseV2()
46-
stream := kaitai.NewReadWriteStream(kaitai.NewStream(reader))
47-
resp.Read(stream, nil, resp)
48-
// stream.Check()
49-
err = stream.Write()
45+
// read
46+
stream := kaitai.NewStream(kaitai.NewFakeWriter(reader))
47+
resp := drda.NewDrda()
48+
err = resp.Read(stream, nil, resp)
49+
50+
// write
51+
writer := buffer.NewSeekableBuffer()
52+
err = resp.Check()
53+
assert.Nil(err)
54+
err = resp.Write(kaitai.NewStream(writer))
5055
}
5156
```

kaitai/util.go

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ package kaitai
33
import (
44
"bytes"
55
"compress/zlib"
6+
"errors"
67
"io"
78
"math/bits"
89
"strings"
@@ -123,3 +124,15 @@ func ByteArrayIndexof(arr []byte, b byte) int {
123124
}
124125
return -1
125126
}
127+
128+
type FakeWriter struct {
129+
io.ReadSeeker
130+
}
131+
132+
func (fw *FakeWriter) Write([]byte) (n int, err error) {
133+
return 0, errors.New("unsupported write")
134+
}
135+
136+
func NewFakeWriter(reader io.ReadSeeker) io.ReadWriteSeeker {
137+
return &FakeWriter{reader}
138+
}

kaitai/writer.go

Lines changed: 0 additions & 53 deletions
Original file line numberDiff line numberDiff line change
@@ -22,56 +22,3 @@ func (h *WriteBackHandler) writeBack(parent *Stream) error {
2222
}
2323
return h.handler(parent)
2424
}
25-
26-
type ReadWriteTrait interface {
27-
FetchInstances() error
28-
WriteSeq() error
29-
Check() error
30-
}
31-
32-
type ReadWriteStream struct {
33-
Stream
34-
35-
FetchInstance func() error
36-
WriteSeq func() error
37-
Check func() error
38-
}
39-
40-
func NewReadWriteStream(stream *Stream) *ReadWriteStream {
41-
return &ReadWriteStream{
42-
Stream: *stream,
43-
}
44-
}
45-
46-
func (k *ReadWriteStream) setFetchInstanceHandler(handler func() error) {
47-
k.FetchInstance = handler
48-
}
49-
50-
func (k *ReadWriteStream) setWriteSeqHandler(handler func() error) {
51-
k.WriteSeq = handler
52-
}
53-
54-
func (k *ReadWriteStream) setCheckHandler(handler func() error) {
55-
k.Check = handler
56-
}
57-
58-
func (k *ReadWriteStream) Write(rt ReadWriteTrait) error {
59-
k.setFetchInstanceHandler(rt.FetchInstances)
60-
k.setWriteSeqHandler(rt.WriteSeq)
61-
k.setCheckHandler(rt.Check)
62-
63-
err := k.Check()
64-
if err != nil {
65-
return err
66-
}
67-
err = k.WriteSeq()
68-
if err != nil {
69-
return err
70-
}
71-
err = k.FetchInstance()
72-
if err != nil {
73-
return err
74-
}
75-
err = k.WriteBackChildStreams()
76-
return err
77-
}

0 commit comments

Comments
 (0)