forked from vieter-v/vieter
Start of .PKGINFO function
parent
74c8bfa158
commit
6dbac5918b
|
@ -8,6 +8,7 @@ struct C.archive {}
|
||||||
|
|
||||||
struct C.archive_entry {}
|
struct C.archive_entry {}
|
||||||
|
|
||||||
|
// Create a new archive struct
|
||||||
fn C.archive_read_new() &C.archive
|
fn C.archive_read_new() &C.archive
|
||||||
fn C.archive_read_support_filter_all(&C.archive)
|
fn C.archive_read_support_filter_all(&C.archive)
|
||||||
fn C.archive_read_support_format_all(&C.archive)
|
fn C.archive_read_support_format_all(&C.archive)
|
||||||
|
@ -16,6 +17,8 @@ fn C.archive_read_next_header(&C.archive, &&C.archive_entry) int
|
||||||
fn C.archive_entry_pathname(&C.archive_entry) &char
|
fn C.archive_entry_pathname(&C.archive_entry) &char
|
||||||
fn C.archive_read_data_skip(&C.archive)
|
fn C.archive_read_data_skip(&C.archive)
|
||||||
fn C.archive_read_free(&C.archive) int
|
fn C.archive_read_free(&C.archive) int
|
||||||
|
fn C.archive_read_data(&C.archive, voidptr, int)
|
||||||
|
fn C.archive_entry_size(&C.archive_entry) int
|
||||||
|
|
||||||
pub fn list_filenames() {
|
pub fn list_filenames() {
|
||||||
a := C.archive_read_new()
|
a := C.archive_read_new()
|
||||||
|
@ -34,3 +37,37 @@ pub fn list_filenames() {
|
||||||
|
|
||||||
r = C.archive_read_free(a) // Note 3
|
r = C.archive_read_free(a) // Note 3
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pub fn get_pkg_info(pkg_path string) ?string {
|
||||||
|
a := C.archive_read_new()
|
||||||
|
entry := &C.archive_entry{}
|
||||||
|
mut r := 0
|
||||||
|
|
||||||
|
C.archive_read_support_filter_all(a)
|
||||||
|
C.archive_read_support_format_all(a)
|
||||||
|
|
||||||
|
// TODO find out where does this 10240 come from
|
||||||
|
r = C.archive_read_open_filename(a, &char(pkg_path.str), 10240)
|
||||||
|
|
||||||
|
if r != C.ARCHIVE_OK {
|
||||||
|
return error('Failed to open package.')
|
||||||
|
}
|
||||||
|
|
||||||
|
// We iterate over every header in search of the .PKGINFO one
|
||||||
|
mut pkg_info := ''
|
||||||
|
for C.archive_read_next_header(a, &entry) == C.ARCHIVE_OK {
|
||||||
|
// TODO possibly avoid this cstring_to_vstring
|
||||||
|
if cstring_to_vstring(C.archive_entry_pathname(entry)) == '.PKGINFO' {
|
||||||
|
size := C.archive_entry_size(entry)
|
||||||
|
|
||||||
|
mut buf := []byte{len: size}
|
||||||
|
C.archive_read_data(a, voidptr(&buf), size)
|
||||||
|
break
|
||||||
|
}else{
|
||||||
|
C.archive_read_data_skip(a)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
r = C.archive_read_free(a) // Note 3
|
||||||
|
return ''
|
||||||
|
}
|
||||||
|
|
|
@ -95,7 +95,9 @@ fn main() {
|
||||||
logger.info("Created package directory '$repo.pkg_dir()'.")
|
logger.info("Created package directory '$repo.pkg_dir()'.")
|
||||||
}
|
}
|
||||||
|
|
||||||
archive.list_filenames()
|
archive.get_pkg_info('test/homebank-5.5.1-1-x86_64.pkg.tar.zst') or {
|
||||||
|
eprintln(err.msg)
|
||||||
|
}
|
||||||
web.run(&App{
|
web.run(&App{
|
||||||
logger: logger
|
logger: logger
|
||||||
api_key: key
|
api_key: key
|
||||||
|
|
Loading…
Reference in New Issue