diff options
Diffstat (limited to '')
| -rw-r--r-- | src/engine-gpgconf.c | 24 | ||||
| -rw-r--r-- | tests/gpg/t-gpgconf.c | 31 | 
2 files changed, 32 insertions, 23 deletions
| diff --git a/src/engine-gpgconf.c b/src/engine-gpgconf.c index 2b0f448a..84d8df7b 100644 --- a/src/engine-gpgconf.c +++ b/src/engine-gpgconf.c @@ -986,20 +986,25 @@ gpgconf_conf_save (void *engine, gpgme_conf_comp_t comp)  } +struct gpgconf_config_dir_s +{ +  const char *what; +  char *result; +}; +  static gpgme_error_t  gpgconf_config_dir_cb (void *hook, char *line)  {    /* This is an input- and output-parameter.  */ -  char **str_p = (char **) hook; -  char *what = *str_p; -  int len = strlen(what); +  struct gpgconf_config_dir_s *data = (char **) hook; +  int len = strlen(data->what); -  if (!strncmp(line, what, len) && line[len] == ':') +  if (!strncmp(line, data->what, len) && line[len] == ':')      {        char *result = strdup(&line[len + 1]);        if (!result)  	return gpg_error_from_syserror (); -      *str_p = result; +      data->result = result;        return gpg_error(GPG_ERR_USER_1);      }    return 0; @@ -1010,15 +1015,16 @@ static gpgme_error_t  gpgconf_conf_dir (void *engine, const char *what, char **result)  {    gpgme_error_t err; -  char *res = what; +  struct gpgconf_config_dir_s data; -  *result = NULL; +  data.what = what; +  data.result = NULL;    err = gpgconf_read (engine, "--list-dirs", NULL, -		      gpgconf_config_dir_cb, &res); +		      gpgconf_config_dir_cb, &data);    if (gpg_err_code (err) == GPG_ERR_USER_1)      {        /* This signals to use that a result was found.  */ -      *result = res; +      *result = data.result;        return 0;      } diff --git a/tests/gpg/t-gpgconf.c b/tests/gpg/t-gpgconf.c index 8c81de69..5eccedeb 100644 --- a/tests/gpg/t-gpgconf.c +++ b/tests/gpg/t-gpgconf.c @@ -263,22 +263,25 @@ main (void)    err = gpgme_new (&ctx);    fail_if_err (err); -  /* Let's check getting the agent-socket directory for different homedirs.  */ -  char *result1 = NULL; -  err = gpgme_ctx_set_engine_info (ctx, GPGME_PROTOCOL_GPGCONF, NULL, "/tmp/foo"); -  fail_if_err (err); -  err = gpgme_op_conf_dir (ctx, "agent-socket", &result1); -  fail_if_err (err); - -  char *result2 = NULL; -  err = gpgme_ctx_set_engine_info (ctx, GPGME_PROTOCOL_GPGCONF, NULL, NULL); -  fail_if_err (err); -  err = gpgme_op_conf_dir (ctx, "agent-socket", &result2); -  fail_if_err (err); +  { +    /* Let's check getting the agent-socket directory for different homedirs.  */ +    char *result1 = NULL; +    char *result2 = NULL; +    err = gpgme_ctx_set_engine_info (ctx, GPGME_PROTOCOL_GPGCONF, NULL, "/tmp/foo"); +    fail_if_err (err); +    err = gpgme_op_conf_dir (ctx, "agent-socket", &result1); +    fail_if_err (err); -  /* They have to be different.  */ -  test (strcmp(result1, result2)); +    err = gpgme_ctx_set_engine_info (ctx, GPGME_PROTOCOL_GPGCONF, NULL, NULL); +    fail_if_err (err); +    err = gpgme_op_conf_dir (ctx, "agent-socket", &result2); +    fail_if_err (err); +    /* They have to be different.  */ +    test (strcmp(result1, result2)); +    gpgme_free (result1); +    gpgme_free (result2); +  }    err = gpgme_op_conf_load (ctx, &conf);    fail_if_err (err); | 
