109ade360Sjoerg /*-
209ade360Sjoerg * Copyright (c) 2003-2007 Tim Kientzle
309ade360Sjoerg * All rights reserved.
409ade360Sjoerg *
509ade360Sjoerg * Redistribution and use in source and binary forms, with or without
609ade360Sjoerg * modification, are permitted provided that the following conditions
709ade360Sjoerg * are met:
809ade360Sjoerg * 1. Redistributions of source code must retain the above copyright
909ade360Sjoerg * notice, this list of conditions and the following disclaimer.
1009ade360Sjoerg * 2. Redistributions in binary form must reproduce the above copyright
1109ade360Sjoerg * notice, this list of conditions and the following disclaimer in the
1209ade360Sjoerg * documentation and/or other materials provided with the distribution.
1309ade360Sjoerg *
1409ade360Sjoerg * THIS SOFTWARE IS PROVIDED BY THE AUTHOR(S) ``AS IS'' AND ANY EXPRESS OR
1509ade360Sjoerg * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
1609ade360Sjoerg * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
1709ade360Sjoerg * IN NO EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY DIRECT, INDIRECT,
1809ade360Sjoerg * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
1909ade360Sjoerg * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
2009ade360Sjoerg * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
2109ade360Sjoerg * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
2209ade360Sjoerg * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
2309ade360Sjoerg * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
2409ade360Sjoerg */
2509ade360Sjoerg
2609ade360Sjoerg #include "archive_platform.h"
2709ade360Sjoerg
2809ade360Sjoerg #include "archive.h"
2909ade360Sjoerg #include "archive_entry.h"
3009ade360Sjoerg #include "archive_private.h"
3109ade360Sjoerg
3209ade360Sjoerg int
archive_filter_code(struct archive * a,int n)3340b1a6e6Sjoerg archive_filter_code(struct archive *a, int n)
3440b1a6e6Sjoerg {
3540b1a6e6Sjoerg return ((a->vtable->archive_filter_code)(a, n));
3640b1a6e6Sjoerg }
3740b1a6e6Sjoerg
3840b1a6e6Sjoerg int
archive_filter_count(struct archive * a)3940b1a6e6Sjoerg archive_filter_count(struct archive *a)
4040b1a6e6Sjoerg {
4140b1a6e6Sjoerg return ((a->vtable->archive_filter_count)(a));
4240b1a6e6Sjoerg }
4340b1a6e6Sjoerg
4440b1a6e6Sjoerg const char *
archive_filter_name(struct archive * a,int n)4540b1a6e6Sjoerg archive_filter_name(struct archive *a, int n)
4640b1a6e6Sjoerg {
4740b1a6e6Sjoerg return ((a->vtable->archive_filter_name)(a, n));
4840b1a6e6Sjoerg }
4940b1a6e6Sjoerg
50*677d0b48Sjoerg la_int64_t
archive_filter_bytes(struct archive * a,int n)5140b1a6e6Sjoerg archive_filter_bytes(struct archive *a, int n)
5240b1a6e6Sjoerg {
5340b1a6e6Sjoerg return ((a->vtable->archive_filter_bytes)(a, n));
5440b1a6e6Sjoerg }
5540b1a6e6Sjoerg
5640b1a6e6Sjoerg int
archive_free(struct archive * a)5740b1a6e6Sjoerg archive_free(struct archive *a)
5840b1a6e6Sjoerg {
5940b1a6e6Sjoerg if (a == NULL)
6040b1a6e6Sjoerg return (ARCHIVE_OK);
6140b1a6e6Sjoerg return ((a->vtable->archive_free)(a));
6240b1a6e6Sjoerg }
6340b1a6e6Sjoerg
6440b1a6e6Sjoerg int
archive_write_close(struct archive * a)6509ade360Sjoerg archive_write_close(struct archive *a)
6609ade360Sjoerg {
679fde5391Sjoerg return ((a->vtable->archive_close)(a));
689fde5391Sjoerg }
699fde5391Sjoerg
709fde5391Sjoerg int
archive_read_close(struct archive * a)719fde5391Sjoerg archive_read_close(struct archive *a)
729fde5391Sjoerg {
739fde5391Sjoerg return ((a->vtable->archive_close)(a));
7409ade360Sjoerg }
7509ade360Sjoerg
7640b1a6e6Sjoerg int
archive_write_fail(struct archive * a)7740b1a6e6Sjoerg archive_write_fail(struct archive *a)
7840b1a6e6Sjoerg {
7940b1a6e6Sjoerg a->state = ARCHIVE_STATE_FATAL;
8040b1a6e6Sjoerg return a->state;
8140b1a6e6Sjoerg }
8240b1a6e6Sjoerg
8340b1a6e6Sjoerg int
archive_write_free(struct archive * a)8440b1a6e6Sjoerg archive_write_free(struct archive *a)
8540b1a6e6Sjoerg {
8640b1a6e6Sjoerg return archive_free(a);
8740b1a6e6Sjoerg }
8840b1a6e6Sjoerg
8940b1a6e6Sjoerg #if ARCHIVE_VERSION_NUMBER < 4000000
9040b1a6e6Sjoerg /* For backwards compatibility; will be removed with libarchive 4.0. */
9109ade360Sjoerg int
archive_write_finish(struct archive * a)9209ade360Sjoerg archive_write_finish(struct archive *a)
9309ade360Sjoerg {
9440b1a6e6Sjoerg return archive_write_free(a);
9509ade360Sjoerg }
9609ade360Sjoerg #endif
9709ade360Sjoerg
9809ade360Sjoerg int
archive_read_free(struct archive * a)9940b1a6e6Sjoerg archive_read_free(struct archive *a)
10040b1a6e6Sjoerg {
10140b1a6e6Sjoerg return archive_free(a);
10240b1a6e6Sjoerg }
10340b1a6e6Sjoerg
10440b1a6e6Sjoerg #if ARCHIVE_VERSION_NUMBER < 4000000
10540b1a6e6Sjoerg /* For backwards compatibility; will be removed with libarchive 4.0. */
10640b1a6e6Sjoerg int
archive_read_finish(struct archive * a)1079fde5391Sjoerg archive_read_finish(struct archive *a)
1089fde5391Sjoerg {
10940b1a6e6Sjoerg return archive_read_free(a);
1109fde5391Sjoerg }
11140b1a6e6Sjoerg #endif
1129fde5391Sjoerg
1139fde5391Sjoerg int
archive_write_header(struct archive * a,struct archive_entry * entry)11409ade360Sjoerg archive_write_header(struct archive *a, struct archive_entry *entry)
11509ade360Sjoerg {
1169fde5391Sjoerg ++a->file_count;
11709ade360Sjoerg return ((a->vtable->archive_write_header)(a, entry));
11809ade360Sjoerg }
11909ade360Sjoerg
12009ade360Sjoerg int
archive_write_finish_entry(struct archive * a)12109ade360Sjoerg archive_write_finish_entry(struct archive *a)
12209ade360Sjoerg {
12309ade360Sjoerg return ((a->vtable->archive_write_finish_entry)(a));
12409ade360Sjoerg }
12509ade360Sjoerg
126*677d0b48Sjoerg la_ssize_t
archive_write_data(struct archive * a,const void * buff,size_t s)12709ade360Sjoerg archive_write_data(struct archive *a, const void *buff, size_t s)
12809ade360Sjoerg {
12909ade360Sjoerg return ((a->vtable->archive_write_data)(a, buff, s));
13009ade360Sjoerg }
13109ade360Sjoerg
132*677d0b48Sjoerg la_ssize_t
archive_write_data_block(struct archive * a,const void * buff,size_t s,la_int64_t o)133*677d0b48Sjoerg archive_write_data_block(struct archive *a, const void *buff, size_t s,
134*677d0b48Sjoerg la_int64_t o)
13509ade360Sjoerg {
13640b1a6e6Sjoerg if (a->vtable->archive_write_data_block == NULL) {
13740b1a6e6Sjoerg archive_set_error(a, ARCHIVE_ERRNO_MISC,
13840b1a6e6Sjoerg "archive_write_data_block not supported");
13940b1a6e6Sjoerg a->state = ARCHIVE_STATE_FATAL;
14040b1a6e6Sjoerg return (ARCHIVE_FATAL);
14140b1a6e6Sjoerg }
14209ade360Sjoerg return ((a->vtable->archive_write_data_block)(a, buff, s, o));
14309ade360Sjoerg }
14440b1a6e6Sjoerg
14540b1a6e6Sjoerg int
archive_read_next_header(struct archive * a,struct archive_entry ** entry)14640b1a6e6Sjoerg archive_read_next_header(struct archive *a, struct archive_entry **entry)
14740b1a6e6Sjoerg {
14840b1a6e6Sjoerg return ((a->vtable->archive_read_next_header)(a, entry));
14940b1a6e6Sjoerg }
15040b1a6e6Sjoerg
15140b1a6e6Sjoerg int
archive_read_next_header2(struct archive * a,struct archive_entry * entry)15240b1a6e6Sjoerg archive_read_next_header2(struct archive *a, struct archive_entry *entry)
15340b1a6e6Sjoerg {
15440b1a6e6Sjoerg return ((a->vtable->archive_read_next_header2)(a, entry));
15540b1a6e6Sjoerg }
15640b1a6e6Sjoerg
15740b1a6e6Sjoerg int
archive_read_data_block(struct archive * a,const void ** buff,size_t * s,la_int64_t * o)15840b1a6e6Sjoerg archive_read_data_block(struct archive *a,
159*677d0b48Sjoerg const void **buff, size_t *s, la_int64_t *o)
16040b1a6e6Sjoerg {
16140b1a6e6Sjoerg return ((a->vtable->archive_read_data_block)(a, buff, s, o));
16240b1a6e6Sjoerg }
163