static gpgme_error_t verify_status_handler (void *priv, gpgme_status_code_t code, char *args) { gpgme_error_t err; err = _gpgme_progress_status_handler (priv, code, args); if (!err) err = _gpgme_verify_status_handler (priv, code, args); return err; }
static gpgme_error_t genkey_status_handler(void *priv, gpgme_status_code_t code, char *args) { gpgme_ctx_t ctx = (gpgme_ctx_t) priv; gpgme_error_t err; void *hook; op_data_t opd; /* Pipe the status code through the progress status handler. */ err = _gpgme_progress_status_handler(ctx, code, args); if(err) return err; err = _gpgme_op_data_lookup(ctx, OPDATA_GENKEY, &hook, -1, NULL); opd = hook; if(err) return err; switch(code) { case GPGME_STATUS_KEY_CREATED: if(args && *args) { if(*args == 'B' || *args == 'P') opd->result.primary = 1; if(*args == 'B' || *args == 'S') opd->result.sub = 1; if(args[1] == ' ') { if(opd->result.fpr) free(opd->result.fpr); opd->result.fpr = strdup(&args[2]); if(!opd->result.fpr) return gpg_error_from_errno(errno); } } break; case GPGME_STATUS_EOF: /* FIXME: Should return some more useful error value. */ if(!opd->result.primary && !opd->result.sub) return gpg_error(GPG_ERR_GENERAL); break; default: break; } return 0; }