From 508a33b3233b2a1bdc50bc3317f176a32f32b117 Mon Sep 17 00:00:00 2001 From: Caleb Gardner Date: Sun, 29 Nov 2020 15:55:06 -0600 Subject: [PATCH] Starting work on ExtractTo from File When using ExtractTo, will automatically set the correct permissions Will also be able to extract folders --- file.go | 15 +++++++++++++++ squash_test.go | 37 +++++++++++++++++++++++++++++++++++++ 2 files changed, 52 insertions(+) diff --git a/file.go b/file.go index 332ae7f..a5d6d3d 100644 --- a/file.go +++ b/file.go @@ -3,6 +3,7 @@ package squashfs import ( "errors" "io" + "os" "strings" "github.com/CalebQ42/squashfs/internal/directory" @@ -173,6 +174,20 @@ func (f *File) GetSymlinkFile() *File { return f.r.GetFileAtPath(f.SymlinkPath()) } +//Permission returns the os.FileMode of the File. Currently only has the permission bits (the last 9) populated. +func (f *File) Permission() os.FileMode { + //TODO: possibly populate more os.FileMode bits + return os.FileMode(f.in.Header.Permissions) +} + +func (f *File) ExtractTo(path string) error { + if f.IsDir() { + //TODO + } else if f.IsSymlink() { + + } +} + //Close frees up the memory held up by the underlying reader. Should NOT be called when writing. //When reading, Close is safe to use, but any subsequent Read calls resets to the beginning of the file. func (f *File) Close() error { diff --git a/squash_test.go b/squash_test.go index c1e87e3..6afb907 100644 --- a/squash_test.go +++ b/squash_test.go @@ -71,3 +71,40 @@ func downloadTestAppImage(t *testing.T, dir string) { t.Fatal(err) } } + +func TestCreateSquashFromAppImage(t *testing.T) { + wd, err := os.Getwd() + if err != nil { + t.Fatal(err) + } + err = os.Mkdir(wd+"/testing", 0777) + if err != nil && !os.IsExist(err) { + t.Fatal(err) + } + _, err = os.Open(wd + "/testing/" + appImageName) + if os.IsNotExist(err) { + downloadTestAppImage(t, wd+"/testing") + _, err = os.Open(wd + "/testing/" + appImageName) + if err != nil { + t.Fatal(err) + } + } else if err != nil { + t.Fatal(err) + } + ai := goappimage.NewAppImage(wd + "/testing/" + appImageName) + aiFil, err := os.Open(wd + "/testing/" + appImageName) + if err != nil { + t.Fatal(err) + } + defer aiFil.Close() + aiFil.Seek(ai.Offset, 0) + os.Remove(wd + "/testing/" + appImageName + ".squashfs") + aiSquash, err := os.Create(wd + "/testing/" + appImageName + ".squashfs") + if err != nil { + t.Fatal(err) + } + _, err = io.Copy(aiSquash, aiFil) + if err != nil { + t.Fatal(err) + } +}