MCPcopy Index your code
hub / github.com/GoEdgeLab/EdgeNode / ReadHeader

Method ReadHeader

internal/caches/reader_file.go:145–216  ·  view source on GitHub ↗
(buf []byte, callback ReaderFunc)

Source from the content-addressed store, hash-verified

143}
144
145func (this *FileReader) ReadHeader(buf []byte, callback ReaderFunc) error {
146 // 使用缓存
147 if len(this.header) > 0 && len(buf) >= len(this.header) {
148 copy(buf, this.header)
149 _, err := callback(len(this.header))
150 if err != nil {
151 return err
152 }
153
154 // 移动到Body位置
155 _, err = this.fp.Seek(this.bodyOffset, io.SeekStart)
156 if err != nil {
157 return err
158 }
159 return nil
160 }
161
162 var isOk = false
163
164 defer func() {
165 if !isOk {
166 _ = this.discard()
167 }
168 }()
169
170 _, err := this.fp.Seek(this.headerOffset, io.SeekStart)
171 if err != nil {
172 return err
173 }
174
175 var headerSize = this.headerSize
176
177 for {
178 n, err := this.fp.Read(buf)
179 if n > 0 {
180 if n < headerSize {
181 goNext, e := callback(n)
182 if e != nil {
183 isOk = true
184 return e
185 }
186 if !goNext {
187 break
188 }
189 headerSize -= n
190 } else {
191 _, e := callback(headerSize)
192 if e != nil {
193 isOk = true
194 return e
195 }
196 break
197 }
198 }
199 if err != nil {
200 if err != io.EOF {
201 return err
202 }

Callers 1

TestFileReaderFunction · 0.95

Calls 3

discardMethod · 0.95
SeekMethod · 0.80
ReadMethod · 0.65

Tested by 1

TestFileReaderFunction · 0.76