From owner-svn-src-all@FreeBSD.ORG Thu Mar 5 21:18:11 2009 Return-Path: Delivered-To: svn-src-all@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 23DFA106566B; Thu, 5 Mar 2009 21:18:11 +0000 (UTC) (envelope-from kientzle@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id CAB708FC17; Thu, 5 Mar 2009 21:18:10 +0000 (UTC) (envelope-from kientzle@FreeBSD.org) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.3/8.14.3) with ESMTP id n25LIAGr099477; Thu, 5 Mar 2009 21:18:10 GMT (envelope-from kientzle@svn.freebsd.org) Received: (from kientzle@localhost) by svn.freebsd.org (8.14.3/8.14.3/Submit) id n25LIASs099472; Thu, 5 Mar 2009 21:18:10 GMT (envelope-from kientzle@svn.freebsd.org) Message-Id: <200903052118.n25LIASs099472@svn.freebsd.org> From: Tim Kientzle Date: Thu, 5 Mar 2009 21:18:10 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r189424 - head/lib/libarchive X-BeenThere: svn-src-all@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the entire src tree \(except for " user" and " projects" \)" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 05 Mar 2009 21:18:12 -0000 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;