common: Add a stream interface to 'sh-exectool'.
[gnupg.git] / common / sh-exectool.h
1 /* sh-exectool.h - Utility functions to execute a helper tool
2  * Copyright (C) 2015 g10 Code GmbH
3  *
4  * This file is part of GnuPG.
5  *
6  * GnuPG is free software; you can redistribute it and/or modify
7  * it under the terms of the GNU General Public License as published by
8  * the Free Software Foundation; either version 3 of the License, or
9  * (at your option) any later version.
10  *
11  * GnuPG is distributed in the hope that it will be useful,
12  * but WITHOUT ANY WARRANTY; without even the implied warranty of
13  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14  * GNU General Public License for more details.
15  *
16  * You should have received a copy of the GNU General Public License
17  * along with this program; if not, see <http://www.gnu.org/licenses/>.
18  */
19
20 #ifndef GNUPG_COMMON_SH_EXECTOOL_H
21 #define GNUPG_COMMON_SH_EXECTOOL_H
22
23 #include <gpg-error.h>
24
25 /* Run the program PGMNAME with the command line arguments given in
26    the NULL terminates array ARGV.  If INPUT_STRING is not NULL it
27    will be fed to stdin of the process.  stderr is logged using
28    log_info and the process' stdout is returned in a newly malloced
29    buffer RESULT with the length stored at RESULTLEN if not given as
30    NULL.  A hidden Nul is appended to the output.  On error NULL is
31    stored at RESULT, a diagnostic is printed, and an error code
32    returned.  */
33 gpg_error_t sh_exec_tool (const char *pgmname, const char *argv[],
34                           const char *input_string,
35                           char **result, size_t *resultlen);
36
37 /* Run the program PGMNAME with the command line arguments given in
38    the NULL terminates array ARGV.  If INPUT is not NULL it will be
39    fed to stdin of the process.  stderr is logged using log_info and
40    the process' stdout is written to OUTPUT.  On error a diagnostic is
41    printed, and an error code returned.  */
42 gpg_error_t sh_exec_tool_stream (const char *pgmname, const char *argv[],
43                                  estream_t input,
44                                  estream_t output);
45
46 #endif /* GNUPG_COMMON_SH_EXECTOOL_H */