diff options
author | Richard W.M. Jones <rjones@redhat.com> | 2012-10-17 14:31:33 +0100 |
---|---|---|
committer | Richard W.M. Jones <rjones@redhat.com> | 2012-10-18 21:52:08 +0100 |
commit | 2e90f4312928f332f8997b52be3fe54f20920242 (patch) | |
tree | fc5365fbcd79d5ba261bb7c72b251f5531fb75ce /src/guestfs-internal.h | |
parent | 2dab72794eef55f941cc61f1f34baa9fc7988298 (diff) | |
download | libguestfs-2e90f4312928f332f8997b52be3fe54f20920242.tar.gz libguestfs-2e90f4312928f332f8997b52be3fe54f20920242.tar.xz libguestfs-2e90f4312928f332f8997b52be3fe54f20920242.zip |
lib: Add a new 'command' mini-library for running external commands.
This is a wrapper or mini-library for running external command,
loosely based on libvirt's virCommand interface.
Amongst the advantages are:
- Can redirect errors into the error log (RHBZ#713678).
- Can redirect output into a callback function.
- Handles shell quoting properly.
- Safely resets signal handlers, closes file descriptors, etc.
- Single place where we can implement other improvements in future.
Diffstat (limited to 'src/guestfs-internal.h')
-rw-r--r-- | src/guestfs-internal.h | 18 |
1 files changed, 18 insertions, 0 deletions
diff --git a/src/guestfs-internal.h b/src/guestfs-internal.h index 90954f18..cf810e18 100644 --- a/src/guestfs-internal.h +++ b/src/guestfs-internal.h @@ -583,4 +583,22 @@ extern void guestfs___free_fuse (guestfs_h *g); extern virConnectPtr guestfs___open_libvirt_connection (guestfs_h *g, const char *uri, unsigned int flags); #endif +/* command.c */ +struct command; +typedef void (*cmd_stdout_callback) (guestfs_h *g, void *data, const char *line, size_t len); +extern struct command *guestfs___new_command (guestfs_h *g); +extern void guestfs___cmd_add_arg (struct command *, const char *arg); +extern void guestfs___cmd_add_arg_format (struct command *, const char *fs, ...) + __attribute__((format (printf,2,3))); +extern void guestfs___cmd_add_string_unquoted (struct command *, const char *str); +extern void guestfs___cmd_add_string_quoted (struct command *, const char *str); +extern void guestfs___cmd_set_stdout_callback (struct command *, cmd_stdout_callback stdout_callback, void *data, unsigned flags); +#define CMD_STDOUT_FLAG_LINE_BUFFER 0 +#define CMD_STDOUT_FLAG_UNBUFFERED 1 +#define CMD_STDOUT_FLAG_WHOLE_BUFFER 2 +extern void guestfs___cmd_set_stderr_to_stdout (struct command *); +extern void guestfs___cmd_clear_capture_errors (struct command *); +extern int guestfs___cmd_run (struct command *); +extern void guestfs___cmd_close (struct command *); + #endif /* GUESTFS_INTERNAL_H_ */ |