github.com/devseccon/trivy@v0.47.1-0.20231123133102-bd902a0bd996/pkg/fanal/vm/filesystem/xfs.go (about)

     1  package filesystem
     2  
     3  import (
     4  	"io"
     5  	"io/fs"
     6  
     7  	"github.com/masahiro331/go-xfs-filesystem/xfs"
     8  	"golang.org/x/xerrors"
     9  
    10  	"github.com/devseccon/trivy/pkg/fanal/vm"
    11  )
    12  
    13  type XFS struct{}
    14  
    15  func (x XFS) New(sr io.SectionReader, cache vm.Cache[string, any]) (fs.FS, error) {
    16  	_, err := sr.Seek(0, io.SeekStart)
    17  	if err != nil {
    18  		return nil, xerrors.Errorf("failed to seek offset error: %w", err)
    19  	}
    20  	ok := xfs.Check(&sr)
    21  	if !ok {
    22  		return nil, ErrInvalidHeader
    23  	}
    24  
    25  	_, err = sr.Seek(0, io.SeekStart)
    26  	if err != nil {
    27  		return nil, xerrors.Errorf("failed to seek offset error: %w", err)
    28  	}
    29  	f, err := xfs.NewFS(sr, cache)
    30  	if err != nil {
    31  		return nil, xerrors.Errorf("new xfs filesystem error: %w", err)
    32  	}
    33  	return f, nil
    34  }