in cmd/test2json2gha/github.go [168:212]
func (r *urlEncodeNewlineReader) Read(p []byte) (n int, err error) {
if len(p) == 0 {
return 0, nil
}
peekSize := len(p)
if peekSize > r.rdr.Size() {
peekSize = r.rdr.Size()
}
peeked, err := r.rdr.Peek(peekSize)
if err != nil {
if !errors.Is(err, io.EOF) {
return 0, fmt.Errorf("failed to peek: %w", err)
}
if len(peeked) == 0 {
return 0, io.EOF
}
}
// Pre-allocate output with the best-case size (same as peeked length)
output := make([]byte, 0, len(peeked))
consumed := 0 // Track the number of bytes consumed from peeked
for i := range peeked {
if peeked[i] == '\n' {
output = append(output, '%', '0', 'A')
} else {
output = append(output, peeked[i])
}
consumed++
if len(output) >= len(p) {
break
}
}
// Consume the bytes we processed from the underlying reader
_, err = r.rdr.Discard(consumed)
if err != nil {
return 0, err
}
return copy(p, output), nil
}