diff --git a/writer.go b/writer.go index 39f035d..552d11c 100644 --- a/writer.go +++ b/writer.go @@ -404,13 +404,3 @@ func (w *Writer) Contains(filepath string) bool { } return false } - -//WriteToFilename creates the squashfs archive with the given filepath. -func (w *Writer) WriteToFilename(filepath string) error { - newFil, err := os.Create(filepath) - if err != nil { - return err - } - _, err = w.WriteTo(newFil) - return err -} diff --git a/writer_fragment.go b/writer_fragment.go index 21a6ccd..399ecd0 100644 --- a/writer_fragment.go +++ b/writer_fragment.go @@ -27,8 +27,8 @@ func (f *fragment) addFragment(fil *fileHolder) { } //TODO: give info about the frags for the frag table. -func (w *Writer) writeFragments(write io.WriterAt, off int64) (curOffset int64, err error) { - curOffset = off +func (w *Writer) writeFragments(write io.WriterAt, off int64) (newOff int64, err error) { + newOff = off var buf bytes.Buffer var byts []byte var n int @@ -50,8 +50,8 @@ func (w *Writer) writeFragments(write io.WriterAt, off int64) (curOffset int64, } else { byts = buf.Bytes() } - n, err = write.WriteAt(byts, curOffset) - curOffset += int64(n) + n, err = write.WriteAt(byts, newOff) + newOff += int64(n) if err != nil { return } @@ -62,7 +62,8 @@ func (w *Writer) writeFragments(write io.WriterAt, off int64) (curOffset int64, func (w *Writer) addToFragments(fil *fileHolder) { fragSize := fil.blockSizes[len(fil.blockSizes)-1] - //only fragment if the final block is less then 80% of a full block or AlwaysFragment + //only fragment if the final block is less then 80% of a full block or AlwaysFragment. + //TODO: Make this check after looking at all fragment blocks. Below option is better, but this is easier to implement... if w.Flags.AlwaysFragment || fragSize < uint32(float32(w.BlockSize)*0.8) { //Try to slot the fragment into a fragment that has the perfect size left. If not, just pick the first one. //TODO: possibly make this more efficient, possibly by calculating fragments all at once and seeing which combos match BlockSize perfectly. @@ -89,22 +90,3 @@ func (w *Writer) addToFragments(fil *fileHolder) { } } } - -func (w *Writer) calculateFragsAndBlockSizes() { - for _, files := range w.structure { - for i := range files { - files[i].fragIndex = -1 - files[i].blockSizes = make([]uint32, files[i].size/uint64(w.BlockSize)) - for j := range files[i].blockSizes { - files[i].blockSizes[j] = w.BlockSize - } - fragSize := uint32(files[i].size % uint64(w.BlockSize)) - if fragSize > 0 { - files[i].blockSizes = append(files[i].blockSizes, fragSize) - if !w.Flags.NoFragments { - w.addToFragments(files[i]) - } - } - } - } -} diff --git a/writer_inodes.go b/writer_inodes.go index e9a857d..040b539 100644 --- a/writer_inodes.go +++ b/writer_inodes.go @@ -1,9 +1,16 @@ package squashfs +import "io" + func (w *Writer) countInodes() (out uint32) { + out++ //for the root directory for _, files := range w.structure { - out++ out += uint32(len(files)) } return } + +func (w *Writer) writeInodeTable(wrt io.WriterAt, off int64) (newOff int64, err error) { + newOff = off + return +} diff --git a/writer_write.go b/writer_write.go index 175b448..715a5c5 100644 --- a/writer_write.go +++ b/writer_write.go @@ -4,9 +4,20 @@ import ( "errors" "io" "math" + "os" "time" ) +//WriteToFilename creates the squashfs archive with the given filepath. +func (w *Writer) WriteToFilename(filepath string) error { + newFil, err := os.Create(filepath) + if err != nil { + return err + } + _, err = w.WriteTo(newFil) + return err +} + //WriteTo attempts to write the archive to the given io.Writer. // //Not working. Yet. @@ -32,5 +43,25 @@ func (w *Writer) WriteTo(write io.Writer) (int64, error) { MajorVersion: 4, MinorVersion: 0, } - return 0, errors.New("i SAID DON'T") + return 0, errors.New("i said don't") +} + +//splits up the size of files into +func (w *Writer) calculateFragsAndBlockSizes() { + for _, files := range w.structure { + for i := range files { + files[i].fragIndex = -1 + files[i].blockSizes = make([]uint32, files[i].size/uint64(w.BlockSize)) + for j := range files[i].blockSizes { + files[i].blockSizes[j] = w.BlockSize + } + fragSize := uint32(files[i].size % uint64(w.BlockSize)) + if fragSize > 0 { + files[i].blockSizes = append(files[i].blockSizes, fragSize) + if !w.Flags.NoFragments { + w.addToFragments(files[i]) + } + } + } + } }