forked from vieter-v/vieter
				
			Start of .PKGINFO function
							parent
							
								
									74c8bfa158
								
							
						
					
					
						commit
						6dbac5918b
					
				|  | @ -8,6 +8,7 @@ struct C.archive {} | |||
| 
 | ||||
| struct C.archive_entry {} | ||||
| 
 | ||||
| // Create a new archive struct | ||||
| fn C.archive_read_new() &C.archive | ||||
| fn C.archive_read_support_filter_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_read_data_skip(&C.archive) | ||||
| 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() { | ||||
| 	a := C.archive_read_new() | ||||
|  | @ -34,3 +37,37 @@ pub fn list_filenames() { | |||
| 
 | ||||
| 	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()'.") | ||||
| 	} | ||||
| 
 | ||||
| 	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{ | ||||
| 		logger: logger | ||||
| 		api_key: key | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue