Compare commits

...

2 Commits

Author SHA1 Message Date
Caleb Gardner a298a3d7b5 Fixed first byte of data blocks being cut off 2020-12-27 02:10:51 -06:00
Caleb Gardner 89ec7eb0fb Fixed GetSymlinkFile
Added GetSymlinkFileRecursive
2020-12-16 02:39:35 -06:00
3 changed files with 42 additions and 10 deletions
+1 -1
View File
@@ -175,12 +175,12 @@ func (d *dataReader) Read(p []byte) (int, error) {
d.curReadOffset = 0 d.curReadOffset = 0
} }
for ; read < len(p); read++ { for ; read < len(p); read++ {
d.curReadOffset++
if d.curReadOffset < len(d.curData) { if d.curReadOffset < len(d.curData) {
p[read] = d.curData[d.curReadOffset] p[read] = d.curData[d.curReadOffset]
} else { } else {
break break
} }
d.curReadOffset++
} }
} }
if read != len(p) { if read != len(p) {
+24 -2
View File
@@ -229,7 +229,8 @@ func (f *File) SymlinkPath() string {
} }
} }
//GetSymlinkFile tries to return the squashfs.File associated with the symlink //GetSymlinkFile tries to return the squashfs.File associated with the symlink. If the file isn't a symlink
//or the symlink points to a location outside the archive, nil is returned.
func (f *File) GetSymlinkFile() *File { func (f *File) GetSymlinkFile() *File {
if !f.IsSymlink() { if !f.IsSymlink() {
return nil return nil
@@ -237,7 +238,28 @@ func (f *File) GetSymlinkFile() *File {
if strings.HasSuffix(f.SymlinkPath(), "/") { if strings.HasSuffix(f.SymlinkPath(), "/") {
return nil return nil
} }
return f.r.GetFileAtPath(f.SymlinkPath()) return f.Parent.GetFileAtPath(f.SymlinkPath())
}
//GetSymlinkFileRecursive tries to return the squasfs.File associated with the symlink. It will recursively
//try to get the symlink's file. This will return either a non-symlink File, or nil.
func (f *File) GetSymlinkFileRecursive() *File {
if !f.IsSymlink() {
return nil
}
if strings.HasSuffix(f.SymlinkPath(), "/") {
return nil
}
sym := f
for {
sym = sym.GetSymlinkFile()
if sym == nil {
return nil
}
if !sym.IsSymlink() {
return sym
}
}
} }
//Mode returns the os.FileMode of the File. Sets mode bits for directories and symlinks. //Mode returns the os.FileMode of the File. Sets mode bits for directories and symlinks.
+16 -6
View File
@@ -1,6 +1,7 @@
package squashfs package squashfs
import ( import (
"fmt"
"io" "io"
"net/http" "net/http"
"os" "os"
@@ -12,10 +13,9 @@ import (
const ( const (
downloadURL = "https://github.com/Swordfish90/cool-retro-term/releases/download/1.1.1/Cool-Retro-Term-1.1.1-x86_64.AppImage" downloadURL = "https://github.com/Swordfish90/cool-retro-term/releases/download/1.1.1/Cool-Retro-Term-1.1.1-x86_64.AppImage"
appImageName = "Cool-Retro-Term.AppImage" appImageName = "Cool-Retro-Term.AppImage"
squashfsName = "airootfs.sfs" //testing with a ArchLinux root fs from the live img squashfsName = "balenaEtcher-1.5.113-x64.AppImage.sfs" //testing with a ArchLinux root fs from the live img
) )
//Right now, don't use. Arch linux sfs uses XZ compression with filters, which isn't supported
func TestSquashfs(t *testing.T) { func TestSquashfs(t *testing.T) {
wd, err := os.Getwd() wd, err := os.Getwd()
if err != nil { if err != nil {
@@ -29,10 +29,20 @@ func TestSquashfs(t *testing.T) {
if err != nil { if err != nil {
t.Fatal(err) t.Fatal(err)
} }
os.RemoveAll(wd + "/testing/" + squashfsName + ".d") fmt.Println("stuff", rdr.super.CompressionType)
root, _ := rdr.GetRootFolder() fil := rdr.GetFileAtPath("*.desktop")
errs := root.ExtractWithOptions(wd+"/testing/"+squashfsName+".d", false, false, os.ModePerm, true) if fil == nil {
t.Fatal("Can't find desktop fil")
}
errs := fil.ExtractTo(wd + "/testing")
if len(errs) > 0 {
t.Fatal(errs) t.Fatal(errs)
}
errs = rdr.ExtractTo(wd + "/testing/" + squashfsName + ".d")
if len(errs) > 0 {
t.Fatal(errs)
}
t.Fatal("No Problems")
} }
func TestAppImage(t *testing.T) { func TestAppImage(t *testing.T) {
@@ -78,7 +88,7 @@ func downloadTestAppImage(t *testing.T, dir string) {
} }
defer appImage.Close() defer appImage.Close()
check := http.Client{ check := http.Client{
CheckRedirect: func(r *http.Request, via []*http.Request) error { CheckRedirect: func(r *http.Request, _ []*http.Request) error {
r.URL.Opaque = r.URL.Path r.URL.Opaque = r.URL.Path
return nil return nil
}, },