diff options
| author | Marcus Brinkmann <[email protected]> | 2006-02-22 11:44:16 +0000 | 
|---|---|---|
| committer | Marcus Brinkmann <[email protected]> | 2006-02-22 11:44:16 +0000 | 
| commit | fb6692fc75da65b616a9a5ed66789c52e8227f97 (patch) | |
| tree | 015310594a5e1c300a76d8372c31c75b3a3d66f4 | |
| parent | 2006-02-22 Marcus Brinkmann <[email protected]> (diff) | |
| download | gpgme-fb6692fc75da65b616a9a5ed66789c52e8227f97.tar.gz gpgme-fb6692fc75da65b616a9a5ed66789c52e8227f97.zip | |
2006-02-22  Marcus Brinkmann  <[email protected]>
	* engine.c (gpgme_engine_check_version): Reimplemented to allow
	checking the version correctly even after changing the engine
	information.  Bug reported by Stéphane Corthésy.
Diffstat (limited to '')
| -rw-r--r-- | gpgme/ChangeLog | 4 | ||||
| -rw-r--r-- | gpgme/engine.c | 29 | 
2 files changed, 28 insertions, 5 deletions
| diff --git a/gpgme/ChangeLog b/gpgme/ChangeLog index 29113948..cf149c2d 100644 --- a/gpgme/ChangeLog +++ b/gpgme/ChangeLog @@ -1,5 +1,9 @@  2006-02-22  Marcus Brinkmann  <[email protected]> +	* engine.c (gpgme_engine_check_version): Reimplemented to allow +	checking the version correctly even after changing the engine +	information.  Bug reported by St�phane Corth�sy. +  	* rungpg.c (read_colon_line): Invoke colon preprocess handler if  	it is set.  	(colon_preprocessor_t): New type. diff --git a/gpgme/engine.c b/gpgme/engine.c index a07fcdc4..d9753568 100644 --- a/gpgme/engine.c +++ b/gpgme/engine.c @@ -106,14 +106,33 @@ engine_get_req_version (gpgme_protocol_t proto)  gpgme_error_t  gpgme_engine_check_version (gpgme_protocol_t proto)  { +  gpgme_error_t err; +  gpgme_engine_info_t info;    int result; -  char *engine_version = engine_get_version (proto, NULL); -  result = _gpgme_compare_versions (engine_version, -				    engine_get_req_version (proto)); -  if (engine_version) -    free (engine_version); +  LOCK (engine_info_lock); +  info = engine_info; +  if (!info) +    { +      /* Make sure it is initialized.  */ +      UNLOCK (engine_info_lock); +      err = gpgme_get_engine_info (&info); +      if (err) +	return err; +      LOCK (engine_info_lock); +    } + +  while (info && info->protocol != proto) +    info = info->next; + +  if (!info) +    result = 0; +  else +    result = _gpgme_compare_versions (info->version, +				      info->req_version); + +  UNLOCK (engine_info_lock);    return result ? 0 : gpg_error (GPG_ERR_INV_ENGINE);  } | 
