[v2,15/16] libelf: F_GETFD may not predefined with msvc/mingw, guard the usage of it

Message ID 20221217165213.152-16-luoyonggang@gmail.com
State Changes Requested
Headers
Series Patches for building with mingw/gcc msvc/clang-cl |

Commit Message

Yonggang Luo Dec. 17, 2022, 4:52 p.m. UTC
  Signed-off-by: Yonggang Luo <luoyonggang@gmail.com>
---
 libelf/elf_begin.c | 7 +++++++
 1 file changed, 7 insertions(+)
  

Comments

Mark Wielaard Dec. 21, 2022, 10:29 p.m. UTC | #1
Hi,

On Sun, Dec 18, 2022 at 12:52:12AM +0800, Yonggang Luo via Elfutils-devel wrote:
> Signed-off-by: Yonggang Luo <luoyonggang@gmail.com>
> ---
>  libelf/elf_begin.c | 7 +++++++
>  1 file changed, 7 insertions(+)
> 
> diff --git a/libelf/elf_begin.c b/libelf/elf_begin.c
> index 6d31882e..3d324694 100644
> --- a/libelf/elf_begin.c
> +++ b/libelf/elf_begin.c
> @@ -1163,12 +1163,19 @@ elf_begin (int fildes, Elf_Cmd cmd, Elf *ref)
>    if (ref != NULL)
>      /* Make sure the descriptor is not suddenly going away.  */
>      rwlock_rdlock (ref->lock);
> +#if defined(F_GETFD)
>    else if (unlikely (fcntl (fildes, F_GETFD) == -1 && errno == EBADF))
>      {
>        /* We cannot do anything productive without a file descriptor.  */
>        __libelf_seterrno (ELF_E_INVALID_FILE);
>        return NULL;
>      }
> +#else
> +  else if (fildes < 0)
> +    {
> +      return NULL;
> +    }
> +#endif

That new return NULL is missing a __libelf_seterrno.

Cheers,

Mark
  

Patch

diff --git a/libelf/elf_begin.c b/libelf/elf_begin.c
index 6d31882e..3d324694 100644
--- a/libelf/elf_begin.c
+++ b/libelf/elf_begin.c
@@ -1163,12 +1163,19 @@  elf_begin (int fildes, Elf_Cmd cmd, Elf *ref)
   if (ref != NULL)
     /* Make sure the descriptor is not suddenly going away.  */
     rwlock_rdlock (ref->lock);
+#if defined(F_GETFD)
   else if (unlikely (fcntl (fildes, F_GETFD) == -1 && errno == EBADF))
     {
       /* We cannot do anything productive without a file descriptor.  */
       __libelf_seterrno (ELF_E_INVALID_FILE);
       return NULL;
     }
+#else
+  else if (fildes < 0)
+    {
+      return NULL;
+    }
+#endif
 
   switch (cmd)
     {