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