(__getgroups): Fix the error condition check for the return value of getgroups32.
authorUlrich Drepper <drepper@redhat.com>
Wed, 26 Mar 2003 18:15:57 +0000 (18:15 +0000)
committerUlrich Drepper <drepper@redhat.com>
Wed, 26 Mar 2003 18:15:57 +0000 (18:15 +0000)
sysdeps/unix/sysdep.h
sysdeps/unix/sysv/linux/i386/getgroups.c
sysdeps/unix/sysv/linux/sparc/sparc64/sysdep.h

index c19e98a..4619335 100644 (file)
@@ -47,8 +47,8 @@
 #ifndef PSEUDO_END
 #define PSEUDO_END(sym)
 #endif
-#ifndef PSEUDO_END_NOENTRY
-#define PSEUDO_END_NOENTRY(sym)
+#ifndef PSEUDO_END_NOERRNO
+#define PSEUDO_END_NOERRNO(sym)        PSEUDO_END(sym)
 #endif
 
 /* Wrappers around system calls should normally inline the system call code.
index 2f42117..a8bf232 100644 (file)
@@ -1,4 +1,4 @@
-/* Copyright (C) 1997, 1998, 2000, 2001 Free Software Foundation, Inc.
+/* Copyright (C) 1997, 1998, 2000, 2001, 2003 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
 
    The GNU C Library is free software; you can redistribute it and/or
@@ -36,7 +36,7 @@ extern int __syscall_getgroups32 (int, __kernel_gid32_t *__unbounded);
 # if __ASSUME_32BITUIDS == 0
 /* This variable is shared with all files that need to check for 32bit
    uids.  */
-extern int __libc_missing_32bit_uids;
+extern int __libc_missing_32bit_uids attribute_hidden;
 # endif
 #endif /* __NR_getgroups32 */
 
@@ -64,7 +64,7 @@ __getgroups (int n, gid_t *groups)
          int saved_errno = errno;
 
          result = INLINE_SYSCALL (getgroups32, 2, n, CHECK_N (groups, n));
-         if (result == 0 || errno != ENOSYS)
+         if (result != -1 || errno != ENOSYS)
            return result;
 
          __set_errno (saved_errno);
index e2bb863..cd907da 100644 (file)
@@ -35,6 +35,7 @@
 
 /* Linux/SPARC uses a different trap number */
 #undef PSEUDO
+#undef PSEUDO_NOERRNO
 #undef ENTRY
 
 #define ENTRY(name)                                                    \
@@ -101,10 +102,20 @@ SYSCALL_ERROR_HANDLER_ENTRY(__syscall_error_handler)                      \
         nop;                                                           \
        SYSCALL_ERROR_HANDLER
 
+#define PSEUDO_NOERRNO(name, syscall_name, args)                       \
+       .text;                                                          \
+       ENTRY(name);                                                    \
+       LOADSYSCALL(syscall_name);                                      \
+       ta      0x6d
+
 #undef PSEUDO_END
 #define PSEUDO_END(name)                                               \
        .size name,.-name
 
+#undef PSEUDO_END_NOERRNO
+#define PSEUDO_END_NOERRNO(name)                                       \
+       .size name,.-name
+
 #undef END
 #define END(name)                                                      \
        .size name,.-name