diff options
Diffstat (limited to 'gpg-interface.c')
-rw-r--r-- | gpg-interface.c | 24 |
1 files changed, 5 insertions, 19 deletions
diff --git a/gpg-interface.c b/gpg-interface.c index c98035dffa..74f08a2a0e 100644 --- a/gpg-interface.c +++ b/gpg-interface.c @@ -151,40 +151,26 @@ const char *get_signing_key(void) int sign_buffer(struct strbuf *buffer, struct strbuf *signature, const char *signing_key) { struct child_process gpg = CHILD_PROCESS_INIT; - ssize_t len; + int ret; size_t i, j, bottom; - gpg.in = -1; - gpg.out = -1; argv_array_pushl(&gpg.args, gpg_program, "-bsau", signing_key, NULL); - if (start_command(&gpg)) - return error(_("could not run gpg.")); + bottom = signature->len; /* * When the username signingkey is bad, program could be terminated * because gpg exits without reading and then write gets SIGPIPE. */ sigchain_push(SIGPIPE, SIG_IGN); - - if (write_in_full(gpg.in, buffer->buf, buffer->len) != buffer->len) { - close(gpg.in); - close(gpg.out); - finish_command(&gpg); - return error(_("gpg did not accept the data")); - } - close(gpg.in); - - bottom = signature->len; - len = strbuf_read(signature, gpg.out, 1024); - close(gpg.out); - + ret = pipe_command(&gpg, buffer->buf, buffer->len, + signature, 1024, NULL, 0); sigchain_pop(SIGPIPE); - if (finish_command(&gpg) || !len || len < 0) + if (ret || signature->len == bottom) return error(_("gpg failed to sign the data")); /* Strip CR from the line endings, in case we are on Windows. */ |