>From b8866155b7b9aed4c3035f3aeff8662e4c785e92 Mon Sep 17 00:00:00 2001
From: Frodo Baggins <[EMAIL PROTECTED]>
Date: Wed, 12 Sep 2007 00:11:37 +0530
Subject: [PATCH] Enable full memory dump
If user is root, we can remove the limit on core dump size. This may
make it easier to debug dumps.
The old limit is saved and restored at exit via atexit(3).
---
parted/parted.c | 24 ++++++++++++++++++++++++
1 files changed, 24 insertions(+), 0 deletions(-)
diff --git a/parted/parted.c b/parted/parted.c
index 6a606ae..154e710 100644
--- a/parted/parted.c
+++ b/parted/parted.c
@@ -57,6 +57,8 @@
#endif
#include <getopt.h>
+#include <sys/time.h>
+#include <sys/resource.h>
/* minimum amount of free space to leave, or maximum amount to gobble up */
#define MIN_FREESPACE (1000 * 2) /* 1000k */
@@ -147,9 +149,24 @@ static Command* commands [256] = {NULL};
static PedTimer* g_timer;
static TimerContext timer_context;
+#ifdef HAVE_GETUID
+static struct rlimit old_limit;
+static void restore_rlimit(void);
+#endif
+
static int _print_list ();
static void _done (PedDevice* dev);
+#ifdef HAVE_GETUID
+static void
+restore_rlimit(void)
+{
+ if(getuid() == 0){
+ setrlimit(RLIMIT_CORE,&old_limit);
+ }
+}
+#endif
+
static void
_timer_handler (PedTimer* timer, void* context)
{
@@ -2397,6 +2414,7 @@ static PedDevice*
_init (int* argc_ptr, char*** argv_ptr)
{
PedDevice* dev;
+struct rlimit infinity={RLIM_INFINITY,RLIM_INFINITY};
#ifdef ENABLE_MTRACE
mtrace();
@@ -2416,6 +2434,11 @@ if (!_parse_options (argc_ptr, argv_ptr)
puts (_("WARNING: You are not superuser. Watch out for "
"permissions."));
}
+ /* Set maximum permitted core file size to infinity if possible */
+ if(getuid() == 0){
+ getrlimit(RLIMIT_CORE,&old_limit);
+ setrlimit(RLIMIT_CORE,&infinity);
+ }
#endif
dev = _choose_device (argc_ptr, argv_ptr);
@@ -2470,6 +2493,7 @@ main (int argc, char** argv)
program_name = argv[0];
atexit (close_stdout);
+ atexit (restore_rlimit);
dev = _init (&argc, &argv);
if (!dev)
--
1.4.3.4
_______________________________________________
parted-devel mailing list
[email protected]
http://lists.alioth.debian.org/mailman/listinfo/parted-devel