2002-11-22 Werner Koch <wk@gnupg.org>
authorMarcus Brinkmann <mb@g10code.com>
Fri, 22 Nov 2002 17:45:55 +0000 (17:45 +0000)
committerMarcus Brinkmann <mb@g10code.com>
Fri, 22 Nov 2002 17:45:55 +0000 (17:45 +0000)
* engine-gpgsm.c (_gpgme_gpgsm_new): Save the result of a first
setlocale before doing another setlocale.

gpgme/ChangeLog
gpgme/engine-gpgsm.c

index 6821198ca650aff69c31f2477402a5de27c8149c..53799be33c9b0f999e1e937b9b3c575303f61055 100644 (file)
@@ -2,6 +2,11 @@
 
        * gpgme.h [_MSC_VER]: Define ssize_t as long.
 
+2002-11-22  Werner Koch  <wk@gnupg.org>
+
+       * engine-gpgsm.c (_gpgme_gpgsm_new): Save the result of a first
+       setlocale before doing another setlocale.
+
 2002-11-21  Marcus Brinkmann  <marcus@g10code.de>
 
        * decrypt.c: Some beautyfication.
index 87bbb34c640f2bd8d598b48261ec3cebb9011803..545d26ade60479b38ec1486073e53eae5ecdbe3a 100644 (file)
@@ -464,7 +464,17 @@ gpgsm_new (void **engine)
              goto leave;
            }
        }
+
       old_lc = setlocale (LC_CTYPE, NULL);
+      if (old_lc)
+        {
+          old_lc = strdup (old_lc);
+          if (!old_lc)
+            {
+              err = GPGME_Out_Of_Core;
+              goto leave;
+            }
+        }
       dft_lc = setlocale (LC_CTYPE, "");
       if (dft_lc)
        {
@@ -472,19 +482,32 @@ gpgsm_new (void **engine)
            err = mk_error (Out_Of_Core);
          else
            {
-             err = assuan_transact (gpgsm->assuan_ctx, optstr, NULL, NULL, NULL, NULL, NULL,
-                                    NULL);
+             err = assuan_transact (gpgsm->assuan_ctx, optstr, NULL, NULL,
+                                     NULL, NULL, NULL, NULL);
              free (optstr);
              if (err)
                err = map_assuan_error (err);
            }
        }
       if (old_lc)
-       setlocale (LC_CTYPE, old_lc);
+        {
+          setlocale (LC_CTYPE, old_lc);
+          free (old_lc);
+        }
       if (err)
        goto leave;
 
+
       old_lc = setlocale (LC_MESSAGES, NULL);
+      if (old_lc)
+        {
+          old_lc = strdup (old_lc);
+          if (!old_lc)
+            {
+              err = GPGME_Out_Of_Core;
+              goto leave;
+            }
+        }
       dft_lc = setlocale (LC_MESSAGES, "");
       if (dft_lc)
        {
@@ -500,7 +523,10 @@ gpgsm_new (void **engine)
            }
        }
       if (old_lc)
-       setlocale (LC_MESSAGES, old_lc);
+        {
+          setlocale (LC_MESSAGES, old_lc);
+          free (old_lc);
+        }
       if (err)
        goto leave;
     }