diff options
Diffstat (limited to '')
| -rw-r--r-- | src/engine-gpgsm.c | 11 | ||||
| -rw-r--r-- | src/import.c | 4 | 
2 files changed, 11 insertions, 4 deletions
diff --git a/src/engine-gpgsm.c b/src/engine-gpgsm.c index 20bd88f4..d5d29010 100644 --- a/src/engine-gpgsm.c +++ b/src/engine-gpgsm.c @@ -593,7 +593,7 @@ gpgsm_assuan_simple_command (engine_gpgsm_t gpgsm, const char *cmd,      {        err = assuan_read_line (ctx, &line, &linelen);        if (err) -	return err; +	break;        if (*line == '#' || !linelen)  	continue; @@ -601,7 +601,7 @@ gpgsm_assuan_simple_command (engine_gpgsm_t gpgsm, const char *cmd,        if (linelen >= 2  	  && line[0] == 'O' && line[1] == 'K'  	  && (line[2] == '\0' || line[2] == ' ')) -	return cb_err; +	break;        else if (linelen >= 4  	  && line[0] == 'E' && line[1] == 'R' && line[2] == 'R'  	  && line[3] == ' ') @@ -610,6 +610,7 @@ gpgsm_assuan_simple_command (engine_gpgsm_t gpgsm, const char *cmd,               more related to gpgme and thus probably more important               than the error returned by the engine.  */            err = cb_err? cb_err : atoi (&line[4]); +          cb_err = 0;          }        else if (linelen >= 2  	       && line[0] == 'S' && line[1] == ' ') @@ -646,10 +647,16 @@ gpgsm_assuan_simple_command (engine_gpgsm_t gpgsm, const char *cmd,               to stop.  As with ERR we prefer a status callback               generated error code, though.  */            err = cb_err ? cb_err : gpg_error (GPG_ERR_GENERAL); +          cb_err = 0;          }      }    while (!err); +  /* We only want the first error from the status handler, thus we +   * take the one saved in CB_ERR. */ +  if (!err && cb_err) +    err = cb_err; +    return err;  } diff --git a/src/import.c b/src/import.c index 6233a155..4173fe91 100644 --- a/src/import.c +++ b/src/import.c @@ -193,7 +193,7 @@ parse_import_res (char *args, gpgme_import_result_t result)  #define PARSE_NEXT(x)					\    (x) = strtol (args, &tail, 0);			\ -  if (errno || args == tail || *tail != ' ')		\ +  if (errno || args == tail || !(*tail == ' ' || !*tail))   \      /* The crypto backend does not behave.  */		\      return trace_gpg_error (GPG_ERR_INV_ENGINE);        \    args = tail; @@ -249,7 +249,7 @@ import_status_handler (void *priv, gpgme_status_code_t code, char *args)      default:        break;      } -  return 0; +  return err;  }  | 
