static int dryRunStatus;
#endif /* !WIN32 */
+
+static bool
+virCommandHasError(virCommandPtr cmd)
+{
+ return !cmd || cmd->has_error != 0;
+}
+
+
+static int
+virCommandRaiseError(virCommandPtr cmd)
+{
+ if (!cmd || cmd->has_error != 0) {
+ virReportError(VIR_ERR_INTERNAL_ERROR, "%s",
+ _("invalid use of command API"));
+ return -1;
+ }
+
+ return 0;
+}
+
+
/*
* virCommandFDIsSet:
* @cmd: pointer to virCommand
virCommandPtr cmd = virCommandNew(binary);
const char *arg;
- if (!cmd || cmd->has_error)
+ if (virCommandHasError(cmd))
return cmd;
while ((arg = va_arg(list, const char *)) != NULL)
{
size_t i = 0;
- if (!cmd || cmd->has_error)
+ if (virCommandHasError(cmd))
return -1;
while (i < cmd->npassfd) {
void
virCommandSetPidFile(virCommandPtr cmd, const char *pidfile)
{
- if (!cmd || cmd->has_error)
+ if (virCommandHasError(cmd))
return;
VIR_FREE(cmd->pidfile);
void
virCommandSetGID(virCommandPtr cmd, gid_t gid)
{
- if (!cmd || cmd->has_error)
+ if (virCommandHasError(cmd))
return;
cmd->gid = gid;
void
virCommandSetUID(virCommandPtr cmd, uid_t uid)
{
- if (!cmd || cmd->has_error)
+ if (virCommandHasError(cmd))
return;
cmd->uid = uid;
void
virCommandSetMaxMemLock(virCommandPtr cmd, unsigned long long bytes)
{
- if (!cmd || cmd->has_error)
+ if (virCommandHasError(cmd))
return;
cmd->maxMemLock = bytes;
void
virCommandSetMaxProcesses(virCommandPtr cmd, unsigned int procs)
{
- if (!cmd || cmd->has_error)
+ if (virCommandHasError(cmd))
return;
cmd->maxProcesses = procs;
void
virCommandSetMaxFiles(virCommandPtr cmd, unsigned int files)
{
- if (!cmd || cmd->has_error)
+ if (virCommandHasError(cmd))
return;
cmd->maxFiles = files;
void virCommandSetMaxCoreSize(virCommandPtr cmd, unsigned long long bytes)
{
- if (!cmd || cmd->has_error)
+ if (virCommandHasError(cmd))
return;
cmd->maxCore = bytes;
void virCommandSetUmask(virCommandPtr cmd, int mask)
{
- if (!cmd || cmd->has_error)
+ if (virCommandHasError(cmd))
return;
cmd->mask = mask;
void
virCommandClearCaps(virCommandPtr cmd)
{
- if (!cmd || cmd->has_error)
+ if (virCommandHasError(cmd))
return;
cmd->flags |= VIR_EXEC_CLEAR_CAPS;
virCommandAllowCap(virCommandPtr cmd,
int capability)
{
- if (!cmd || cmd->has_error)
+ if (virCommandHasError(cmd))
return;
cmd->capabilities |= (1ULL << capability);
virCommandSetSELinuxLabel(virCommandPtr cmd,
const char *label G_GNUC_UNUSED)
{
- if (!cmd || cmd->has_error)
+ if (virCommandHasError(cmd))
return;
#if defined(WITH_SECDRIVER_SELINUX)
virCommandSetAppArmorProfile(virCommandPtr cmd,
const char *profile G_GNUC_UNUSED)
{
- if (!cmd || cmd->has_error)
+ if (virCommandHasError(cmd))
return;
#if defined(WITH_SECDRIVER_APPARMOR)
void
virCommandDaemonize(virCommandPtr cmd)
{
- if (!cmd || cmd->has_error)
+ if (virCommandHasError(cmd))
return;
cmd->flags |= VIR_EXEC_DAEMON;
void
virCommandNonblockingFDs(virCommandPtr cmd)
{
- if (!cmd || cmd->has_error)
+ if (virCommandHasError(cmd))
return;
cmd->flags |= VIR_EXEC_NONBLOCK;
void
virCommandRawStatus(virCommandPtr cmd)
{
- if (!cmd || cmd->has_error)
+ if (virCommandHasError(cmd))
return;
cmd->rawStatus = true;
char *env;
va_list list;
- if (!cmd || cmd->has_error)
+ if (virCommandHasError(cmd))
return;
va_start(list, format);
{
char *env;
- if (!cmd || cmd->has_error)
+ if (virCommandHasError(cmd))
return;
env = g_strdup(str);
virCommandAddEnvPass(virCommandPtr cmd, const char *name)
{
const char *value;
- if (!cmd || cmd->has_error)
+ if (virCommandHasError(cmd))
return;
value = getenv(name);
void
virCommandAddEnvPassCommon(virCommandPtr cmd)
{
- if (!cmd || cmd->has_error)
+ if (virCommandHasError(cmd))
return;
ignore_value(VIR_RESIZE_N(cmd->env, cmd->maxenv, cmd->nenv, 9));
void
virCommandAddEnvXDG(virCommandPtr cmd, const char *baseDir)
{
- if (!cmd || cmd->has_error)
+ if (virCommandHasError(cmd))
return;
ignore_value(VIR_RESIZE_N(cmd->env, cmd->maxenv, cmd->nenv, 3));
void
virCommandAddArg(virCommandPtr cmd, const char *val)
{
- if (!cmd || cmd->has_error)
+ if (virCommandHasError(cmd))
return;
if (val == NULL) {
{
g_autofree char *str = virBufferContentAndReset(buf);
- if (!cmd || cmd->has_error)
+ if (virCommandHasError(cmd))
return;
if (!str)
char *arg;
va_list list;
- if (!cmd || cmd->has_error)
+ if (virCommandHasError(cmd))
return;
va_start(list, format);
{
int narg = 0;
- if (!cmd || cmd->has_error)
+ if (virCommandHasError(cmd))
return;
if (vals[0] == NULL) {
va_list list;
int narg = 0;
- if (!cmd || cmd->has_error)
+ if (virCommandHasError(cmd))
return;
va_start(list, cmd);
void
virCommandSetWorkingDirectory(virCommandPtr cmd, const char *pwd)
{
- if (!cmd || cmd->has_error)
+ if (virCommandHasError(cmd))
return;
if (cmd->pwd) {
{
size_t i;
- if (!cmd || cmd->has_error)
+ if (virCommandHasError(cmd))
return -1;
if (fcntl(fd, F_SETFL, O_NONBLOCK) < 0) {
void
virCommandSetInputBuffer(virCommandPtr cmd, const char *inbuf)
{
- if (!cmd || cmd->has_error)
+ if (virCommandHasError(cmd))
return;
if (cmd->infd != -1 || cmd->inbuf) {
virCommandSetOutputBuffer(virCommandPtr cmd, char **outbuf)
{
*outbuf = NULL;
- if (!cmd || cmd->has_error)
+ if (virCommandHasError(cmd))
return;
if (cmd->outfdptr) {
virCommandSetErrorBuffer(virCommandPtr cmd, char **errbuf)
{
*errbuf = NULL;
- if (!cmd || cmd->has_error)
+ if (virCommandHasError(cmd))
return;
if (cmd->errfdptr) {
void
virCommandSetInputFD(virCommandPtr cmd, int infd)
{
- if (!cmd || cmd->has_error)
+ if (virCommandHasError(cmd))
return;
if (cmd->infd != -1 || cmd->inbuf) {
void
virCommandSetOutputFD(virCommandPtr cmd, int *outfd)
{
- if (!cmd || cmd->has_error)
+ if (virCommandHasError(cmd))
return;
if (cmd->outfdptr) {
void
virCommandSetErrorFD(virCommandPtr cmd, int *errfd)
{
- if (!cmd || cmd->has_error)
+ if (virCommandHasError(cmd))
return;
if (cmd->errfdptr) {
void
virCommandSetPreExecHook(virCommandPtr cmd, virExecHook hook, void *opaque)
{
- if (!cmd || cmd->has_error)
+ if (virCommandHasError(cmd))
return;
if (cmd->hook) {
/* Any errors will be reported later by virCommandRun, which means
* no command will be run, so there is nothing to log. */
- if (!cmd || cmd->has_error)
+ if (virCommandHasError(cmd))
return;
for (i = 0; i < cmd->nenv; i++) {
/* Cannot assume virCommandRun will be called; so report the error
* now. If virCommandRun is called, it will report the same error. */
- if (!cmd || cmd->has_error) {
- virReportError(VIR_ERR_INTERNAL_ERROR, "%s",
- _("invalid use of command API"));
+ if (virCommandHasError(cmd)) {
+ virCommandRaiseError(cmd);
return NULL;
}
{
size_t i;
- if (cmd->has_error) {
- virReportError(VIR_ERR_INTERNAL_ERROR, "%s",
- _("invalid use of command API"));
+ if (virCommandHasError(cmd)) {
+ virCommandRaiseError(cmd);
return -1;
}
*/
int virCommandExec(virCommandPtr cmd, gid_t *groups, int ngroups)
{
- if (!cmd || cmd->has_error) {
- virReportError(VIR_ERR_INTERNAL_ERROR, "%s",
- _("invalid use of command API"));
+ if (virCommandHasError(cmd)) {
+ virCommandRaiseError(cmd);
return -1;
}
char *str;
int tmpfd;
- if (!cmd || cmd->has_error) {
- virReportError(VIR_ERR_INTERNAL_ERROR, "%s",
- _("invalid use of command API"));
+ if (virCommandHasError(cmd)) {
+ virCommandRaiseError(cmd);
return -1;
}
bool synchronous = false;
int infd[2] = {-1, -1};
- if (!cmd || cmd->has_error) {
- virReportError(VIR_ERR_INTERNAL_ERROR, "%s",
- _("invalid use of command API"));
+ if (virCommandHasError(cmd)) {
+ virCommandRaiseError(cmd);
return -1;
}
int ret;
int status = 0;
- if (!cmd || cmd->has_error) {
- virReportError(VIR_ERR_INTERNAL_ERROR, "%s",
- _("invalid use of command API"));
+ if (virCommandHasError(cmd)) {
+ virCommandRaiseError(cmd);
return -1;
}
*/
void virCommandRequireHandshake(virCommandPtr cmd)
{
- if (!cmd || cmd->has_error)
+ if (virCommandHasError(cmd))
return;
if (cmd->handshake) {
char c;
int rv;
- if (!cmd || cmd->has_error || !cmd->handshake) {
+ if (virCommandHasError(cmd)) {
+ virCommandRaiseError(cmd);
+ return -1;
+ }
+
+ if (!cmd->handshake) {
virReportError(VIR_ERR_INTERNAL_ERROR, "%s",
_("invalid use of command API"));
return -1;
{
char c = '1';
- if (!cmd || cmd->has_error || !cmd->handshake) {
+ if (virCommandHasError(cmd)) {
+ virCommandRaiseError(cmd);
+ return -1;
+ }
+
+ if (!cmd->handshake) {
virReportError(VIR_ERR_INTERNAL_ERROR, "%s",
_("invalid use of command API"));
return -1;
unsigned char *buffer G_GNUC_UNUSED,
size_t buflen G_GNUC_UNUSED)
{
- if (!cmd || cmd->has_error)
+ if (virCommandHasError(cmd))
return -1;
cmd->has_error = ENOTSUP;
void virCommandRequireHandshake(virCommandPtr cmd)
{
- if (!cmd || cmd->has_error)
+ if (virCommandHasError(cmd))
return;
cmd->has_error = ENOSYS;
void
virCommandDoAsyncIO(virCommandPtr cmd)
{
- if (!cmd || cmd->has_error)
+ if (virCommandHasError(cmd))
return;
cmd->flags |= VIR_EXEC_ASYNC_IO | VIR_EXEC_NONBLOCK;