[PATCH] getdents: Fix mips64 build

Atsushi Nemoto anemo at mba.ocn.ne.jp
Fri Jan 29 15:24:37 UTC 2010


On Wed, 27 Jan 2010 07:14:08 +0100, Carmelo AMOROSO <carmelo.amoroso at st.com> wrote:
> I would re-write your patch in a simpler way.
> 
> We already have the following
> 
> 136 #if defined __UCLIBC_HAS_LFS__ && ! defined __NR_getdents64
> 137 attribute_hidden strong_alias(__getdents,__getdents64)
> 138 #endif
> 
> I think that it's simpler to move in the proper place this statement.

Thanks, indeed.  If we came into "#elif WORDSIZE == 32" block, above
condition never be true.  So we can just move this statement out of
"#if...#elif...#elif...#endif" block.  Here is a revised patch.

------------------------------------------------------
From: Atsushi Nemoto <anemo at mba.ocn.ne.jp>
Subject: [PATCH] getdents: Fix mips64 build

Some archs (such as mips64) do not have getdents64 syscall but have
getdents syscall.  Define alias for it.

This fixes regression from 0.9.30.1.

Backgrounds:
This is once done by commit e8b1c674.  But after the commit 33bcf733
("Use getdents syscall if kernel provide supports for this instead of
relying upon getdents64."), if __ASSUME_GETDENTS32_D_TYPE was defined
the alias for getdents64 is not defined.  The macro
__ASSUME_GETDENTS32_D_TYPE had been effectively ignored until 0.9.30.1
but the commit 0f0f20ab ("Move kernel-features.h header from the
linuxthread directory to a common one...") really enables it.

Signed-off-by: Atsushi Nemoto <anemo at mba.ocn.ne.jp>
---
 libc/sysdeps/linux/common/getdents.c |    8 ++++----
 1 files changed, 4 insertions(+), 4 deletions(-)

diff --git a/libc/sysdeps/linux/common/getdents.c b/libc/sysdeps/linux/common/getdents.c
index 6a38772..5dda190 100644
--- a/libc/sysdeps/linux/common/getdents.c
+++ b/libc/sysdeps/linux/common/getdents.c
@@ -133,10 +133,6 @@ ssize_t __getdents (int fd, char *buf, size_t nbytes)
     return (char *) dp - buf;
 }
 
-#if defined __UCLIBC_HAS_LFS__ && ! defined __NR_getdents64
-attribute_hidden strong_alias(__getdents,__getdents64)
-#endif
-
 #elif __WORDSIZE == 32
 
 extern __typeof(__getdents) __getdents64 attribute_hidden;
@@ -167,4 +163,8 @@ ssize_t __getdents (int fd, char *buf, size_t nbytes)
 
 #endif
 
+#if defined __UCLIBC_HAS_LFS__ && ! defined __NR_getdents64
+attribute_hidden strong_alias(__getdents,__getdents64)
+#endif
+
 #endif
-- 
1.5.6.5



More information about the uClibc mailing list