Add missing fiels for W32.
[gnupg.git] / common / signal.c
index 2837d7b..1c82014 100644 (file)
@@ -16,7 +16,8 @@
  *
  * You should have received a copy of the GNU General Public License
  * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
+ * USA.
  */
 
 #include <config.h>
@@ -91,9 +92,9 @@ got_fatal_signal (int sig)
   const char *s;
 
   if (caught_fatal_sig)
-       raise (sig);
+    raise (sig);
   caught_fatal_sig = 1;
-
+  
   if (cleanup_fnc)
     cleanup_fnc ();
   /* Better don't translate these messages. */
@@ -108,21 +109,25 @@ got_fatal_signal (int sig)
   else
     {
       /* We are in a signal handler so we can't use any kind of printf
-         even not sprintf.  USe a straightforward algorithm. */
+         even not sprintf.  So we use a straightforward algorithm.  We
+         got a report that on one particular system, raising a signal
+         while in this handler, the parameter SIG get sclobbered and
+         things are messed up because we modify its value.  Although
+         this is a bug in that system, we will protect against it.  */
       if (sig < 0 || sig >= 100000)
         write (2, "?", 1);
       else 
         {
-          int i, any=0;
+          int i, value, any=0;
 
-          for (i=10000; i; i /= 10)
+          for (value=sig,i=10000; i; i /= 10)
             {
-              if (sig >= i || ((any || i==1) && !(sig/i)))
+              if (value >= i || ((any || i==1) && !(value/i)))
                 {
-                  write (2, "0123456789"+(sig/i), 1);
-                  if ((sig/i))
+                  write (2, "0123456789"+(value/i), 1);
+                  if ((value/i))
                     any = 1;
-                  sig %= i;
+                  value %= i;
                 }
             }
         }