Hi Aaron,
On Mon, Aug 04, 2025 at 11:24:43PM -0400, Aaron Merey wrote:
> Signed-off-by: Aaron Merey <[email protected]>
> ---
> v4: Minor rewording in DESCRIPTION and code comment in EXAMPLES
>
> doc/Makefile.am | 1 +
> doc/elf_next.3 | 120 ++++++++++++++++++++++++++++++++++++++++++++++++
> 2 files changed, 121 insertions(+)
> create mode 100644 doc/elf_next.3
>
> diff --git a/doc/Makefile.am b/doc/Makefile.am
> index 8ad9eb13..96d35d20 100644
> --- a/doc/Makefile.am
> +++ b/doc/Makefile.am
> @@ -82,6 +82,7 @@ notrans_dist_man3_MANS= elf32_checksum.3 \
> elf_ndxscn.3 \
> elf_newdata.3 \
> elf_newscn.3 \
> + elf_next.3 \
> elf_nextscn.3 \
> elf_rand.3 \
> elf_rawdata.3 \
OK.
> diff --git a/doc/elf_next.3 b/doc/elf_next.3
> new file mode 100644
> index 00000000..35336109
> --- /dev/null
> +++ b/doc/elf_next.3
> @@ -0,0 +1,120 @@
> +.TH ELF_NEXT 3 2025-06-06 "Libelf" "Libelf Programmer's Manual"
> +
> +.SH NAME
> +elf_next \- advance an ELF descriptor to the next archive member
> +
> +.SH SYNOPSIS
> +.nf
> +.B #include <libelf.h>
> +
> +.BI "Elf_Cmd elf_next(Elf *" elf ");"
> +.fi
> +.SH DESCRIPTION
> +Advance an ELF descriptor associated with an archive file to the next
> available
> +archive member.
> +
> +.P
> +ELF descriptors initialized from an archive file can be used to retrieve ELF
> +descriptors for archive members one at a time using
> +.BR elf_begin (3).
> +.BR elf_next (3)
> +updates the archive descriptor so that
> +.BR elf_begin (3)
> +returns the ELF descriptor of the next member of the archive. See the
> +.B EXAMPLES
> +section below.
OK. This reads better and is more concise compared to the previous
version.
> +.SH RETURN VALUE
> +If
> +.I elf
> +refers to an archive member, update the state of the parent archive
> +ELF descriptor associated with
> +.I elf
> +so that the next archive member can be retrieved with
> +.BR elf_begin (3).
> +Return the
> +.B Elf_Cmd
> +that was used with
> +.BR elf_begin (3)
> +to initialize
> +.IR elf .
> +
> +.P
> +If
> +.I elf
> +was not initialized from an archive file or there are no more archive
> members,
> +.BR elf_next (3)
> +returns
> +.B ELF_C_NULL.
OK.
> +.SH EXAMPLES
> +.nf
> + /* Open the archive. */
> + fd = open (archive_name, O_RDONLY);
> + if (fd == -1)
> + {
> + printf ("cannot open archive file `%s'", fname);
> + exit (1);
> + }
> +
> + /* Set the ELF version. */
> + elf_version (EV_CURRENT);
> +
> + /* Create an ELF descriptor for the archive. */
> + cmd = ELF_C_READ;
> + elf = elf_begin (fd, cmd, NULL);
> + if (elf == NULL)
> + {
> + printf ("cannot create ELF descriptor: %s\\n", elf_errmsg (-1));
> + exit (1);
> + }
> +
> + /* Verify this is a descriptor for an archive. */
> + if (elf_kind (elf) != ELF_K_AR)
> + {
> + printf ("`%s' is not an archive\\n", fname);
> + exit (1);
> + }
> +
> + /* Get the members of the archive one after the other. */
> + while ((subelf = elf_begin (fd, cmd, elf)) != NULL)
> + {
> + /* Process subelf here */
> + [...]
> +
> + /* elf_next updates elf, the parent archive, so that the next call
> + to elf_begin returns the next archive member. */
> + cmd = elf_next (subelf);
> + if (elf_end (subelf) != 0)
> + {
> + printf ("error while freeing sub-ELF descriptor: %s\\n",
> + elf_errmsg (-1));
> + exit (1);
> + }
> + }
> +
> + elf_end (elf);
> + close (fd);
> +.fi
OK. Really nice example.
> +.SH SEE ALSO
> +.BR elf_begin (3),
> +.BR elf_rand (3),
> +.BR libelf (3),
> +.BR elf (5)
OK.
> +.SH ATTRIBUTES
> +.TS
> +allbox;
> +lbx lb lb
> +l l l.
> +Interface Attribute Value
> +T{
> +.na
> +.nh
> +.BR elf_next ()
> +T} Thread safety MT-Safe
> +.TE
> +
> +.SH REPORTING BUGS
> +Report bugs to <[email protected]> or
> https://sourceware.org/bugzilla/.
OK.
Thanks,
Mark