Reworked passing of envars to Pinentry.
[gnupg.git] / common / signal.c
index 0c79214..98859a4 100644 (file)
@@ -6,7 +6,7 @@
  *
  * GnuPG is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
+ * the Free Software Foundation; either version 3 of the License, or
  * (at your option) any later version.
  *
  * GnuPG is distributed in the hope that it will be useful,
@@ -15,9 +15,7 @@
  * GNU General Public License for more details.
  *
  * 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
- * USA.
+ * along with this program; if not, see <http://www.gnu.org/licenses/>.
  */
 
 #include <config.h>
@@ -92,9 +90,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. */
@@ -109,21 +107,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;
                 }
             }
         }
@@ -144,6 +146,7 @@ got_fatal_signal (int sig)
 static RETSIGTYPE
 got_usr_signal (int sig)
 {
+  (void)sig;
   caught_sigusr1 = 1;
 }
 #endif /*!HAVE_DOSISH_SYSTEM*/