#include <parlib/event.h>
#include <parlib/parlib.h>
#include <parlib/uthread.h>

#include <assert.h>
#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <sys/wait.h>

static void ev_handler(struct event_msg *msg, unsigned int ev_type, void *data)
{
	int rv;

	assert(msg != NULL);
	assert(ev_type == EV_USER_IPI);
	(void)data;
	rv = msg->ev_arg1;
	exit(rv);
}

int main(int argc, char *argv[], char *envp[])
{
	struct event_queue *evq, *triggered;
	pid_t pid;
	struct event_msg msg;
	int wstatus;

	register_ev_handler(EV_USER_IPI, ev_handler, 0);
	evq = get_eventq(EV_MBOX_UCQ);
	evq->ev_flags = EVENT_IPI | EVENT_INDIR | EVENT_SPAM_INDIR | EVENT_WAKEUP;
	register_kevent_q(evq, EV_USER_IPI);

	pid = create_child_with_stdfds(argv[1], argc - 1, argv + 1, envp);
	if (pid < 0) {
		perror("child creation failed");
		exit(-1);
	}
	sys_proc_run(pid);

	waitpid(pid, &wstatus, 0);
	if (!WIFEXITED(wstatus)) {
		fprintf(stderr, "child %s did not exit normally!\n", argv[1]);
		return -1;
	}
	return WEXITSTATUS(wstatus);
}
