File: zipextra.go

package info (click to toggle)
golang-github-saracen-zipextra 0.0~git20250129.f1aa42d-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 120 kB
  • sloc: makefile: 2
file content (34 lines) | stat: -rw-r--r-- 718 bytes parent folder | download | duplicates (2)
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 zipextra

import (
	"errors"
	"io"
)

// ExtraField is a ZIP Extra Field byte slice.
type ExtraField []byte

// ErrInvalidExtraFieldFormat is returned when the extra field's format is
// incorrect.
var ErrInvalidExtraFieldFormat = errors.New("invalid extra field format")

// Parse parses all extra fields and returns a map with extra field identifiers
// as keys.
func Parse(extra []byte) (map[uint16]ExtraField, error) {
	b := NewBuffer(extra)

	efs := make(map[uint16]ExtraField)
	for b.Available() >= 4 {
		id := uint16(b.Read16())
		size := int(b.Read16())

		if b.Available() < size {
			return efs, io.ErrUnexpectedEOF
		}

		efs[id] = ExtraField(b.Bytes()[:size])
		b.Skip(size)
	}

	return efs, nil
}