diff options
author | Werner Koch <[email protected]> | 2016-08-16 16:49:11 +0000 |
---|---|---|
committer | Werner Koch <[email protected]> | 2016-08-16 16:49:11 +0000 |
commit | b7b0e7b5bfefd51c8092ea54f262b18aebf78128 (patch) | |
tree | 0be66ab1e638e1095491743cb182e37d77ced480 /src/engine.c | |
parent | Qt: Add test for progress signal of encryptjob (diff) | |
download | gpgme-b7b0e7b5bfefd51c8092ea54f262b18aebf78128.tar.gz gpgme-b7b0e7b5bfefd51c8092ea54f262b18aebf78128.zip |
core: Simplify setting of dummy versions.
* src/engine.c (_gpgme_engine_info_release): Do not assert but free
FILE_NAME.
(gpgme_get_engine_info): Provide default for VERSION and REQ_VERSION.
Use calloc instead of malloc.
(_gpgme_set_engine_info): Ditto.
* src/engine-assuan.c (llass_get_version): Return NULL.
(llass_get_req_version): Ditto.
* src/engine-spawn.c (engspawn_get_version): Ditto.
(engspawn_get_req_version): Ditto.
* src/engine-uiserver.c (uiserver_get_version): Ditto.
(uiserver_get_req_version): Ditto.
Signed-off-by: Werner Koch <[email protected]>
Diffstat (limited to 'src/engine.c')
-rw-r--r-- | src/engine.c | 41 |
1 files changed, 34 insertions, 7 deletions
diff --git a/src/engine.c b/src/engine.c index 4e59adad..a7c016f0 100644 --- a/src/engine.c +++ b/src/engine.c @@ -93,7 +93,8 @@ engine_get_home_dir (gpgme_protocol_t proto) /* Get a malloced string containing the version number of the engine - for PROTOCOL. */ + * for PROTOCOL. If this function returns NULL for a valid protocol, + * it should be assumed that the engine is a pseudo engine. */ static char * engine_get_version (gpgme_protocol_t proto, const char *file_name) { @@ -107,7 +108,8 @@ engine_get_version (gpgme_protocol_t proto, const char *file_name) } -/* Get the required version number of the engine for PROTOCOL. */ +/* Get the required version number of the engine for PROTOCOL. This + * may be NULL. */ static const char * engine_get_req_version (gpgme_protocol_t proto) { @@ -164,8 +166,8 @@ _gpgme_engine_info_release (gpgme_engine_info_t info) { gpgme_engine_info_t next_info = info->next; - assert (info->file_name); - free (info->file_name); + if (info->file_name) + free (info->file_name); if (info->home_dir) free (info->home_dir); if (info->version) @@ -203,6 +205,7 @@ gpgme_get_engine_info (gpgme_engine_info_t *info) { const char *ofile_name = engine_get_file_name (proto_list[proto]); const char *ohome_dir = engine_get_home_dir (proto_list[proto]); + char *version = engine_get_version (proto_list[proto], NULL); char *file_name; char *home_dir; @@ -222,10 +225,18 @@ gpgme_get_engine_info (gpgme_engine_info_t *info) else home_dir = NULL; - *lastp = malloc (sizeof (*engine_info)); + *lastp = calloc (1, sizeof (*engine_info)); if (!*lastp && !err) err = gpg_error_from_syserror (); + /* Now set the dummy version for pseudo engines. */ + if (!err && !version) + { + version = strdup ("1.0.0"); + if (!version) + err = gpg_error_from_syserror (); + } + if (err) { _gpgme_engine_info_release (engine_info); @@ -235,6 +246,8 @@ gpgme_get_engine_info (gpgme_engine_info_t *info) free (file_name); if (home_dir) free (home_dir); + if (version) + free (version); UNLOCK (engine_info_lock); return err; @@ -243,8 +256,10 @@ gpgme_get_engine_info (gpgme_engine_info_t *info) (*lastp)->protocol = proto_list[proto]; (*lastp)->file_name = file_name; (*lastp)->home_dir = home_dir; - (*lastp)->version = engine_get_version (proto_list[proto], NULL); + (*lastp)->version = version; (*lastp)->req_version = engine_get_req_version (proto_list[proto]); + if (!(*lastp)->req_version) + (*lastp)->req_version = "1.0.0"; /* Dummy for pseudo engines. */ (*lastp)->next = NULL; lastp = &(*lastp)->next; } @@ -353,6 +368,7 @@ _gpgme_set_engine_info (gpgme_engine_info_t info, gpgme_protocol_t proto, { char *new_file_name; char *new_home_dir; + char *new_version; /* FIXME: Use some PROTO_MAX definition. */ if (proto > DIM (engine_ops)) @@ -401,6 +417,17 @@ _gpgme_set_engine_info (gpgme_engine_info_t info, gpgme_protocol_t proto, new_home_dir = NULL; } + new_version = engine_get_version (proto, new_file_name); + if (!new_version) + { + new_version = strdup ("1.0.0"); /* Fake one for dummy entries. */ + if (!new_version) + { + free (new_file_name); + free (new_home_dir); + } + } + /* Remove the old members. */ assert (info->file_name); free (info->file_name); @@ -412,7 +439,7 @@ _gpgme_set_engine_info (gpgme_engine_info_t info, gpgme_protocol_t proto, /* Install the new members. */ info->file_name = new_file_name; info->home_dir = new_home_dir; - info->version = engine_get_version (proto, new_file_name); + info->version = new_version; return 0; } |