diff --git a/src/ChangeLog b/src/ChangeLog index 2215329a..37a1e2dc 100644 --- a/src/ChangeLog +++ b/src/ChangeLog @@ -1,3 +1,8 @@ +2010-11-19 Marcus Brinkmann + + * engine-gpgconf.c (_gpgme_conf_opt_change): Support + self-assignment. Requested by Marc Mutz. + 2010-11-17 Marcus Brinkmann * vasprintf.c (int_vasprintf) [HAVE_W32CE_SYSTEM]: Just use a diff --git a/src/engine-gpgconf.c b/src/engine-gpgconf.c index 990b1b94..44967f56 100644 --- a/src/engine-gpgconf.c +++ b/src/engine-gpgconf.c @@ -618,17 +618,22 @@ _gpgme_conf_arg_release (gpgme_conf_arg_t arg, gpgme_conf_type_t type) gpgme_error_t _gpgme_conf_opt_change (gpgme_conf_opt_t opt, int reset, gpgme_conf_arg_t arg) { - if (opt->new_value) - release_arg (opt->new_value, opt->alt_type); - if (reset) { - opt->new_value = NULL; + if (opt->new_value) + release_arg (opt->new_value, opt->alt_type); + opt->new_value = NULL; opt->change_value = 0; } else { - opt->new_value = arg; + /* Support self-assignment, for example for adding an item to an + existing list. */ + if (opt->new_value && arg != opt->new_value) + { + release_arg (opt->new_value, opt->alt_type); + opt->new_value = arg; + } opt->change_value = 1; } return 0;