svn commit: r189424 - head/lib/libarchive
Tim Kientzle
kientzle at FreeBSD.org
Thu Mar 5 13:18:12 PST 2009
Author: kientzle
Date: Thu Mar 5 21:18:10 2009
New Revision: 189424
URL: http://svn.freebsd.org/changeset/base/189424
Log:
Merge r390,r391,r392,r397 from libarchive.googlecode.com: Virtualize
"close" and "finish" across both read and write interfaces.
(Someday, "finish" should be renamed to "free" to better reflect
what it actually does...)
Modified:
head/lib/libarchive/archive_private.h
head/lib/libarchive/archive_read.c
head/lib/libarchive/archive_virtual.c
head/lib/libarchive/archive_write.c
head/lib/libarchive/archive_write_disk.c
Modified: head/lib/libarchive/archive_private.h
==============================================================================
--- head/lib/libarchive/archive_private.h Thu Mar 5 19:42:11 2009 (r189423)
+++ head/lib/libarchive/archive_private.h Thu Mar 5 21:18:10 2009 (r189424)
@@ -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 *);
Modified: head/lib/libarchive/archive_read.c
==============================================================================
--- head/lib/libarchive/archive_read.c Thu Mar 5 19:42:11 2009 (r189423)
+++ head/lib/libarchive/archive_read.c Thu Mar 5 21:18:10 2009 (r189424)
@@ -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_f
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 *
* 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;
Modified: head/lib/libarchive/archive_virtual.c
==============================================================================
--- head/lib/libarchive/archive_virtual.c Thu Mar 5 19:42:11 2009 (r189423)
+++ head/lib/libarchive/archive_virtual.c Thu Mar 5 21:18:10 2009 (r189424)
@@ -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));
Modified: head/lib/libarchive/archive_write.c
==============================================================================
--- head/lib/libarchive/archive_write.c Thu Mar 5 19:42:11 2009 (r189423)
+++ head/lib/libarchive/archive_write.c Thu Mar 5 21:18:10 2009 (r189424)
@@ -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;
Modified: head/lib/libarchive/archive_write_disk.c
==============================================================================
--- head/lib/libarchive/archive_write_disk.c Thu Mar 5 19:42:11 2009 (r189423)
+++ head/lib/libarchive/archive_write_disk.c Thu Mar 5 21:18:10 2009 (r189424)
@@ -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;
More information about the svn-src-all
mailing list