Rename goupnp2dcpgen to goupnpsrvgen.
This commit is contained in:
68
v2alpha/cmd/goupnp2srvgen/zipread/zipread.go
Normal file
68
v2alpha/cmd/goupnp2srvgen/zipread/zipread.go
Normal file
@ -0,0 +1,68 @@
|
||||
package zipread
|
||||
|
||||
import (
|
||||
"archive/zip"
|
||||
"bytes"
|
||||
"io"
|
||||
"io/fs"
|
||||
"os"
|
||||
)
|
||||
|
||||
type SizedReaderAt struct {
|
||||
R io.ReaderAt
|
||||
Size int64
|
||||
}
|
||||
|
||||
func NewSizedReaderFromOsFile(f *os.File) (*SizedReaderAt, error) {
|
||||
stat, err := f.Stat()
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return &SizedReaderAt{R: f, Size: stat.Size()}, nil
|
||||
}
|
||||
|
||||
func NewSizedReaderFromReader(r io.Reader) (*SizedReaderAt, error) {
|
||||
data, err := io.ReadAll(r)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
contents := bytes.NewReader(data)
|
||||
return &SizedReaderAt{R: contents, Size: int64(len(data))}, nil
|
||||
}
|
||||
|
||||
type ZipRead struct {
|
||||
*zip.Reader
|
||||
}
|
||||
|
||||
func New(r *SizedReaderAt) (*ZipRead, error) {
|
||||
zr, err := zip.NewReader(r.R, r.Size)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return &ZipRead{zr}, nil
|
||||
}
|
||||
|
||||
func FromOsFile(f *os.File) (*ZipRead, error) {
|
||||
r, err := NewSizedReaderFromOsFile(f)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return New(r)
|
||||
}
|
||||
|
||||
func FromFsFile(f fs.File) (*ZipRead, error) {
|
||||
r, err := NewSizedReaderFromReader(f)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return New(r)
|
||||
}
|
||||
|
||||
func (zr *ZipRead) OpenZip(path string) (*ZipRead, error) {
|
||||
f, err := zr.Reader.Open(path)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
defer f.Close()
|
||||
return FromFsFile(f)
|
||||
}
|
Reference in New Issue
Block a user