1 /* libarchive.vapi - Bindings for libarchive(3) (version 2).
3 * Copyright (C) 2009 Julian Andres Klode <jak@jak-linux.org>
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.
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.
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
20 * Julian Andres Klode <jak@jak-linux.org>
25 [CCode (cprefix="ARCHIVE_", lower_case_cprefix="archive_", cheader_filename = "archive.h")]
27 public const int VERSION_NUMBER;
28 public const string VERSION_STRING;
29 public int version_number ();
30 public unowned string version_string ();
32 [CCode (instance_pos = 1.9, cname="archive_read_callback")]
33 public delegate ssize_t ReadCallback (Archive archive, out void* buffer);
34 [CCode (instance_pos = 1.9, cname="archive_skip_callback")]
35 public delegate Posix.off_t SkipCallback (Archive archive, Posix.off_t request);
36 [CCode (instance_pos = 1.9, cname="archive_write_callback")]
37 public delegate ssize_t WriteCallback (Archive archive, void* buffer, size_t length);
38 [CCode (instance_pos = 1.9, cname="archive_open_callback")]
39 public delegate int OpenCallback (Archive archive);
41 [CCode (cname="archive_close_callback")]
42 public delegate int CloseCallback (Archive archive);
44 // In reality a "void (*_progress_func)(void *)" parameter without name.
45 public delegate void ExtractProgressCallback ();
47 [CCode (cprefix="ARCHIVE_", cname="int", has_type_id = false)]
56 // see libarchive/archive.h, l. 218 ff.
57 [CCode (cname="int", has_type_id = false)]
74 [CCode (cname="int", has_type_id = false)]
75 [Version (deprecated_since="3.0", replacement="Filter")]
76 public enum Compression {
90 [CCode (cname="int", has_type_id = false)]
117 [CCode (cprefix="ARCHIVE_EXTRACT_", cname="int", has_type_id = false)]
118 public enum ExtractFlags {
135 [CCode (cname="struct archive", cprefix="archive_")]
136 public class Archive {
137 public int64 position_compressed ();
138 public int64 position_uncompressed ();
140 [Version (deprecated_since="3.0", replacement="Archive.filter_code (0)")]
141 public Compression compression ();
142 public Format format ();
143 // Filter #0 is the one closest to the format, -1 is a synonym
144 // for the last filter, which is always the pseudo-filter that
145 // wraps the client callbacks. (libarchive/archive.h, l. 955)
146 public Filter filter_code (int filter_no);
148 public unowned string compression_name ();
149 public unowned string format_name ();
150 public unowned string filter_name (int filter_no);
152 public int filter_count ();
153 public int file_count ();
156 public unowned string error_string ();
157 public void clear_error ();
158 public void set_error (int err, string fmt, ...);
159 public void copy_error (Archive src);
164 [CCode (cname="struct archive", free_function="archive_read_finish")]
165 public class Read : Archive {
167 // see https://github.com/libarchive/libarchive/wiki/Libarchive3#functions-that-are-being-renamed
168 [Version (deprecated_since="3.0", replacement="Archive.Read.support_filter_all ()")]
169 public Result support_compression_all ();
170 [Version (deprecated_since="3.0", replacement="Archive.Read.support_filter_bzip2 ()")]
171 public Result support_compression_bzip2 ();
172 [Version (deprecated_since="3.0", replacement="Archive.Read.support_filter_compress ()")]
173 public Result support_compression_compress ();
174 [Version (deprecated_since="3.0", replacement="Archive.Read.support_filter_gzip ()")]
175 public Result support_compression_gzip ();
176 [Version (deprecated_since="3.0", replacement="Archive.Read.support_filter_lzma ()")]
177 public Result support_compression_lzma ();
178 [Version (deprecated_since="3.0", replacement="Archive.Read.support_filter_none ()")]
179 public Result support_compression_none ();
180 [Version (deprecated_since="3.0", replacement="Archive.Read.support_filter_program (string command)")]
181 public Result support_compression_program (string command);
182 public Result support_filter_all ();
183 public Result support_filter_bzip2 ();
184 public Result support_filter_compress ();
185 public Result support_filter_gzip ();
186 public Result support_filter_grzip ();
187 public Result support_filter_lrzip ();
188 public Result support_filter_lzip ();
189 public Result support_filter_lzma ();
190 public Result support_filter_lzop ();
191 public Result support_filter_none ();
192 public Result support_filter_program (string command);
193 // TODO support_filter_program_signature (string, const void *, size_t)
194 public Result support_filter_rpm ();
195 public Result support_filter_uu ();
196 public Result support_filter_xz ();
197 public Result support_format_7zip ();
198 public Result support_format_all ();
199 public Result support_format_ar ();
200 public Result support_format_by_code (Format format_code);
201 public Result support_format_cab ();
202 public Result support_format_cpio ();
203 public Result support_format_empty ();
204 public Result support_format_gnutar ();
205 public Result support_format_iso9660 ();
206 public Result support_format_lha ();
207 public Result support_format_mtree ();
208 public Result support_format_rar ();
209 public Result support_format_raw ();
210 public Result support_format_tar ();
211 public Result support_format_xar ();
212 public Result support_format_zip ();
213 public Result support_format_zip_streamable ();
214 public Result support_format_zip_seekable ();
216 public Result set_format (Format format_code);
217 public Result append_filter (Filter filter_code);
218 public Result append_filter_program (string cmd);
219 // TODO append_filter_program_signature (string, const void *, size_t);
222 [CCode (delegate_target_pos = 0.9)] OpenCallback ocb,
223 [CCode (delegate_target_pos = 0.9)] ReadCallback rcb,
224 [CCode (delegate_target_pos = 0.9)] CloseCallback ccb
227 public Result open2 (
228 [CCode (delegate_target_pos = 0.9)] OpenCallback ocb,
229 [CCode (delegate_target_pos = 0.9)] ReadCallback rcb,
230 [CCode (delegate_target_pos = 0.9)] SkipCallback scb,
231 [CCode (delegate_target_pos = 0.9)] CloseCallback ccb
234 public Result open_filename (string filename, size_t _block_size);
235 public Result open_memory (void* buff, size_t size);
236 public Result open_fd (int fd, size_t block_size);
237 public Result open_FILE (GLib.FileStream file);
238 public Result next_header (out unowned Entry entry);
239 public int64 header_position ();
241 [CCode (cname="archive_read_data")]
242 public ssize_t read_data (void* buffer, size_t size);
243 [CCode (cname="archive_read_data_block")]
244 public Result read_data_block (out void* buff, out size_t size, out Posix.off_t offset);
245 [CCode (cname="archive_read_data_skip")]
246 public Result read_data_skip ();
247 [CCode (cname="archive_read_data_into_buffer")]
248 public Result read_data_into_buffer (void* buffer, ssize_t len);
249 [CCode (cname="archive_read_data_into_fd")]
250 public Result read_data_into_fd (int fd);
252 public Result extract (Entry entry, ExtractFlags? flags=0);
253 public Result extract2 (Entry entry, Write dest);
254 public void extract_set_progress_callback (ExtractProgressCallback cb);
255 public void extract_set_skip_file (Posix.dev_t dev, Posix.ino_t ino);
256 public Result close ();
260 [CCode (cname = "struct archive", free_function="archive_read_finish")]
261 public class ReadDisk : Read {
263 public Result set_symlink_logical ();
264 public Result set_symlink_physical ();
265 public Result set_symlink_hybrid ();
266 public Result entry_from_file (Entry entry, int fd, Posix.Stat stat);
267 public unowned string gname (Posix.gid_t gid);
268 public unowned string uname (Posix.uid_t uid);
269 public Result set_standard_lookup ();
271 // HACK, they have no name in C. May not work correctly.
272 [CCode (instance_pos = 0, cname="void")]
273 public delegate unowned string GNameLookup (Posix.gid_t gid);
274 [CCode (instance_pos = 0, cname="void")]
275 public delegate unowned string UNameLookup (Posix.uid_t uid);
276 [CCode (instance_pos = 0, cname="void")]
277 public delegate void Cleanup ();
279 public Result set_gname_lookup (
281 Cleanup? cleanup = null
284 public Result set_uname_lookup (
286 Cleanup? cleanup = null
290 [CCode (cname = "struct archive", free_function="archive_write_finish")]
291 public class Write : Archive {
293 // see https://github.com/libarchive/libarchive/wiki/Libarchive3#functions-that-are-being-renamed
294 [Version (deprecated_since="3.0", replacement="Archive.Write.add_filter_bzip2 ()")]
295 public Result set_compression_bzip2 ();
296 [Version (deprecated_since="3.0", replacement="Archive.Write.add_filter_compress ()")]
297 public Result set_compression_compress ();
298 [Version (deprecated_since="3.0", replacement="Archive.Write.add_filter_gzip ()")]
299 public Result set_compression_gzip ();
300 [Version (deprecated_since="3.0", replacement="Archive.Write.add_filter_lzma ()")]
301 public Result set_compression_lzma ();
302 [Version (deprecated_since="3.0", replacement="Archive.Write.add_filter_none ()")]
303 public Result set_compression_none ();
304 public Result set_compression_program (string cmd);
305 public Result add_filter (Filter filter_code);
306 public Result add_filter_by_name (string name);
307 public Result add_filter_b64encode ();
308 public Result add_filter_bzip2 ();
309 public Result add_filter_compress ();
310 public Result add_filter_grzip ();
311 public Result add_filter_gzip ();
312 public Result add_filter_lrzip ();
313 public Result add_filter_lzip ();
314 public Result add_filter_lzma ();
315 public Result add_filter_lzop ();
316 public Result add_filter_none ();
317 public Result add_filter_program (string cmd);
318 public Result add_filter_uuencode ();
319 public Result add_filter_xz ();
320 public Result set_format (Format format);
321 public Result set_format_by_name (string name);
322 public Result set_format_7zip ();
323 public Result set_format_ar_bsd ();
324 public Result set_format_ar_svr4 ();
325 public Result set_format_cpio ();
326 public Result set_format_cpio_newc ();
327 public Result set_format_gnutar ();
328 public Result set_format_iso9660 ();
329 public Result set_format_mtree ();
330 public Result set_format_mtree_classic ();
331 public Result set_format_pax ();
332 public Result set_format_pax_restricted ();
333 public Result set_format_raw ();
334 public Result set_format_shar ();
335 public Result set_format_shar_dump ();
336 public Result set_format_ustar ();
337 public Result set_format_v7tar ();
338 public Result set_format_xar ();
339 public Result set_format_zip ();
341 public Result set_bytes_per_block (int bytes_per_block);
342 public int get_bytes_per_block ();
343 public Result set_bytes_in_last_block (int bytes_in_last_block);
344 public int get_bytes_in_last_block ();
345 public Result set_skip_file (Posix.dev_t dev, Posix.ino_t ino);
348 [CCode (delegate_target_pos = 0.9)] OpenCallback ocb,
349 [CCode (delegate_target_pos = 0.9)] WriteCallback rcb,
350 [CCode (delegate_target_pos = 0.9)] CloseCallback ccb
352 public Result open_fd (int fd);
353 public Result open_filename (string filename);
354 public Result open_FILE (GLib.FileStream file);
355 public Result open_memory (void* buffer, size_t buff_size, out size_t used);
357 [CCode (cname="archive_write_header")]
358 public Result write_header (Entry entry);
359 [CCode (cname="archive_write_data")]
360 public ssize_t write_data (void* data, size_t size);
361 [CCode (cname="archive_write_data_block")]
362 public ssize_t write_data_block (void* data, size_t size, Posix.off_t offset);
364 public Result finish_entry ();
365 public Result close ();
369 [CCode (cname = "struct archive", free_function="archive_write_finish")]
370 public class WriteDisk : Write {
373 public Result set_skip_file (Posix.dev_t dev, Posix.ino_t ino);
374 public Result set_options (ExtractFlags flags);
375 public Result set_standard_lookup ();
377 // HACK, they have no name in C. May not work correctly.
378 [CCode (instance_pos = 0, cname="gid_t")]
379 public delegate Posix.gid_t GroupLookup (string group, Posix.gid_t gid);
380 [CCode (instance_pos = 0, cname="uid_t")]
381 public delegate Posix.uid_t UserLookup (string user, Posix.uid_t uid);
382 [CCode (instance_pos = 0, cname="void")]
383 public delegate void Cleanup ();
385 public Result set_group_lookup (
386 [CCode (delegate_target_pos = 0.9) ] GroupLookup lookup,
387 [CCode (delegate_target_pos = 0.9) ] Cleanup? cleanup = null
390 public Result set_user_lookup (
391 [CCode (delegate_target_pos = 0.9) ] UserLookup lookup,
392 [CCode (delegate_target_pos = 0.9) ] Cleanup? cleanup = null
397 [CCode (cname = "struct archive_entry", cheader_filename = "archive_entry.h")]
400 public time_t atime ();
401 public long atime_nsec ();
402 public bool atime_is_set ();
403 public time_t birthtime ();
404 public long birthtime_nsec ();
405 public bool birthtime_is_set ();
406 public time_t ctime ();
407 public long ctime_nsec ();
408 public bool ctime_is_set ();
409 public Posix.dev_t dev ();
410 public Posix.dev_t devmajor ();
411 public Posix.dev_t devminor ();
412 public Posix.mode_t filetype ();
413 public unowned string fflags_text ();
414 public Posix.gid_t gid ();
415 public unowned string gname ();
416 public unowned string hardlink ();
417 public Posix.ino_t ino ();
418 public Posix.mode_t mode ();
419 public time_t mtime ();
420 public long mtime_nsec ();
421 public bool mtime_is_set ();
422 public uint nlink ();
423 public unowned string pathname ();
424 public Posix.dev_t rdev ();
425 public Posix.dev_t rdevmajor ();
426 public Posix.dev_t rdevminor ();
427 public unowned string sourcepath ();
428 public int64 size ();
429 public bool size_is_set ();
430 public unowned string strmode ();
431 public unowned string symlink ();
432 public Posix.uid_t uid ();
433 public unowned string uname ();
434 public void set_atime (time_t atime, long blah);
435 public void unset_atime ();
436 public void set_birthtime (time_t birthtime, long blah);
437 public void unset_birthtime ();
438 public void set_ctime (time_t atime, long blah);
439 public void unset_ctime ();
440 public void set_dev (Posix.dev_t dev);
441 public void set_devmajor (Posix.dev_t major);
442 public void set_devminor (Posix.dev_t major);
443 public void set_filetype (uint filetype);
444 public void set_fflags (ulong set, ulong clear);
445 public unowned string copy_fflags_text (string text);
446 public void set_gid (Posix.gid_t gid);
447 public void set_gname (string gname);
448 public Result update_gname_utf8 (string gname);
449 public void set_hardlink (string link);
450 public void set_ino (ulong ino);
451 public void set_link (string link);
452 public Result update_link_utf8 (string link);
453 public void set_mode (Posix.mode_t mode);
454 public void set_mtime (time_t mtime, long blah);
455 public void unset_mtime ();
456 public void set_nlink (uint nlink);
457 public void set_pathname (string pathname);
458 public Result update_pathname_utf8 (string pathname);
459 public void set_perm (Posix.mode_t mode);
460 public void set_rdev (Posix.dev_t dev);
461 public void set_rdevmajor (Posix.dev_t devmajor);
462 public void set_rdevminor (Posix.dev_t devminor);
463 public void set_size (int64 size);
464 public void unset_size ();
465 public void copy_sourcepath (string sourcepath);
466 public void set_symlink (string symlink);
467 public void set_uid (Posix.uid_t uid);
468 public void set_uname (string uname);
469 public Result update_uname_utf8 (string uname);
471 public unowned Posix.Stat stat ();
472 public void copy_stat (Posix.Stat stat);
474 public unowned Entry clear ();
475 public Entry clone ();
477 public void xattr_clear();
478 public void xattr_add_entry(string name, void* value, size_t size);
479 public int xattr_count();
480 public Result xattr_reset();
481 public Result xattr_next(out unowned string name, out void* value, out size_t size);
484 public class LinkResolver {
485 public LinkResolver ();
486 public void set_strategy (Format format_code);
487 public void linkify (Entry a, Entry b);