Compare commits
2 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| a298a3d7b5 | |||
| 89ec7eb0fb |
+1
-1
@@ -175,12 +175,12 @@ func (d *dataReader) Read(p []byte) (int, error) {
|
||||
d.curReadOffset = 0
|
||||
}
|
||||
for ; read < len(p); read++ {
|
||||
d.curReadOffset++
|
||||
if d.curReadOffset < len(d.curData) {
|
||||
p[read] = d.curData[d.curReadOffset]
|
||||
} else {
|
||||
break
|
||||
}
|
||||
d.curReadOffset++
|
||||
}
|
||||
}
|
||||
if read != len(p) {
|
||||
|
||||
@@ -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 {
|
||||
if !f.IsSymlink() {
|
||||
return nil
|
||||
@@ -237,7 +238,28 @@ func (f *File) GetSymlinkFile() *File {
|
||||
if strings.HasSuffix(f.SymlinkPath(), "/") {
|
||||
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.
|
||||
|
||||
+17
-7
@@ -1,6 +1,7 @@
|
||||
package squashfs
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"io"
|
||||
"net/http"
|
||||
"os"
|
||||
@@ -12,10 +13,9 @@ import (
|
||||
const (
|
||||
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"
|
||||
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) {
|
||||
wd, err := os.Getwd()
|
||||
if err != nil {
|
||||
@@ -29,10 +29,20 @@ func TestSquashfs(t *testing.T) {
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
os.RemoveAll(wd + "/testing/" + squashfsName + ".d")
|
||||
root, _ := rdr.GetRootFolder()
|
||||
errs := root.ExtractWithOptions(wd+"/testing/"+squashfsName+".d", false, false, os.ModePerm, true)
|
||||
t.Fatal(errs)
|
||||
fmt.Println("stuff", rdr.super.CompressionType)
|
||||
fil := rdr.GetFileAtPath("*.desktop")
|
||||
if fil == nil {
|
||||
t.Fatal("Can't find desktop fil")
|
||||
}
|
||||
errs := fil.ExtractTo(wd + "/testing")
|
||||
if len(errs) > 0 {
|
||||
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) {
|
||||
@@ -78,7 +88,7 @@ func downloadTestAppImage(t *testing.T, dir string) {
|
||||
}
|
||||
defer appImage.Close()
|
||||
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
|
||||
return nil
|
||||
},
|
||||
|
||||
Reference in New Issue
Block a user