From 9c23dfa5aa48c3ec94f643ce25a2b900ad0549c5 Mon Sep 17 00:00:00 2001 From: Nick Alcock Date: Tue, 2 Jun 2020 21:14:22 +0100 Subject: [PATCH] libctf: add ctf_archive_count Another count that was otherwise unavailable without doing expensive operations. include/ * ctf-api.h (ctf_archive_count): New. libctf/ * ctf-archive.c (ctf_archive_count): New. * libctf.ver: New public function. --- include/ChangeLog | 4 ++++ include/ctf-api.h | 1 + libctf/ChangeLog | 5 +++++ libctf/ctf-archive.c | 10 ++++++++++ libctf/libctf.ver | 1 + 5 files changed, 21 insertions(+) diff --git a/include/ChangeLog b/include/ChangeLog index 27ffb9051ed..dd9d5e075ca 100644 --- a/include/ChangeLog +++ b/include/ChangeLog @@ -1,3 +1,7 @@ +2020-07-22 Nick Alcock + + * ctf-api.h (ctf_archive_count): New. + 2020-07-22 Nick Alcock * ctf-api.h (ctf_member_count): New. diff --git a/include/ctf-api.h b/include/ctf-api.h index 7cdf4a56235..fb797a3346d 100644 --- a/include/ctf-api.h +++ b/include/ctf-api.h @@ -276,6 +276,7 @@ extern ctf_file_t *ctf_arc_open_by_name_sections (const ctf_archive_t *, const ctf_sect_t *, const ctf_sect_t *, const char *, int *); +extern size_t ctf_archive_count (const ctf_archive_t *); /* The next functions return or close real CTF files, or write out CTF archives, not opaque containers around either. */ diff --git a/libctf/ChangeLog b/libctf/ChangeLog index 7df7867b4cb..0be82801845 100644 --- a/libctf/ChangeLog +++ b/libctf/ChangeLog @@ -1,3 +1,8 @@ +2020-07-22 Nick Alcock + + * ctf-archive.c (ctf_archive_count): New. + * libctf.ver: New public function. + 2020-07-22 Nick Alcock * ctf-types.c (ctf_member_count): New. diff --git a/libctf/ctf-archive.c b/libctf/ctf-archive.c index 3c14d7d12f9..42e90249934 100644 --- a/libctf/ctf-archive.c +++ b/libctf/ctf-archive.c @@ -617,6 +617,16 @@ ctf_arc_open_by_offset (const struct ctf_archive *arc, return fp; } +/* Return the number of members in an archive. */ +size_t +ctf_archive_count (const ctf_archive_t *wrapper) +{ + if (!wrapper->ctfi_is_archive) + return 1; + + return wrapper->ctfi_archive->ctfa_nfiles; +} + /* Raw iteration over all CTF files in an archive. We pass the raw data for all CTF files in turn to the specified callback function. */ static int diff --git a/libctf/libctf.ver b/libctf/libctf.ver index 77b380ca991..375dee8fc77 100644 --- a/libctf/libctf.ver +++ b/libctf/libctf.ver @@ -135,6 +135,7 @@ LIBCTF_1.0 { ctf_arc_close; ctf_arc_open_by_name; ctf_arc_open_by_name_sections; + ctf_archive_count; ctf_archive_iter; ctf_archive_raw_iter; ctf_get_arc; -- 2.30.2