diff options
author | Marcus Brinkmann <[email protected]> | 2002-11-22 17:45:55 +0000 |
---|---|---|
committer | Marcus Brinkmann <[email protected]> | 2002-11-22 17:45:55 +0000 |
commit | bc06e0cb8e08e6ff6129f669f054c1145adcc221 (patch) | |
tree | 0f5b052920af29f7e7b99213ad0d6c37b5108248 | |
parent | 2002-11-22 Marcus Brinkmann <[email protected]> (diff) | |
download | gpgme-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/ChangeLog | 5 | ||||
-rw-r--r-- | gpgme/engine-gpgsm.c | 34 |
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; } |