This is the mail archive of the glibc-cvs@sourceware.org mailing list for the glibc project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

GNU C Library master sources branch, master, updated. glibc-2.12-242-g5bd6dc5


This is an automated email from the git hooks/post-receive script. It was
generated because a ref change was pushed to the repository containing
the project "GNU C Library master sources".

The branch, master has been updated
       via  5bd6dc5c2c68fe98691db9b40f87d9b68ea9565b (commit)
      from  9798346413d74dc9b3c64731807600b5ab9c1517 (commit)

Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.

- Log -----------------------------------------------------------------
http://sources.redhat.com/git/gitweb.cgi?p=glibc.git;a=commitdiff;h=5bd6dc5c2c68fe98691db9b40f87d9b68ea9565b

commit 5bd6dc5c2c68fe98691db9b40f87d9b68ea9565b
Author: Ulrich Drepper <drepper@gmail.com>
Date:   Sat Dec 25 20:12:27 2010 -0500

    Use prlimit64 for 32-bit [gs]etrlimit64 implementation.

diff --git a/ChangeLog b/ChangeLog
index 66431b7..e86929e 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,11 @@
 2010-12-25  Ulrich Drepper  <drepper@gmail.com>
 
+	[BZ #12201]
+	* sysdeps/unix/sysv/linux/getrlimit64.c: New file.
+	* sysdeps/unix/sysv/linux/setrlimit64.c: New file.
+	* sysdeps/unix/sysv/linux/i386/getrlimit64.c: Use ../getrlimit64.c.
+	* sysdeps/unix/sysv/linux/kernel-features.h: Define __ASSUME_PRLIMIT64.
+
 	[BZ #12207]
 	* malloc/malloc.c (do_check_malloc_state): Use fastbin macro.
 
diff --git a/sysdeps/unix/sysv/linux/getrlimit64.c b/sysdeps/unix/sysv/linux/getrlimit64.c
new file mode 100644
index 0000000..19e9911
--- /dev/null
+++ b/sysdeps/unix/sysv/linux/getrlimit64.c
@@ -0,0 +1,54 @@
+/* Copyright (C) 2010 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
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, write to the Free
+   Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+   02111-1307 USA.  */
+
+#include <errno.h>
+#include <sys/resource.h>
+#include <sys/types.h>
+#include <sysdep.h>
+#include <kernel-features.h>
+
+/* Put the soft and hard limits for RESOURCE in *RLIMITS.
+   Returns 0 if successful, -1 if not (and sets errno).  */
+int
+getrlimit64 (enum __rlimit_resource resource, struct rlimit64 *rlimits)
+{
+#ifdef __ASSUME_PRLIMIT64
+  return INLINE_SYSCALL (prlimit64, 4, 0, resource, NULL, rlimits);
+#else
+# ifdef __NR_prlimit64
+  int res = INLINE_SYSCALL (prlimit64, 4, 0, resource, NULL, rlimits);
+  if (res == 0 || errno != ENOSYS)
+    return res;
+# endif
+  struct rlimit rlimits32;
+
+  if (__getrlimit (resource, &rlimits32) < 0)
+    return -1;
+
+  if (rlimits32.rlim_cur == RLIM_INFINITY)
+    rlimits->rlim_cur = RLIM64_INFINITY;
+  else
+    rlimits->rlim_cur = rlimits32.rlim_cur;
+  if (rlimits32.rlim_max == RLIM_INFINITY)
+    rlimits->rlim_max = RLIM64_INFINITY;
+  else
+    rlimits->rlim_max = rlimits32.rlim_max;
+
+  return 0;
+#endif
+}
diff --git a/sysdeps/unix/sysv/linux/i386/getrlimit64.c b/sysdeps/unix/sysv/linux/i386/getrlimit64.c
index 2ff1753..00be3d6 100644
--- a/sysdeps/unix/sysv/linux/i386/getrlimit64.c
+++ b/sysdeps/unix/sysv/linux/i386/getrlimit64.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 1999, 2000, 2005 Free Software Foundation, Inc.
+/* Copyright (C) 1999, 2000, 2005, 2010 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
@@ -18,7 +18,7 @@
 
 #define getrlimit64 __new_getrlimit64
 
-#include <resource/getrlimit64.c>
+#include "../getrlimit64.c"
 
 #undef getrlimit64
 #include <shlib-compat.h>
diff --git a/sysdeps/unix/sysv/linux/kernel-features.h b/sysdeps/unix/sysv/linux/kernel-features.h
index 838b310..c220dca 100644
--- a/sysdeps/unix/sysv/linux/kernel-features.h
+++ b/sysdeps/unix/sysv/linux/kernel-features.h
@@ -535,3 +535,8 @@
 #if __LINUX_KERNEL_VERSION >= 0x020624
 # define __ASSUME_STATFS_F_FLAGS	1
 #endif
+
+/* prlimit64 is available in 2.6.36.  */
+#if __LINUX_KERNEL_VERSION >= 0x020624
+# define __ASSUME_PRLIMIT64	1
+#endif
diff --git a/sysdeps/unix/sysv/linux/setrlimit64.c b/sysdeps/unix/sysv/linux/setrlimit64.c
new file mode 100644
index 0000000..f61151d
--- /dev/null
+++ b/sysdeps/unix/sysv/linux/setrlimit64.c
@@ -0,0 +1,54 @@
+/* Copyright (C) 2010 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
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, write to the Free
+   Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+   02111-1307 USA.  */
+
+#include <errno.h>
+#include <sys/resource.h>
+#include <sys/types.h>
+#include <sysdep.h>
+#include <kernel-features.h>
+
+/* Set the soft and hard limits for RESOURCE to *RLIMITS.
+   Only the super-user can increase hard limits.
+   Return 0 if successful, -1 if not (and sets errno).  */
+int
+setrlimit64 (resource, rlimits)
+     enum __rlimit_resource resource;
+     const struct rlimit64 *rlimits;
+{
+#ifdef __ASSUME_PRLIMIT64
+  return INLINE_SYSCALL (prlimit64, 4, 0, resource, rlimits, NULL);
+#else
+# ifdef __NR_prlimit64
+  int res = INLINE_SYSCALL (prlimit64, 4, 0, resource, rlimits, NULL);
+  if (res == 0 || errno != ENOSYS)
+    return res;
+# endif
+  struct rlimit rlimits32;
+
+  if (rlimits->rlim_cur >= RLIM_INFINITY)
+    rlimits32.rlim_cur = RLIM_INFINITY;
+  else
+    rlimits32.rlim_cur = rlimits->rlim_cur;
+  if (rlimits->rlim_max >= RLIM_INFINITY)
+    rlimits32.rlim_max = RLIM_INFINITY;
+  else
+    rlimits32.rlim_max = rlimits->rlim_max;
+
+  return __setrlimit (resource, &rlimits32);
+#endif
+}

-----------------------------------------------------------------------

Summary of changes:
 ChangeLog                                          |    6 ++++++
 .../unix/sysv/linux}/getrlimit64.c                 |   13 ++++++++++++-
 sysdeps/unix/sysv/linux/i386/getrlimit64.c         |    4 ++--
 sysdeps/unix/sysv/linux/kernel-features.h          |    5 +++++
 .../unix/sysv/linux}/setrlimit64.c                 |   13 ++++++++++++-
 5 files changed, 37 insertions(+), 4 deletions(-)
 copy {resource => sysdeps/unix/sysv/linux}/getrlimit64.c (79%)
 copy {resource => sysdeps/unix/sysv/linux}/setrlimit64.c (80%)


hooks/post-receive
-- 
GNU C Library master sources


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]