1/* libarchive.vapi - Bindings for libarchive(3) (version 3). 2 * 3 * Copyright (C) 2009 Julian Andres Klode <jak@jak-linux.org> 4 * 5 * This library is free software; you can redistribute it and/or 6 * modify it under the terms of the GNU Lesser General Public 7 * License as published by the Free Software Foundation; either 8 * version 2.1 of the License, or (at your option) any later version. 9 * 10 * This library is distributed in the hope that it will be useful, 11 * but WITHOUT ANY WARRANTY; without even the implied warranty of 12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 13 * Lesser General Public License for more details. 14 * 15 * You should have received a copy of the GNU Lesser General Public 16 * License along with this library; if not, write to the Free Software 17 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA 18 * 19 * Author: 20 * Julian Andres Klode <jak@jak-linux.org> 21 * 22 */ 23 24 25[CCode (cprefix="ARCHIVE_", lower_case_cprefix="archive_", cheader_filename = "archive.h")] 26namespace Archive { 27 public const int VERSION_NUMBER; 28 public const string VERSION_STRING; 29 public int version_number (); 30 public unowned string version_string (); 31 32 [CCode (instance_pos = 1.9, cname="archive_read_callback")] 33 public delegate ssize_t ReadCallback (Archive archive,[CCode (array_length = false)] out unowned uint8[] buffer); 34 [CCode (instance_pos = 1.9, cname="archive_skip_callback")] 35 public delegate int64_t SkipCallback (Archive archive, int64_t request); 36 [CCode (instance_pos = 1.9, cname="archive_write_callback")] 37 public delegate ssize_t WriteCallback (Archive archive,[CCode (array_length_type = "size_t")] uint8[] buffer); 38 [CCode (instance_pos = 1.9, cname="archive_open_callback")] 39 public delegate int OpenCallback (Archive archive); 40 41 [CCode (cname="archive_close_callback")] 42 public delegate int CloseCallback (Archive archive); 43 44 // "void (*_progress_func)(void *)" function pointer without typedef. 45 [CCode (has_typedef = false)] 46 public delegate void ExtractProgressCallback (); 47 48 [CCode (cprefix="ARCHIVE_", cname="int", has_type_id = false)] 49 public enum Result { 50 EOF, 51 OK, 52 RETRY, 53 WARN, 54 FAILED 55 } 56 57 // see libarchive/archive.h, l. 218 ff. 58 [CCode (cname="int", has_type_id = false)] 59 public enum Filter { 60 NONE, 61 GZIP, 62 BZIP2, 63 COMPRESS, 64 PROGRAM, 65 LZMA, 66 XZ, 67 UU, 68 RPM, 69 LZIP, 70 LRZIP, 71 LZOP, 72 GRZIP 73 } 74 75 [CCode (cname="int", has_type_id = false)] 76 public enum Format { 77 BASE_MASK, 78 CPIO, 79 CPIO_POSIX, 80 CPIO_BIN_LE, 81 CPIO_BIN_BE, 82 CPIO_SVR4_NOCRC, 83 CPIO_SVR4_CRC, 84 SHAR, 85 SHAR_BASE, 86 SHAR_DUMP, 87 TAR, 88 TAR_USTAR, 89 TAR_PAX_INTERCHANGE, 90 TAR_PAX_RESTRICTED, 91 TAR_GNUTAR, 92 ISO9660, 93 ISO9660_ROCKRIDGE, 94 ZIP, 95 EMPTY, 96 AR, 97 AR_GNU, 98 AR_BSD, 99 MTREE 100 } 101 102 [CCode (cprefix="ARCHIVE_EXTRACT_", cname="int", has_type_id = false)] 103 public enum ExtractFlags { 104 OWNER, 105 PERM, 106 TIME, 107 NO_OVERWRITE, 108 UNLINK, 109 ACL, 110 FFLAGS, 111 XATTR, 112 SECURE_SYMLINKS, 113 SECURE_NODOTDOT, 114 NO_AUTODIR, 115 NO_OVERWRITE_NEWER, 116 SPARSE 117 } 118 119 [SimpleType] 120 [IntegerType (rank = 9)] 121 [CCode (cname="la_int64_t")] 122 public struct int64_t { 123 } 124 125 [Compact] 126 [CCode (cname="struct archive", cprefix="archive_")] 127 public class Archive { 128 public int64_t position_compressed (); 129 public int64_t position_uncompressed (); 130 131 public Format format (); 132 // Filter #0 is the one closest to the format, -1 is a synonym 133 // for the last filter, which is always the pseudo-filter that 134 // wraps the client callbacks. (libarchive/archive.h, l. 955) 135 public Filter filter_code (int filter_no); 136 137 public unowned string compression_name (); 138 public unowned string format_name (); 139 public unowned string filter_name (int filter_no = 0); 140 141 public int filter_count (); 142 public int file_count (); 143 144 public int errno (); 145 public unowned string error_string (); 146 public void clear_error (); 147 public void set_error (int err, string fmt, ...); 148 public void copy_error (Archive src); 149 } 150 151 152 [Compact] 153 [CCode (cname="struct archive", free_function="archive_read_free")] 154 public class Read : Archive { 155 public Read (); 156 public Result support_filter_all (); 157 public Result support_filter_bzip2 (); 158 public Result support_filter_compress (); 159 public Result support_filter_gzip (); 160 public Result support_filter_grzip (); 161 public Result support_filter_lrzip (); 162 public Result support_filter_lzip (); 163 public Result support_filter_lzma (); 164 public Result support_filter_lzop (); 165 public Result support_filter_none (); 166 public Result support_filter_program (string command); 167 // TODO support_filter_program_signature (string, const void *, size_t) 168 public Result support_filter_rpm (); 169 public Result support_filter_uu (); 170 public Result support_filter_xz (); 171 public Result support_format_7zip (); 172 public Result support_format_all (); 173 public Result support_format_ar (); 174 public Result support_format_by_code (Format format_code); 175 public Result support_format_cab (); 176 public Result support_format_cpio (); 177 public Result support_format_empty (); 178 public Result support_format_gnutar (); 179 public Result support_format_iso9660 (); 180 public Result support_format_lha (); 181 public Result support_format_mtree (); 182 public Result support_format_rar (); 183 public Result support_format_raw (); 184 public Result support_format_tar (); 185 public Result support_format_xar (); 186 public Result support_format_zip (); 187 public Result support_format_zip_streamable (); 188 public Result support_format_zip_seekable (); 189 190 public Result set_format (Format format_code); 191 public Result append_filter (Filter filter_code); 192 public Result append_filter_program (string cmd); 193 // TODO append_filter_program_signature (string, const void *, size_t); 194 195 public Result open ( 196 [CCode (delegate_target_pos = 0.9)] OpenCallback ocb, 197 [CCode (delegate_target_pos = 0.9)] ReadCallback rcb, 198 [CCode (delegate_target_pos = 0.9)] CloseCallback ccb 199 ); 200 201 public Result open2 ( 202 [CCode (delegate_target_pos = 0.9)] OpenCallback ocb, 203 [CCode (delegate_target_pos = 0.9)] ReadCallback rcb, 204 [CCode (delegate_target_pos = 0.9)] SkipCallback scb, 205 [CCode (delegate_target_pos = 0.9)] CloseCallback ccb 206 ); 207 208 public Result open_filename (string filename, size_t block_size); 209 public Result open_memory ([CCode (array_length_type = "size_t")] uint8[] buffer); 210 public Result open_fd (int fd, size_t block_size); 211#if POSIX 212 public Result open_FILE (Posix.FILE file); 213#else 214 public Result open_FILE (GLib.FileStream file); 215#endif 216 public Result next_header (out unowned Entry entry); 217 public int64_t header_position (); 218 219 [CCode (cname="archive_read_data")] 220 public ssize_t read_data ([CCode (array_length_type = "size_t")] uint8[] buffer); 221 [CCode (cname="archive_read_data_block")] 222 public Result read_data_block ([CCode (array_length_type = "size_t")] out unowned uint8[] buffer, out int64_t offset); 223 [CCode (cname="archive_read_data_skip")] 224 public Result read_data_skip (); 225 [CCode (cname="archive_read_data_into_fd")] 226 public Result read_data_into_fd (int fd); 227 228 public Result extract (Entry entry, ExtractFlags? flags=0); 229 public Result extract2 (Entry entry, Write dest); 230 public void extract_set_progress_callback (ExtractProgressCallback cb); 231 public void extract_set_skip_file (int64_t dev, int64_t ino); 232 public Result close (); 233 } 234 235 [Compact] 236 [CCode (cname = "struct archive", free_function="archive_read_free")] 237 public class ReadDisk : Read { 238 public ReadDisk (); 239 public Result set_symlink_logical (); 240 public Result set_symlink_physical (); 241 public Result set_symlink_hybrid (); 242 public Result entry_from_file (Entry entry, int fd, Posix.Stat stat); 243 public unowned string gname (int64_t gid); 244 public unowned string uname (int64_t uid); 245 public Result set_standard_lookup (); 246 247 // HACK, they have no name in C. May not work correctly. 248 [CCode (instance_pos = 0, cname="void")] 249 public delegate unowned string GNameLookup (int64_t gid); 250 [CCode (instance_pos = 0, cname="void")] 251 public delegate unowned string UNameLookup (int64_t uid); 252 [CCode (instance_pos = 0, cname="void")] 253 public delegate void Cleanup (); 254 255 public Result set_gname_lookup ( 256 GNameLookup lookup, 257 Cleanup? cleanup = null 258 ); 259 260 public Result set_uname_lookup ( 261 UNameLookup lookup, 262 Cleanup? cleanup = null 263 ); 264 } 265 266 [CCode (cname = "struct archive", free_function="archive_write_free")] 267 public class Write : Archive { 268 public Write (); 269 public Result add_filter (Filter filter_code); 270 public Result add_filter_by_name (string name); 271 public Result add_filter_b64encode (); 272 public Result add_filter_bzip2 (); 273 public Result add_filter_compress (); 274 public Result add_filter_grzip (); 275 public Result add_filter_gzip (); 276 public Result add_filter_lrzip (); 277 public Result add_filter_lzip (); 278 public Result add_filter_lzma (); 279 public Result add_filter_lzop (); 280 public Result add_filter_none (); 281 public Result add_filter_program (string cmd); 282 public Result add_filter_uuencode (); 283 public Result add_filter_xz (); 284 public Result set_format (Format format); 285 public Result set_format_by_name (string name); 286 public Result set_format_7zip (); 287 public Result set_format_ar_bsd (); 288 public Result set_format_ar_svr4 (); 289 public Result set_format_cpio (); 290 public Result set_format_cpio_newc (); 291 public Result set_format_gnutar (); 292 public Result set_format_iso9660 (); 293 public Result set_format_mtree (); 294 public Result set_format_mtree_classic (); 295 public Result set_format_pax (); 296 public Result set_format_pax_restricted (); 297 public Result set_format_raw (); 298 public Result set_format_shar (); 299 public Result set_format_shar_dump (); 300 public Result set_format_ustar (); 301 public Result set_format_v7tar (); 302 public Result set_format_xar (); 303 public Result set_format_zip (); 304 305 public Result set_bytes_per_block (int bytes_per_block); 306 public int get_bytes_per_block (); 307 public Result set_bytes_in_last_block (int bytes_in_last_block); 308 public int get_bytes_in_last_block (); 309 public Result set_skip_file (int64_t dev, int64_t ino); 310 311 public Result open ( 312 [CCode (delegate_target_pos = 0.9)] OpenCallback ocb, 313 [CCode (delegate_target_pos = 0.9)] WriteCallback rcb, 314 [CCode (delegate_target_pos = 0.9)] CloseCallback ccb 315 ); 316 public Result open_fd (int fd); 317 public Result open_filename (string filename); 318#if POSIX 319 public Result open_FILE (Posix.FILE file); 320#else 321 public Result open_FILE (GLib.FileStream file); 322#endif 323 public Result open_memory ([CCode (array_length_type = "size_t")] uint8[] buffer, out size_t used); 324 325 [CCode (cname="archive_write_header")] 326 public Result write_header (Entry entry); 327 [CCode (cname="archive_write_data")] 328 public ssize_t write_data ([CCode (array_length_type = "size_t")] uint8[] data); 329 [CCode (cname="archive_write_data_block")] 330 public ssize_t write_data_block ([CCode (array_length_type = "size_t")] uint8[] data, int64_t offset); 331 332 public Result finish_entry (); 333 public Result close (); 334 } 335 336 [Compact] 337 [CCode (cname = "struct archive", free_function="archive_write_free")] 338 public class WriteDisk : Write { 339 public WriteDisk (); 340 341 public Result set_skip_file (int64_t dev, int64_t ino); 342 public Result set_options (ExtractFlags flags); 343 public Result set_standard_lookup (); 344 345 // "la_int64_t (*)(void *, const char *, la_int64_t)" 346 [CCode (has_typedef = false, instance_pos = 0)] 347 public delegate int64_t GroupLookup (string group, int64_t gid); 348 // "la_int64_t (*)(void *, const char *, la_int64_t)" 349 [CCode (has_typedef = false, instance_pos = 0)] 350 public delegate int64_t UserLookup (string user, int64_t uid); 351 // "void (*)(void *)" 352 [CCode (has_typedef = false, instance_pos = 0)] 353 public delegate void Cleanup (); 354 355 public Result set_group_lookup ( 356 [CCode (delegate_target_pos = 0.9) ] GroupLookup lookup, 357 [CCode (delegate_target_pos = 0.9) ] Cleanup? cleanup = null 358 ); 359 360 public Result set_user_lookup ( 361 [CCode (delegate_target_pos = 0.9) ] UserLookup lookup, 362 [CCode (delegate_target_pos = 0.9) ] Cleanup? cleanup = null 363 ); 364 } 365 366 [SimpleType] 367 [CCode (cheader_filename = "archive_entry.h", cname = "__LA_MODE_T", has_type_id = false)] 368 [IntegerType (rank = 9)] 369 public struct FileMode : Posix.mode_t { 370 } 371 372 [CCode (cheader_filename = "archive_entry.h", cprefix = "AE_", cname = "__LA_MODE_T", has_type_id = false)] 373 public enum FileType { 374 IFMT, 375 IFREG, 376 IFLNK, 377 IFSOCK, 378 IFCHR, 379 IFBLK, 380 IFDIR, 381 IFIFO 382 } 383 384 [Compact] 385 [CCode (cname = "struct archive_entry", cheader_filename = "archive_entry.h")] 386 public class Entry { 387 [CCode (cname="archive_entry_new2")] 388 public Entry (Archive? archive = null); 389 public time_t atime (); 390 public long atime_nsec (); 391 public bool atime_is_set (); 392 public time_t birthtime (); 393 public long birthtime_nsec (); 394 public bool birthtime_is_set (); 395 public time_t ctime (); 396 public long ctime_nsec (); 397 public bool ctime_is_set (); 398 public int64_t dev (); 399 public int64_t devmajor (); 400 public int64_t devminor (); 401 public FileType filetype (); 402 public unowned string fflags_text (); 403 public int64_t gid (); 404 public unowned string gname (); 405 public unowned string hardlink (); 406 public int64_t ino (); 407 public FileMode mode (); 408 public time_t mtime (); 409 public long mtime_nsec (); 410 public bool mtime_is_set (); 411 public uint nlink (); 412 public unowned string pathname (); 413 public FileMode perm (); 414 public int64_t rdev (); 415 public int64_t rdevmajor (); 416 public int64_t rdevminor (); 417 public unowned string sourcepath (); 418 public int64_t size (); 419 public bool size_is_set (); 420 public unowned string strmode (); 421 public unowned string symlink (); 422 public int64_t uid (); 423 public unowned string uname (); 424 public void set_atime (time_t atime, long blah); 425 public void unset_atime (); 426 public void set_birthtime (time_t birthtime, long blah); 427 public void unset_birthtime (); 428 public void set_ctime (time_t atime, long blah); 429 public void unset_ctime (); 430 public void set_dev (int64_t dev); 431 public void set_devmajor (int64_t major); 432 public void set_devminor (int64_t major); 433 public void set_filetype (FileType filetype); 434 public void set_fflags (ulong set, ulong clear); 435 public unowned string copy_fflags_text (string text); 436 public void set_gid (int64_t gid); 437 public void set_gname (string gname); 438 public Result update_gname_utf8 (string gname); 439 public void set_hardlink (string link); 440 public void set_ino (ulong ino); 441 public void set_link (string link); 442 public Result update_link_utf8 (string link); 443 public void set_mode (FileMode mode); 444 public void set_mtime (time_t mtime, long blah); 445 public void unset_mtime (); 446 public void set_nlink (uint nlink); 447 public void set_pathname (string pathname); 448 public Result update_pathname_utf8 (string pathname); 449 public void set_perm (FileMode mode); 450 public void set_rdev (int64_t dev); 451 public void set_rdevmajor (int64_t devmajor); 452 public void set_rdevminor (int64_t devminor); 453 public void set_size (int64_t size); 454 public void unset_size (); 455 public void copy_sourcepath (string sourcepath); 456 public void set_symlink (string symlink); 457 public void set_uid (int64_t uid); 458 public void set_uname (string uname); 459 public Result update_uname_utf8 (string uname); 460 461 public unowned Posix.Stat stat (); 462 public void copy_stat (Posix.Stat stat); 463 464 public unowned Entry clear (); 465 public Entry clone (); 466 467 public void xattr_clear(); 468 public void xattr_add_entry(string name, void* value, size_t size); 469 public int xattr_count(); 470 public Result xattr_reset(); 471 public Result xattr_next(out unowned string name, out void* value, out size_t size); 472 473 [Compact] 474 public class LinkResolver { 475 public LinkResolver (); 476 public void set_strategy (Format format_code); 477 public void linkify (Entry a, Entry b); 478 } 479 } 480} 481