Hi Aaron, On Sun, Jun 22, 2025 at 07:02:03PM -0400, Aaron Merey wrote: > Signed-off-by: Aaron Merey <ame...@redhat.com> > > --- > v2: Clarify that elf_next is called with an archive member in order > to update the descriptor for the parent archive. Added a code example.
Looks nice. Just two small questions below. > diff --git a/doc/elf_next.3 b/doc/elf_next.3 > new file mode 100644 > index 00000000..1e3f0ee5 > --- /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 . > +.B elf_next > +updates the archive descriptor so that > +.B elf_begin > +may return the ELF descriptor of the next member of the archive. > +.B elf_next > +is called with a archive member's ELF descriptor and updates descriptor > +of the parent archive (see the EXAMPLES section below). Should EXAMPLES be marked bold with .B? > + > +.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 . > +Return the > +.B Elf_Cmd > +that was used with > +.B elf_begin > +to initialize > +.IR elf . > + > +.P > +If > +.I elf > +was not initialized from an archive file or there are no more archive > members, > +.B elf_next > +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 */ > + [...] > + > + /* Get next archive element. */ > + 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 Should you check the cmd after the elf_next call? > +.SH SEE ALSO > +.BR elf_begin (3), > +.BR elf_rand (3), > +.BR libelf (3), > +.BR elf (5) > + > +.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 <elfutils-devel@sourceware.org> or > https://sourceware.org/bugzilla/. > -- > 2.49.0 >