37 lines
744 B
Go
37 lines
744 B
Go
package assetloader
|
|
|
|
import (
|
|
"fmt"
|
|
"os"
|
|
"path/filepath"
|
|
|
|
"git.warky.dev/wdevs/relspecgo/pkg/safefile"
|
|
)
|
|
|
|
func openAssetRoot(path string) (*os.Root, error) {
|
|
if err := safefile.CheckRoot(path); err != nil {
|
|
return nil, err
|
|
}
|
|
return os.OpenRoot(path)
|
|
}
|
|
|
|
func readItemAsset(item Item) ([]byte, error) {
|
|
if item.AssetRoot == "" {
|
|
return nil, fmt.Errorf("asset root is required for manifest execution")
|
|
}
|
|
root, err := openAssetRoot(item.AssetRoot)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
defer root.Close()
|
|
relative, err := filepath.Rel(item.AssetRoot, item.Entry.File)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
limit := item.MaxFileBytes
|
|
if limit == 0 {
|
|
limit = DefaultMaxAssetBytes
|
|
}
|
|
return safefile.Read(root, relative, limit)
|
|
}
|