#include "defs.h"

static void
printargv(struct tcb *tcp, long addr)
{
	union {
		unsigned int p32;
		unsigned long p64;
		char data[sizeof(long)];
	} cp;
	const char *sep;
	unsigned int n = 0;
	const unsigned wordsize = current_wordsize;

	cp.p64 = 1;
	for (sep = ""; !abbrev(tcp) || n < max_strlen / 2; sep = ", ", ++n) {
		if (umoven_or_printaddr(tcp, addr, wordsize, cp.data))
			return;
		if (wordsize == 4)
			cp.p64 = cp.p32;
		if (cp.p64 == 0)
			break;
		tprints(sep);
		printstr(tcp, cp.p64, -1);
		addr += wordsize;
	}
	if (cp.p64)
		tprintf("%s...", sep);
}

static void
printargc(const char *fmt, struct tcb *tcp, long addr)
{
	int count;
	char *cp;

	for (count = 0; umove(tcp, addr, &cp) >= 0 && cp != NULL; count++) {
		addr += sizeof(char *);
	}
	tprintf(fmt, count, count == 1 ? "" : "s");
}

SYS_FUNC(execve)
{
	printpath(tcp, tcp->u_arg[0]);
	tprints(", ");

	if (!tcp->u_arg[1] || !verbose(tcp))
		printaddr(tcp->u_arg[1]);
	else {
		tprints("[");
		printargv(tcp, tcp->u_arg[1]);
		tprints("]");
	}
	tprints(", ");

	if (!tcp->u_arg[2] || !verbose(tcp))
		printaddr(tcp->u_arg[2]);
	else if (abbrev(tcp))
		printargc("[/* %d var%s */]", tcp, tcp->u_arg[2]);
	else {
		tprints("[");
		printargv(tcp, tcp->u_arg[2]);
		tprints("]");
	}

	return RVAL_DECODED;
}

#if defined(SPARC) || defined(SPARC64)
SYS_FUNC(execv)
{
	printpath(tcp, tcp->u_arg[0]);
	tprints(", ");
	if (!tcp->u_arg[1] || !verbose(tcp))
		printaddr(tcp->u_arg[1]);
	else {
		tprints("[");
		printargv(tcp, tcp->u_arg[1]);
		tprints("]");
	}

	return RVAL_DECODED;
}
#endif /* SPARC || SPARC64 */
