Initial DDC release
This commit is contained in:
commit
434f6441da
57 files changed
+4606
No files matched your search
Executable
+44
@@ -0,0 +1,44 @@
|
||||
package extract
|
||||
|
||||
import "archive/zip"
|
||||
|
||||
func extractZip(archivePath string, writer *entryWriter) error {
|
||||
reader, err := zip.OpenReader(archivePath)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
defer reader.Close()
|
||||
|
||||
var declaredBytes uint64
|
||||
for _, file := range reader.File {
|
||||
declaredBytes += file.UncompressedSize64
|
||||
}
|
||||
if declaredBytes > uint64(writer.limits.MaxBytes) {
|
||||
return ErrTooLarge
|
||||
}
|
||||
writer.progress.SetTotal(int64(declaredBytes))
|
||||
|
||||
for _, file := range reader.File {
|
||||
if err := extractZipEntry(file, writer); err != nil {
|
||||
return err
|
||||
}
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
func extractZipEntry(file *zip.File, writer *entryWriter) error {
|
||||
mode := file.Mode()
|
||||
switch {
|
||||
case mode.IsDir():
|
||||
return writer.writeDirectory(file.Name)
|
||||
case mode.IsRegular():
|
||||
content, err := file.Open()
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
defer content.Close()
|
||||
return writer.writeFile(file.Name, content)
|
||||
default:
|
||||
return nil
|
||||
}
|
||||
}
|
||||
Reference in new issue
Block a user