1
0
mirror of https://git.FreeBSD.org/src.git synced 2024-12-19 10:53:58 +00:00

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...)
This commit is contained in:
Tim Kientzle 2009-03-05 21:18:10 +00:00
parent 2ee8325f42
commit 341f2011d8
Notes: svn2git 2020-12-20 02:59:44 +00:00
svn path=/head/; revision=189424
5 changed files with 42 additions and 17 deletions

View File

@ -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 *);

View File

@ -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;

View File

@ -33,24 +33,36 @@ __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)
{

View File

@ -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;

View File

@ -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;