diff options
author | Tim Kientzle <kientzle@FreeBSD.org> | 2009-03-05 21:18:10 +0000 |
---|---|---|
committer | Tim Kientzle <kientzle@FreeBSD.org> | 2009-03-05 21:18:10 +0000 |
commit | 341f2011d8209aa03dd147ffcaee6669297effbc (patch) | |
tree | 3eca98ea42fcab63540b06f290e12fe13d45fafc | |
parent | 2ee8325f42c08ba86267361d71817b035fc3d1e0 (diff) |
Notes
-rw-r--r-- | lib/libarchive/archive_private.h | 4 | ||||
-rw-r--r-- | lib/libarchive/archive_read.c | 29 | ||||
-rw-r--r-- | lib/libarchive/archive_virtual.c | 18 | ||||
-rw-r--r-- | lib/libarchive/archive_write.c | 4 | ||||
-rw-r--r-- | lib/libarchive/archive_write_disk.c | 4 |
5 files changed, 42 insertions, 17 deletions
diff --git a/lib/libarchive/archive_private.h b/lib/libarchive/archive_private.h index 81eb49cbd66c..658c833ecdc1 100644 --- a/lib/libarchive/archive_private.h +++ b/lib/libarchive/archive_private.h @@ -52,8 +52,8 @@ #define ARCHIVE_STATE_FATAL 0x8000U struct archive_vtable { - int (*archive_write_close)(struct archive *); - int (*archive_write_finish)(struct archive *); + int (*archive_close)(struct archive *); + int (*archive_finish)(struct archive *); int (*archive_write_header)(struct archive *, struct archive_entry *); int (*archive_write_finish_entry)(struct archive *); diff --git a/lib/libarchive/archive_read.c b/lib/libarchive/archive_read.c index 4e307ae6367e..dcf174635e64 100644 --- a/lib/libarchive/archive_read.c +++ b/lib/libarchive/archive_read.c @@ -57,6 +57,22 @@ __FBSDID("$FreeBSD$"); static int build_stream(struct archive_read *); static int choose_format(struct archive_read *); +static struct archive_vtable *archive_read_vtable(void); +static int _archive_read_close(struct archive *); +static int _archive_read_finish(struct archive *); + +static struct archive_vtable * +archive_read_vtable(void) +{ + static struct archive_vtable av; + static int inited = 0; + + if (!inited) { + av.archive_finish = _archive_read_finish; + av.archive_close = _archive_read_close; + } + return (&av); +} /* * Allocate, initialize and return a struct archive object. @@ -74,6 +90,7 @@ archive_read_new(void) a->archive.state = ARCHIVE_STATE_NEW; a->entry = archive_entry_new(); + a->archive.vtable = archive_read_vtable(); return (&a->archive); } @@ -134,6 +151,7 @@ client_close_proxy(struct archive_read_filter *self) if (self->archive->client.closer != NULL) r = (self->archive->client.closer)((struct archive *)self->archive, self->data); + self->data = NULL; return (r); } @@ -556,8 +574,8 @@ archive_read_data_block(struct archive *_a, * Don't assume we actually read anything or performed any non-trivial * initialization. */ -int -archive_read_close(struct archive *_a) +static int +_archive_read_close(struct archive *_a) { struct archive_read *a = (struct archive_read *)_a; int r = ARCHIVE_OK, r1 = ARCHIVE_OK; @@ -602,13 +620,8 @@ archive_read_close(struct archive *_a) /* * Release memory and other resources. */ -#if ARCHIVE_API_VERSION > 1 int -#else -/* Temporarily allow library to compile with either 1.x or 2.0 API. */ -void -#endif -archive_read_finish(struct archive *_a) +_archive_read_finish(struct archive *_a) { struct archive_read *a = (struct archive_read *)_a; int i; diff --git a/lib/libarchive/archive_virtual.c b/lib/libarchive/archive_virtual.c index 6b7b12e9505d..214e381710c6 100644 --- a/lib/libarchive/archive_virtual.c +++ b/lib/libarchive/archive_virtual.c @@ -33,25 +33,37 @@ __FBSDID("$FreeBSD$"); int archive_write_close(struct archive *a) { - return ((a->vtable->archive_write_close)(a)); + return ((a->vtable->archive_close)(a)); +} + +int +archive_read_close(struct archive *a) +{ + return ((a->vtable->archive_close)(a)); } #if ARCHIVE_API_VERSION > 1 int archive_write_finish(struct archive *a) { - return ((a->vtable->archive_write_finish)(a)); + return ((a->vtable->archive_finish)(a)); } #else /* Temporarily allow library to compile with either 1.x or 2.0 API. */ void archive_write_finish(struct archive *a) { - (void)(a->vtable->archive_write_finish)(a); + (void)(a->vtable->archive_finish)(a); } #endif int +archive_read_finish(struct archive *a) +{ + return ((a->vtable->archive_finish)(a)); +} + +int archive_write_header(struct archive *a, struct archive_entry *entry) { return ((a->vtable->archive_write_header)(a, entry)); diff --git a/lib/libarchive/archive_write.c b/lib/libarchive/archive_write.c index ea0976365963..f1c3d23697e5 100644 --- a/lib/libarchive/archive_write.c +++ b/lib/libarchive/archive_write.c @@ -72,8 +72,8 @@ archive_write_vtable(void) static int inited = 0; if (!inited) { - av.archive_write_close = _archive_write_close; - av.archive_write_finish = _archive_write_finish; + av.archive_close = _archive_write_close; + av.archive_finish = _archive_write_finish; av.archive_write_header = _archive_write_header; av.archive_write_finish_entry = _archive_write_finish_entry; av.archive_write_data = _archive_write_data; diff --git a/lib/libarchive/archive_write_disk.c b/lib/libarchive/archive_write_disk.c index a1eaf280ed36..a6b7ffc33a65 100644 --- a/lib/libarchive/archive_write_disk.c +++ b/lib/libarchive/archive_write_disk.c @@ -278,8 +278,8 @@ archive_write_disk_vtable(void) static int inited = 0; if (!inited) { - av.archive_write_close = _archive_write_close; - av.archive_write_finish = _archive_write_finish; + av.archive_close = _archive_write_close; + av.archive_finish = _archive_write_finish; av.archive_write_header = _archive_write_header; av.archive_write_finish_entry = _archive_write_finish_entry; av.archive_write_data = _archive_write_data; |