github.com/kubri/kubri@v0.5.1-0.20240317001612-bda2aaef967e/integrations/apt/control.go (about) 1 package apt 2 3 import ( 4 "archive/tar" 5 "bytes" 6 "io" 7 "path" 8 "strings" 9 10 "github.com/blakesmith/ar" 11 12 "github.com/kubri/kubri/integrations/apt/deb" 13 ) 14 15 func getControl(b []byte) (*Package, error) { 16 r := ar.NewReader(bytes.NewReader(b)) 17 18 for { 19 h, err := r.Next() 20 if err != nil { 21 return nil, err 22 } 23 if !strings.HasPrefix(h.Name, "control.tar") { 24 continue 25 } 26 27 r, err := decompress(path.Ext(h.Name))(r) 28 if err != nil { 29 return nil, err 30 } 31 defer r.Close() 32 33 tr := tar.NewReader(r) 34 35 for { 36 h, err := tr.Next() 37 if err != nil { 38 return nil, err 39 } 40 if path.Base(h.Name) != "control" { 41 continue 42 } 43 44 b, err := io.ReadAll(tr) 45 if err != nil { 46 return nil, err 47 } 48 p := &Package{} 49 if err = deb.Unmarshal(b, p); err != nil { 50 return nil, err 51 } 52 53 return p, nil 54 } 55 } 56 }