New archive_file_count() utility.

This commit is contained in:
Tim Kientzle 2009-12-28 02:58:14 +00:00
parent 042c735c81
commit 9adedf9679
7 changed files with 42 additions and 5 deletions

View File

@ -224,6 +224,7 @@ MLINKS+= archive_util.3 archive_compression.3
MLINKS+= archive_util.3 archive_compression_name.3 MLINKS+= archive_util.3 archive_compression_name.3
MLINKS+= archive_util.3 archive_errno.3 MLINKS+= archive_util.3 archive_errno.3
MLINKS+= archive_util.3 archive_error_string.3 MLINKS+= archive_util.3 archive_error_string.3
MLINKS+= archive_util.3 archive_file_count.3
MLINKS+= archive_util.3 archive_format.3 MLINKS+= archive_util.3 archive_format.3
MLINKS+= archive_util.3 archive_format_name.3 MLINKS+= archive_util.3 archive_format_name.3
MLINKS+= archive_util.3 archive_set_error.3 MLINKS+= archive_util.3 archive_set_error.3

View File

@ -713,6 +713,7 @@ __LA_DECL void archive_set_error(struct archive *, int _err,
const char *fmt, ...); const char *fmt, ...);
__LA_DECL void archive_copy_error(struct archive *dest, __LA_DECL void archive_copy_error(struct archive *dest,
struct archive *src); struct archive *src);
__LA_DECL int archive_file_count(struct archive *);
#ifdef __cplusplus #ifdef __cplusplus
} }

View File

@ -25,6 +25,10 @@
* $FreeBSD$ * $FreeBSD$
*/ */
#ifndef __LIBARCHIVE_BUILD
#error This header is only to be used internally to libarchive.
#endif
#ifndef ARCHIVE_PRIVATE_H_INCLUDED #ifndef ARCHIVE_PRIVATE_H_INCLUDED
#define ARCHIVE_PRIVATE_H_INCLUDED #define ARCHIVE_PRIVATE_H_INCLUDED
@ -87,9 +91,11 @@ struct archive {
const char *compression_name; const char *compression_name;
/* Position in UNCOMPRESSED data stream. */ /* Position in UNCOMPRESSED data stream. */
off_t file_position; int64_t file_position;
/* Position in COMPRESSED data stream. */ /* Position in COMPRESSED data stream. */
off_t raw_position; int64_t raw_position;
/* Number of file entries processed. */
int file_count;
int archive_error_number; int archive_error_number;
const char *error; const char *error;
@ -107,4 +113,12 @@ int __archive_parse_options(const char *p, const char *fn,
#define err_combine(a,b) ((a) < (b) ? (a) : (b)) #define err_combine(a,b) ((a) < (b) ? (a) : (b))
#if defined(__BORLANDC__) || (defined(_MSC_VER) && _MSC_VER <= 1300)
# define ARCHIVE_LITERAL_LL(x) x##i64
# define ARCHIVE_LITERAL_ULL(x) x##ui64
#else
# define ARCHIVE_LITERAL_LL(x) x##ll
# define ARCHIVE_LITERAL_ULL(x) x##ull
#endif
#endif #endif

View File

@ -386,6 +386,7 @@ archive_read_next_header2(struct archive *_a, struct archive_entry *entry)
ARCHIVE_STATE_HEADER | ARCHIVE_STATE_DATA, ARCHIVE_STATE_HEADER | ARCHIVE_STATE_DATA,
"archive_read_next_header"); "archive_read_next_header");
++_a->file_count;
archive_entry_clear(entry); archive_entry_clear(entry);
archive_clear_error(&a->archive); archive_clear_error(&a->archive);

View File

@ -34,6 +34,7 @@
.Nm archive_copy_error , .Nm archive_copy_error ,
.Nm archive_errno , .Nm archive_errno ,
.Nm archive_error_string , .Nm archive_error_string ,
.Nm archive_file_count ,
.Nm archive_format , .Nm archive_format ,
.Nm archive_format_name , .Nm archive_format_name ,
.Nm archive_set_error .Nm archive_set_error
@ -53,6 +54,8 @@
.Ft const char * .Ft const char *
.Fn archive_error_string "struct archive *" .Fn archive_error_string "struct archive *"
.Ft int .Ft int
.Fn archive_file_count "struct archive *"
.Ft int
.Fn archive_format "struct archive *" .Fn archive_format "struct archive *"
.Ft const char * .Ft const char *
.Fn archive_format_name "struct archive *" .Fn archive_format_name "struct archive *"
@ -92,6 +95,12 @@ obtained from passing the result of
.Fn archive_errno .Fn archive_errno
to to
.Xr strerror 3 . .Xr strerror 3 .
.It Fn archive_file_count
Returns a count of the number of files processed by this archive object.
The count is incremented by calls to
.Xr archive_write_header
or
.Xr archive_read_next_header .
.It Fn archive_format .It Fn archive_format
Returns a numeric code indicating the format of the current Returns a numeric code indicating the format of the current
archive entry. archive entry.

View File

@ -100,6 +100,11 @@ archive_error_string(struct archive *a)
return ("(Empty error message)"); return ("(Empty error message)");
} }
int
archive_file_count(struct archive *a)
{
return (a->file_count);
}
int int
archive_format(struct archive *a) archive_format(struct archive *a)
@ -182,9 +187,14 @@ void
__archive_errx(int retvalue, const char *msg) __archive_errx(int retvalue, const char *msg)
{ {
static const char *msg1 = "Fatal Internal Error in libarchive: "; static const char *msg1 = "Fatal Internal Error in libarchive: ";
write(2, msg1, strlen(msg1)); size_t s;
write(2, msg, strlen(msg));
write(2, "\n", 1); s = write(2, msg1, strlen(msg1));
(void)s; /* UNUSED */
s = write(2, msg, strlen(msg));
(void)s; /* UNUSED */
s = write(2, "\n", 1);
(void)s; /* UNUSED */
exit(retvalue); exit(retvalue);
} }

View File

@ -66,6 +66,7 @@ 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)
{ {
++a->file_count;
return ((a->vtable->archive_write_header)(a, entry)); return ((a->vtable->archive_write_header)(a, entry));
} }