Libarchive tweaks to indicate data vs metadata reads and writes.
This commit is contained in:
parent
3debf1340c
commit
4c3f3d5ee2
3 changed files with 40 additions and 3 deletions
|
@ -510,6 +510,14 @@ __LA_DECL int archive_read_set_option(struct archive *_a,
|
||||||
__LA_DECL int archive_read_set_options(struct archive *_a,
|
__LA_DECL int archive_read_set_options(struct archive *_a,
|
||||||
const char *opts);
|
const char *opts);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* This call has meaning inside a read or write client callback.
|
||||||
|
* It returns the metadata flag, which indicates whether the current
|
||||||
|
* request is for a metadata read/write. This allows clients filters
|
||||||
|
* to separately handle/store data and metadata.
|
||||||
|
*/
|
||||||
|
__LA_DECL int archive_request_is_metadata(struct archive *a);
|
||||||
|
|
||||||
/*-
|
/*-
|
||||||
* Convenience function to recreate the current entry (whose header
|
* Convenience function to recreate the current entry (whose header
|
||||||
* has just been read) on disk.
|
* has just been read) on disk.
|
||||||
|
|
|
@ -119,6 +119,14 @@ struct archive {
|
||||||
unsigned current_codepage; /* Current ACP(ANSI CodePage). */
|
unsigned current_codepage; /* Current ACP(ANSI CodePage). */
|
||||||
unsigned current_oemcp; /* Current OEMCP(OEM CodePage). */
|
unsigned current_oemcp; /* Current OEMCP(OEM CodePage). */
|
||||||
struct archive_string_conv *sconv;
|
struct archive_string_conv *sconv;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* This flag is only used when invoking read/write callbacks. It
|
||||||
|
* tells the callback routine whether a metadata read or write is
|
||||||
|
* being requested. This lets higher-level processing routines to
|
||||||
|
* separately store/handle metadata and data.
|
||||||
|
*/
|
||||||
|
int cb_is_metadata;
|
||||||
};
|
};
|
||||||
|
|
||||||
/* Check magic value and state; return(ARCHIVE_FATAL) if it isn't valid. */
|
/* Check magic value and state; return(ARCHIVE_FATAL) if it isn't valid. */
|
||||||
|
|
|
@ -110,8 +110,13 @@ archive_read_finish(struct archive *a)
|
||||||
int
|
int
|
||||||
archive_write_header(struct archive *a, struct archive_entry *entry)
|
archive_write_header(struct archive *a, struct archive_entry *entry)
|
||||||
{
|
{
|
||||||
|
int rv;
|
||||||
|
|
||||||
++a->file_count;
|
++a->file_count;
|
||||||
return ((a->vtable->archive_write_header)(a, entry));
|
a->cb_is_metadata = 1;
|
||||||
|
rv = (a->vtable->archive_write_header)(a, entry);
|
||||||
|
a->cb_is_metadata = 0;
|
||||||
|
return (rv);
|
||||||
}
|
}
|
||||||
|
|
||||||
int
|
int
|
||||||
|
@ -141,13 +146,23 @@ archive_write_data_block(struct archive *a, const void *buff, size_t s, int64_t
|
||||||
int
|
int
|
||||||
archive_read_next_header(struct archive *a, struct archive_entry **entry)
|
archive_read_next_header(struct archive *a, struct archive_entry **entry)
|
||||||
{
|
{
|
||||||
return ((a->vtable->archive_read_next_header)(a, entry));
|
int rv;
|
||||||
|
|
||||||
|
a->cb_is_metadata = 1;
|
||||||
|
rv = (a->vtable->archive_read_next_header)(a, entry);
|
||||||
|
a->cb_is_metadata = 0;
|
||||||
|
return (rv);
|
||||||
}
|
}
|
||||||
|
|
||||||
int
|
int
|
||||||
archive_read_next_header2(struct archive *a, struct archive_entry *entry)
|
archive_read_next_header2(struct archive *a, struct archive_entry *entry)
|
||||||
{
|
{
|
||||||
return ((a->vtable->archive_read_next_header2)(a, entry));
|
int rv;
|
||||||
|
|
||||||
|
a->cb_is_metadata = 1;
|
||||||
|
rv = (a->vtable->archive_read_next_header2)(a, entry);
|
||||||
|
a->cb_is_metadata = 0;
|
||||||
|
return (rv);
|
||||||
}
|
}
|
||||||
|
|
||||||
int
|
int
|
||||||
|
@ -156,3 +171,9 @@ archive_read_data_block(struct archive *a,
|
||||||
{
|
{
|
||||||
return ((a->vtable->archive_read_data_block)(a, buff, s, o));
|
return ((a->vtable->archive_read_data_block)(a, buff, s, o));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int
|
||||||
|
archive_request_is_metadata(struct archive *a)
|
||||||
|
{
|
||||||
|
return (a->cb_is_metadata);
|
||||||
|
}
|
||||||
|
|
Loading…
Reference in a new issue