aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMarcus Brinkmann <[email protected]>2002-11-22 17:45:55 +0000
committerMarcus Brinkmann <[email protected]>2002-11-22 17:45:55 +0000
commitbc06e0cb8e08e6ff6129f669f054c1145adcc221 (patch)
tree0f5b052920af29f7e7b99213ad0d6c37b5108248
parent2002-11-22 Marcus Brinkmann <[email protected]> (diff)
downloadgpgme-bc06e0cb8e08e6ff6129f669f054c1145adcc221.tar.gz
gpgme-bc06e0cb8e08e6ff6129f669f054c1145adcc221.zip
2002-11-22 Werner Koch <[email protected]>
* engine-gpgsm.c (_gpgme_gpgsm_new): Save the result of a first setlocale before doing another setlocale.
-rw-r--r--gpgme/ChangeLog5
-rw-r--r--gpgme/engine-gpgsm.c34
2 files changed, 35 insertions, 4 deletions
diff --git a/gpgme/ChangeLog b/gpgme/ChangeLog
index 6821198c..53799be3 100644
--- a/gpgme/ChangeLog
+++ b/gpgme/ChangeLog
@@ -2,6 +2,11 @@
* gpgme.h [_MSC_VER]: Define ssize_t as long.
+2002-11-22 Werner Koch <[email protected]>
+
+ * engine-gpgsm.c (_gpgme_gpgsm_new): Save the result of a first
+ setlocale before doing another setlocale.
+
2002-11-21 Marcus Brinkmann <[email protected]>
* decrypt.c: Some beautyfication.
diff --git a/gpgme/engine-gpgsm.c b/gpgme/engine-gpgsm.c
index 87bbb34c..545d26ad 100644
--- a/gpgme/engine-gpgsm.c
+++ b/gpgme/engine-gpgsm.c
@@ -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;
}