Please find attached a 'diff -uNp' of parted/ui.c to solve this problem.

I forgot the attachment. Here it is.

Happy hacking,
Debarshi
--
GPG key ID: 63D4A5A7
Key server: pgp.mit.edu
--- parted/parted/ui.c	2007-02-27 01:42:35.000000000 +0530
+++ ui.c	2007-02-28 04:24:25.000000000 +0530
@@ -1,6 +1,7 @@
 /*
     parted - a frontend to libparted
-    Copyright (C) 1999, 2000, 2001, 2002, 2006, 2007 Free Software Foundation, Inc.
+    Copyright (C) 1999, 2000, 2001, 2002, 2006, 2007
+    Free Software Foundation, Inc.
 
     This program is free software; you can redistribute it and/or modify
     it under the terms of the GNU General Public License as published by
@@ -109,10 +110,12 @@ static struct {
 	sigjmp_buf	jmp_state;
 } readline_state;
 
+#ifdef SA_SIGINFO
 static struct sigaction sig_segv;
 static struct sigaction sig_int;
 static struct sigaction sig_fpe;
 static struct sigaction sig_ill;
+#endif /* SA_SIGINFO */
 
 volatile int got_ctrl_c = 0; /* used in exception_handler */
 
@@ -187,26 +190,26 @@ _add_history_unique (const char* line)
 static void
 _dump_history ()
 {
-    fputs (_("\nCommand History:\n"), stdout);
-    int i = 0;
-    HIST_ENTRY** all_entries = history_list ();
-    while (all_entries[i]) {
-        puts(all_entries[i++]->line);
-    }
+        fputs (_("\nCommand History:\n"), stdout);
+        int i = 0;
+        HIST_ENTRY** all_entries = history_list ();
+        while (all_entries[i]) {
+                puts(all_entries[i++]->line);
+        }
 }
 #endif /* HAVE_LIBREADLINE */
 
-#ifndef HAVE_SIGACTION
+#ifndef SA_SIGINFO
 static void
 mask_signal()
 {
-    sigset_t curr;
-    sigset_t prev;
+        sigset_t curr;
+        sigset_t prev;
   
-    sigfillset(&curr);
-    sigprocmask(SIG_SETMASK, &curr, &prev);
+        sigfillset(&curr);
+        sigprocmask(SIG_SETMASK, &curr, &prev);
 }
-#endif /* HAVE_SIGACTION */
+#endif /* SA_SIGINFO */
 
 /* Resets the environment by jumping to the initial state
  * saved during ui intitialisation.
@@ -216,7 +219,7 @@ mask_signal()
 static void
 reset_env (int quit)
 {
-    int	in_readline = readline_state.in_readline;
+        int	in_readline = readline_state.in_readline;
 
 	readline_state.in_readline = 0;
 	
@@ -229,182 +232,231 @@ reset_env (int quit)
 	}
 }
 
-/* Signal handler for SIGINT */
+/* Signal handler for SIGSEGV */
+#ifdef SA_SIGINFO
 static void
-sigint_handler (int signum, siginfo_t* info, void *ucontext)
+sigsegv_handler (int signum, siginfo_t* info, void* ucontext)
 {
-    got_ctrl_c = 1;
+        sigaction (SIGSEGV, &sig_segv, NULL);
 
-    #ifdef HAVE_SIGACTION
-    sigaction (SIGINT, &sig_int, NULL);
-    #else
-    signal (SIGINT, &sigint_handler);
-    mask_signal();
-    #endif /* HAVE_SIGACTION */
+        printf (bug_msg, VERSION);
+        #ifdef HAVE_LIBREADLINE
+        _dump_history ();
+        #endif
+
+        switch (info->si_code) {
+
+            case SEGV_MAPERR:
+                    fputs(_("\nError: SEGV_MAPERR (Address not mapped "
+		            "to object)\n"), stdout);
+                    PED_ASSERT(0, break); /* Force a backtrace */
+                    break;
+
+            case SEGV_ACCERR:
+                    fputs(_("\nError: SEGV_ACCERR (Invalid permissions "
+		            "for mapped object)\n"), stdout);
+                    break;
+
+            default:
+                    fputs(_("\nError: A general SIGSEGV signal was "
+		            "encountered.\n"), stdout);
+                    PED_ASSERT(0, break); /* Force a backtrace */
+                    break;
+        }
 
-    reset_env (0);
+        abort ();
 }
-
-/* Signal handler for SIGSEGV */
+#else
 static void
-sigsegv_handler (int signum, siginfo_t* info, void* ucontext)
+sigsegv_handler (int signum)
 {
-    #ifdef HAVE_SIGACTION   
-    sigaction (SIGSEGV, &sig_segv, NULL);
-    #else
-    signal (SIGSEGV, &sigsegv_handler);
-    mask_signal();
-    #endif /* HAVE_SIGACTION */
-
-    printf (bug_msg, VERSION);
-    #ifdef HAVE_LIBREADLINE
-    _dump_history ();
-    #endif
- 
-    switch (info->si_code) {
-        
-        case SEGV_MAPERR:
-            fputs(_("\nError: SEGV_MAPERR (Address not mapped "
-		    "to object)\n"), stdout);
-            PED_ASSERT(0, break); /* Force a backtrace */
-            break;
-
-        case SEGV_ACCERR:
-            fputs(_("\nError: SEGV_ACCERR (Invalid permissions "
-		    "for mapped object)\n"), stdout);
-            break;
-
-        default:
-            fputs(_("\nError: A general SIGSEGV signal was "
-		    "encountered.\n"), stdout);
-            PED_ASSERT(0, break); /* Force a backtrace */
-            break;
-    }
+        signal (SIGSEGV, &sigsegv_handler);
+	mask_signal ();
+
+	printf (bug_msg, VERSION);
+        #ifdef HAVE_LIBREADLINE
+        _dump_history ();
+        #endif
 
-    abort ();
+        abort ();
 }
+#endif /* SA_SIGINFO */
+
+/* Signal handler for SIGINT */
+#ifdef SA_SIGINFO
+static void
+sigint_handler (int signum, siginfo_t* info, void *ucontext)
+{
+        got_ctrl_c = 1;
+        sigaction (SIGINT, &sig_int, NULL);
+        reset_env (0);
+}
+#else
+static void
+sigint_handler (int signum)
+{
+        got_ctrl_c = 1;
+        signal (SIGINT, &sigint_handler);
+        mask_signal ();
+        reset_env (0);
+}
+#endif /* SA_SIGINFO */
 
 /* Signal handler for SIGFPE */
+#ifdef SA_SIGINFO
 static void
 sigfpe_handler (int signum, siginfo_t* info, void* ucontext)
 {
-    #ifdef HAVE_SIGACTION
-    sigaction (SIGFPE, &sig_fpe, NULL);
-    #else
-    signal (SIGFPE, &sigfpe_handler);
-    mask_signal();
-    #endif /* HAVE_SIGACTION */
-
-    printf (bug_msg, VERSION);
-    #ifdef HAVE_LIBREADLINE
-    _dump_history ();
-    #endif
-
-    switch (info->si_code) {
-
-        case FPE_INTDIV:
-	    fputs(_("\nError: FPE_INTDIV (Integer: divide by zero)"), stdout);
-            break;
+        sigaction (SIGFPE, &sig_fpe, NULL);
+
+        printf (bug_msg, VERSION);
+        #ifdef HAVE_LIBREADLINE
+        _dump_history ();
+        #endif
+
+        switch (info->si_code) {
+
+                case FPE_INTDIV:
+	                fputs(_("\nError: FPE_INTDIV (Integer: "
+                                "divide by zero)"), stdout);
+                        break;
         
-        case FPE_INTOVF:
-            fputs(_("\nError: FPE_INTOVF (Integer: overflow)"), stdout);
-            break;
+                case FPE_INTOVF:
+                        fputs(_("\nError: FPE_INTOVF (Integer: "
+                                "overflow)"), stdout);
+                        break;
         
-        case FPE_FLTDIV:
-            fputs(_("\nError: FPE_FLTDIV (Float: divide by zero)"), stdout);
-            break;
-
-        case FPE_FLTOVF:
-            fputs(_("\nError: FPE_FLTOVF (Float: overflow)"), stdout);
-            break;
-
-        case FPE_FLTUND:
-            fputs(_("\nError: FPE_FLTUND (Float: underflow)"), stdout);
-            break;
-
-        case FPE_FLTRES:
-            fputs(_("\nError: FPE_FLTRES (Float: inexact result)"), stdout);
-            break;
-
-        case FPE_FLTINV:
-            fputs(_("\nError: FPE_FLTINV (Float: invalid operation)"), stdout);
-            break;
-
-        case FPE_FLTSUB:
-            fputs(_("\nError: FPE_FLTSUB (Float: subscript out of "
-		    "range)"), stdout);
-            break;
-
-        default:
-            fputs(_("\nError: A general SIGFPE signal was "
-		    "encountered."), stdout);
-            break;
+                case FPE_FLTDIV:
+                        fputs(_("\nError: FPE_FLTDIV (Float: "
+                                "divide by zero)"), stdout);
+                        break;
+
+                case FPE_FLTOVF:
+                        fputs(_("\nError: FPE_FLTOVF (Float: "
+                                "overflow)"), stdout);
+                        break;
+
+                case FPE_FLTUND:
+                        fputs(_("\nError: FPE_FLTUND (Float: "
+                                "underflow)"), stdout);
+                        break;
+
+                case FPE_FLTRES:
+                        fputs(_("\nError: FPE_FLTRES (Float: "
+                                "inexact result)"), stdout);
+                        break;
+
+                case FPE_FLTINV:
+                        fputs(_("\nError: FPE_FLTINV (Float: "
+                                "invalid operation)"), stdout);
+                        break;
+
+                case FPE_FLTSUB:
+                        fputs(_("\nError: FPE_FLTSUB (Float: "
+                                "subscript out of range)"), stdout);
+                        break;
+
+                default:
+                        fputs(_("\nError: A general SIGFPE signal "
+		                "was encountered."), stdout);
+                        break;
 
-    }
-   
-    abort ();
+        }
+        abort ();
+}
+#else
+static void
+sigfpe_handler (int signum)
+{
+        signal (SIGFPE, &sigfpe_handler);
+        mask_signal ();
+
+        printf (bug_msg, VERSION);
+        #ifdef HAVE_LIBREADLINE
+        _dump_history ();
+        #endif
+
+        abort ();
 }
+#endif /* SA_SIGINFO */
 
 /* Signal handler for SIGILL */
+#ifdef SA_SIGINFO
 static void
 sigill_handler (int signum, siginfo_t* info, void* ucontext)
 {
-    #ifdef HAVE_SIGACTION
-    sigaction (SIGILL, &sig_ill, NULL);
-    #else
-    signal (SIGILL, &sigill_handler);
-    mask_signal();
-    #endif /* HAVE_SIGACTION */
-
-    printf (bug_msg, VERSION);
-    #ifdef HAVE_LIBREADLINE
-    _dump_history ();
-    #endif
-
-    switch (info->si_code) {
-
-        case ILL_ILLOPC:
-            fputs(_("\nError: ILL_ILLOPC (Illegal Opcode)"), stdout);
-            break;
-        
-        case ILL_ILLOPN:
-	  fputs(_("\nError: ILL_ILLOPN (Illegal Operand)"), stdout);
-            break;
+        sigaction (SIGILL, &sig_ill, NULL);
+
+        printf (bug_msg, VERSION);
+        #ifdef HAVE_LIBREADLINE
+        _dump_history ();
+        #endif
+
+        switch (info->si_code) {
+
+                case ILL_ILLOPC:
+                        fputs(_("\nError: ILL_ILLOPC "
+                                "(Illegal Opcode)"), stdout);
+                        break;
+
+                case ILL_ILLOPN:
+	                fputs(_("\nError: ILL_ILLOPN "
+                                "(Illegal Operand)"), stdout);
+                         break;
         
-        case ILL_ILLADR:
-	    fputs(_("\nError: ILL_ILLADR (Illegal addressing mode)"),
-		  stdout);
-            break;
-
-        case ILL_ILLTRP:
-            fputs(_("\nError: ILL_ILLTRP (Illegal Trap)"), stdout);
-            break;
-
-        case ILL_PRVOPC:
-            fputs(_("\nError: ILL_PRVOPC (Privileged Opcode)"), stdout);
-            break;
-
-        case ILL_PRVREG:
-            fputs(_("\nError: ILL_PRVREG (Privileged Register)"), stdout);
-            break;
-
-        case ILL_COPROC:
-            fputs(_("\nError: ILL_COPROC (Coprocessor Error)"), stdout);
-            break;
-
-        case ILL_BADSTK:
-            fputs(_("\nError: ILL_BADSTK (Internal Stack Error)"), stdout);
-            break;
-
-        default:
-            fputs(_("\nError: A general SIGILL signal was "
-		    "encountered."), stdout);
-            break;
-    }
+                case ILL_ILLADR:
+	                fputs(_("\nError: ILL_ILLADR "
+                                "(Illegal addressing mode)"), stdout);
+                        break;
+
+                case ILL_ILLTRP:
+                        fputs(_("\nError: ILL_ILLTRP "
+                                "(Illegal Trap)"), stdout);
+                        break;
+
+                case ILL_PRVOPC:
+                        fputs(_("\nError: ILL_PRVOPC "
+                                "(Privileged Opcode)"), stdout);
+                        break;
+
+                case ILL_PRVREG:
+                        fputs(_("\nError: ILL_PRVREG "
+                                "(Privileged Register)"), stdout);
+                        break;
+
+                case ILL_COPROC:
+                        fputs(_("\nError: ILL_COPROC "
+                                "(Coprocessor Error)"), stdout);
+                        break;
+
+                case ILL_BADSTK:
+                        fputs(_("\nError: ILL_BADSTK "
+                                "(Internal Stack Error)"), stdout);
+                        break;
+
+                default:
+                        fputs(_("\nError: A general SIGILL "
+                                "signal was encountered."), stdout);
+                        break;
+        }
    
-    abort ();
+        abort ();
 }
+#else
+static void
+sigill_handler (int signum)
+{
+        signal (SIGILL, &sigill_handler);
+        mask_signal ();
 
+        printf (bug_msg, VERSION);
+        #ifdef HAVE_LIBREADLINE
+        _dump_history ();
+        #endif
+
+        abort ();
+}
+#endif /* SA_SIGINFO */
 
 static char*
 _readline (const char* prompt, const StrList* possibilities)
@@ -1235,7 +1287,7 @@ init_ui ()
 	readline_state.in_readline = 0;
 #endif
 
-#ifdef HAVE_SIGACTION
+#ifdef SA_SIGACTION
     sigset_t curr;
     sigfillset (&curr);
 
@@ -1258,7 +1310,12 @@ init_ui ()
     sigaction (SIGINT, &sig_int, NULL);
     sigaction (SIGFPE, &sig_fpe, NULL);
     sigaction (SIGILL, &sig_ill, NULL);
-#endif /* HAVE_SIGACTION */
+#else
+        signal (SIGSEGV, sigsegv_handler);
+        signal (SIGINT, sigint_handler);
+        signal (SIGFPE, sigfpe_handler);
+        signal (SIGILL, sigill_handler);
+#endif /* SA_SIGACTION */
 
     return 1;
 }
_______________________________________________
parted-devel mailing list
[email protected]
http://lists.alioth.debian.org/mailman/listinfo/parted-devel

Reply via email to