aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorWerner Koch <[email protected]>2002-11-22 15:02:37 +0000
committerWerner Koch <[email protected]>2002-11-22 15:02:37 +0000
commit9ab4638c8d3e1c7792e1d35775fabc42233224da (patch)
treeedb4aa07de52d8191f7f0ddfefde32b410f62c85
parent2002-11-21 Marcus Brinkmann <[email protected]> (diff)
downloadgpgme-9ab4638c8d3e1c7792e1d35775fabc42233224da.tar.gz
gpgme-9ab4638c8d3e1c7792e1d35775fabc42233224da.zip
* 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 78ac092c..925f20c2 100644
--- a/gpgme/ChangeLog
+++ b/gpgme/ChangeLog
@@ -1,3 +1,8 @@
+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]>
* verify.c (_gpgme_verify_status_handler): Treat
diff --git a/gpgme/engine-gpgsm.c b/gpgme/engine-gpgsm.c
index 6d98a9d5..41e63f57 100644
--- a/gpgme/engine-gpgsm.c
+++ b/gpgme/engine-gpgsm.c
@@ -450,7 +450,17 @@ _gpgme_gpgsm_new (GpgsmObject *r_gpgsm)
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)
{
@@ -458,19 +468,32 @@ _gpgme_gpgsm_new (GpgsmObject *r_gpgsm)
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)
{
@@ -486,7 +509,10 @@ _gpgme_gpgsm_new (GpgsmObject *r_gpgsm)
}
}
if (old_lc)
- setlocale (LC_MESSAGES, old_lc);
+ {
+ setlocale (LC_MESSAGES, old_lc);
+ free (old_lc);
+ }
if (err)
goto leave;
}