aboutsummaryrefslogtreecommitdiff
path: root/packfile/ingest/use.go
blob: 97f8757a16376a3efe14ca4118569a49e8779cb4 (about) (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
package ingest

import (
	"fmt"
	"hash/crc32"
)

// use consumes n unread bytes and updates accounting/checksum state.
func (scanner *streamScanner) use(n int) error {
	if n < 0 || n > scanner.n-scanner.off {
		return fmt.Errorf("packfile/ingest: invalid consume length %d", n)
	}

	if n == 0 {
		return nil
	}

	chunk := scanner.buf[scanner.off : scanner.off+n]
	if scanner.hashEnabled {
		_, err := scanner.hash.Write(chunk)
		if err != nil {
			return err
		}
	}

	if scanner.inEntryCRC {
		scanner.entryCRC = crc32.Update(scanner.entryCRC, crc32.IEEETable, chunk)
	}

	scanner.off += n
	scanner.consumed += uint64(n)

	return nil
}