diff options
| -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;      } | 
