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.
This commit is contained in:
Marcus Brinkmann 2002-11-22 17:45:55 +00:00
parent ec6525d311
commit bc06e0cb8e
2 changed files with 35 additions and 4 deletions

View File

@ -2,6 +2,11 @@
* gpgme.h [_MSC_VER]: Define ssize_t as long. * 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> 2002-11-21 Marcus Brinkmann <marcus@g10code.de>
* decrypt.c: Some beautyfication. * decrypt.c: Some beautyfication.

View File

@ -464,7 +464,17 @@ gpgsm_new (void **engine)
goto leave; goto leave;
} }
} }
old_lc = setlocale (LC_CTYPE, NULL); 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, ""); dft_lc = setlocale (LC_CTYPE, "");
if (dft_lc) if (dft_lc)
{ {
@ -472,19 +482,32 @@ gpgsm_new (void **engine)
err = mk_error (Out_Of_Core); err = mk_error (Out_Of_Core);
else else
{ {
err = assuan_transact (gpgsm->assuan_ctx, optstr, NULL, NULL, NULL, NULL, NULL, err = assuan_transact (gpgsm->assuan_ctx, optstr, NULL, NULL,
NULL); NULL, NULL, NULL, NULL);
free (optstr); free (optstr);
if (err) if (err)
err = map_assuan_error (err); err = map_assuan_error (err);
} }
} }
if (old_lc) if (old_lc)
setlocale (LC_CTYPE, old_lc); {
setlocale (LC_CTYPE, old_lc);
free (old_lc);
}
if (err) if (err)
goto leave; goto leave;
old_lc = setlocale (LC_MESSAGES, NULL); 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, ""); dft_lc = setlocale (LC_MESSAGES, "");
if (dft_lc) if (dft_lc)
{ {
@ -500,7 +523,10 @@ gpgsm_new (void **engine)
} }
} }
if (old_lc) if (old_lc)
setlocale (LC_MESSAGES, old_lc); {
setlocale (LC_MESSAGES, old_lc);
free (old_lc);
}
if (err) if (err)
goto leave; goto leave;
} }