* Note that ar(1) archives may also be opened using elf_memory(3)
.
* Ignore the passed in value of the `fd` argument for ar(1) archives opened with elf_memory(3). Obtained from: elftoolchain MFC after: 1 month
This commit is contained in:
parent
101235dcb3
commit
52d63629e6
@ -23,7 +23,7 @@
|
||||
.\"
|
||||
.\" $FreeBSD$
|
||||
.\"
|
||||
.Dd June 21, 2006
|
||||
.Dd April 11, 2010
|
||||
.Dt ELF_BEGIN 3
|
||||
.Os
|
||||
.Sh NAME
|
||||
@ -163,7 +163,9 @@ archive may be opened in read mode (with argument
|
||||
set to
|
||||
.Dv ELF_C_READ )
|
||||
using
|
||||
.Fn elf_begin .
|
||||
.Fn elf_begin
|
||||
or
|
||||
.Fn elf_memory .
|
||||
The returned ELF descriptor can be passed into to
|
||||
subsequent calls to
|
||||
.Fn elf_begin
|
||||
|
@ -131,13 +131,15 @@ elf_begin(int fd, Elf_Cmd c, Elf *a)
|
||||
case ELF_C_READ:
|
||||
/*
|
||||
* Descriptor `a' could be for a regular ELF file, or
|
||||
* for an ar(1) archive.
|
||||
* for an ar(1) archive. If descriptor `a' was opened
|
||||
* using a valid file descriptor, we need to check if
|
||||
* the passed in `fd' value matches the original one.
|
||||
*/
|
||||
if (a && (a->e_fd != fd || c != a->e_cmd)) {
|
||||
if (a &&
|
||||
((a->e_fd != -1 && a->e_fd != fd) || c != a->e_cmd)) {
|
||||
LIBELF_SET_ERROR(ARGUMENT, 0);
|
||||
return (NULL);
|
||||
}
|
||||
|
||||
break;
|
||||
|
||||
default:
|
||||
@ -149,7 +151,7 @@ elf_begin(int fd, Elf_Cmd c, Elf *a)
|
||||
if (a == NULL)
|
||||
e = _libelf_open_object(fd, c);
|
||||
else if (a->e_kind == ELF_K_AR)
|
||||
e = _libelf_ar_open_member(fd, c, a);
|
||||
e = _libelf_ar_open_member(a->e_fd, c, a);
|
||||
else
|
||||
(e = a)->e_activations++;
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user