Browse Source

fix getrlimit handling on 32-bit systems, and ease porting to 64-bit

Rich Felker 14 years ago
parent
commit
f7eb91e795
2 changed files with 5 additions and 3 deletions
  1. 2 0
      arch/i386/syscall.h
  2. 3 3
      src/misc/getrlimit.c

+ 2 - 0
arch/i386/syscall.h

@@ -500,6 +500,8 @@ static inline long syscall6(long n, long a1, long a2, long a3, long a4, long a5,
 #define __NR_fstatat __NR_fstatat64
 #define __NR_pread __NR_pread64
 #define __NR_pwrite __NR_pwrite64
+#undef __NR_getrlimit
+#define __NR_getrlimit __NR_ugetrlimit
 
 #define __SC_socket      1
 #define __SC_bind        2

+ 3 - 3
src/misc/getrlimit.c

@@ -5,10 +5,10 @@
 int getrlimit(int resource, struct rlimit *rlim)
 {
 	long k_rlim[2];
-	if (syscall2(__NR_ugetrlimit, resource, (long)k_rlim) < 0)
+	if (syscall2(__NR_getrlimit, resource, (long)k_rlim) < 0)
 		return -1;
-	rlim->rlim_cur = k_rlim[0];
-	rlim->rlim_max = k_rlim[1];
+	rlim->rlim_cur = k_rlim[0] == -1 ? -1 : (unsigned long)k_rlim[0];
+	rlim->rlim_max = k_rlim[1] == -1 ? -1 : (unsigned long)k_rlim[1];
 	return 0;
 }