view src/lib/execv-const.c @ 22664:fea53c2725c0

director: Fix director_max_parallel_moves/kicks type Should be uint, not time.
author Timo Sirainen <timo.sirainen@dovecot.fi>
date Thu, 09 Nov 2017 12:24:16 +0200
parents 2e2563132d5f
children cb108f786fb4
line wrap: on
line source

/* Copyright (c) 2010-2017 Dovecot authors, see the included COPYING file */

#include "lib.h"
#include "execv-const.h"

#include <unistd.h>

static char **argv_drop_const(const char *const argv[])
{
	char **ret;
	unsigned int i, count;

	for (count = 0; argv[count] != NULL; count++) ;

	ret = t_new(char *, count + 1);
	for (i = 0; i < count; i++)
		ret[i] = t_strdup_noconst(argv[i]);
	return ret;
}

void execv_const(const char *path, const char *const argv[])
{
	(void)execv(path, argv_drop_const(argv));
	i_fatal_status(errno == ENOMEM ? FATAL_OUTOFMEM : FATAL_EXEC,
		       "execv(%s) failed: %m", path);
}

void execvp_const(const char *file, const char *const argv[])
{
	(void)execvp(file, argv_drop_const(argv));
	i_fatal_status(errno == ENOMEM ? FATAL_OUTOFMEM : FATAL_EXEC,
		       "execvp(%s) failed: %m", file);
}