mirror of
https://github.com/vlang/v.git
synced 2023-08-10 21:13:21 +03:00
szip: fix extracting dot folders (#13387)
This commit is contained in:
@ -4,20 +4,21 @@ import os
|
||||
|
||||
#flag -I @VEXEROOT/thirdparty/zip
|
||||
#include "zip.c"
|
||||
#include "zip.h"
|
||||
|
||||
struct C.zip_t {
|
||||
}
|
||||
|
||||
type Zip = C.zip_t
|
||||
|
||||
pub type Fn_on_extract_entry = fn (&&char, &&char) int
|
||||
|
||||
fn C.zip_open(&char, int, char) &Zip
|
||||
|
||||
fn C.zip_close(&Zip)
|
||||
|
||||
fn C.zip_entry_open(&Zip, &u8) int
|
||||
|
||||
fn C.zip_entry_openbyindex(&Zip, int) int
|
||||
fn C.zip_entry_openbyindex(&Zip, usize) int
|
||||
|
||||
fn C.zip_entry_close(&Zip) int
|
||||
|
||||
@ -41,9 +42,13 @@ fn C.zip_entry_noallocread(&Zip, voidptr, usize) int
|
||||
|
||||
fn C.zip_entry_fread(&Zip, &char) int
|
||||
|
||||
fn C.zip_total_entries(&Zip) int
|
||||
fn C.zip_entries_total(&Zip) int
|
||||
|
||||
fn C.zip_extract_without_callback(&char, &char) int
|
||||
fn C.zip_extract(&char, &char, Fn_on_extract_entry, voidptr) int
|
||||
|
||||
fn cb_zip_extract(filename &&char, arg &&char) int {
|
||||
return 0
|
||||
}
|
||||
|
||||
// CompressionLevel lists compression levels, see in "thirdparty/zip/miniz.h"
|
||||
pub enum CompressionLevel {
|
||||
@ -216,9 +221,6 @@ pub fn (mut zentry Zip) read_entry_buf(buf voidptr, in_bsize int) ?int {
|
||||
|
||||
// extract_entry extracts the current zip entry into output file.
|
||||
pub fn (mut zentry Zip) extract_entry(path string) ? {
|
||||
if !os.is_file(path) {
|
||||
return error('szip: cannot open file for extracting, "$path" not exists')
|
||||
}
|
||||
res := C.zip_entry_fread(zentry, &char(path.str))
|
||||
if res != 0 {
|
||||
return error('szip: failed to extract entry')
|
||||
@ -230,7 +232,7 @@ pub fn extract_zip_to_dir(file string, dir string) ?bool {
|
||||
if C.access(&char(dir.str), 0) == -1 {
|
||||
return error('szip: cannot open directory for extracting, directory not exists')
|
||||
}
|
||||
res := C.zip_extract_without_callback(&char(file.str), &char(dir.str))
|
||||
res := C.zip_extract(&char(file.str), &char(dir.str), cb_zip_extract, 0)
|
||||
return res == 0
|
||||
}
|
||||
|
||||
@ -288,7 +290,7 @@ pub fn zip_folder(path_to_dir string, path_to_export_zip string) {
|
||||
|
||||
// total returns the number of all entries (files and directories) in the zip archive.
|
||||
pub fn (mut zentry Zip) total() ?int {
|
||||
tentry := int(C.zip_total_entries(zentry))
|
||||
tentry := int(C.zip_entries_total(zentry))
|
||||
if tentry == -1 {
|
||||
return error('szip: cannot count total entries')
|
||||
}
|
||||
|
Reference in New Issue
Block a user