diff --git a/wayback-session/wayback-session.c b/wayback-session/wayback-session.c
index 1cefed5..147e765 100644
--- a/wayback-session/wayback-session.c
+++ b/wayback-session/wayback-session.c
@@ -57,11 +57,19 @@ int main(int argc, char *argv[])
wayback_log_init("wayback-session", LOG_INFO, NULL);
char **session_cmd;
- char *xinitrc_path = NULL;
+
+ // This has to be char* to satisfy execvp
+ char *xinitrc_session_cmd[] = {
+ (char[]){ "sh" },
+ NULL, // Fill in with path to xinitrc if applicable
+ NULL,
+ };
+
signal(SIGCHLD, handle_child_exit);
if (argc == 1) {
- xinitrc_path = get_xinitrc_path();
+ xinitrc_session_cmd[1] = get_xinitrc_path();
+ session_cmd = xinitrc_session_cmd;
} else {
session_cmd = &argv[optind];
}
@@ -98,13 +106,8 @@ int main(int argc, char *argv[])
if (session_pid == 0) {
setenv("XDG_SESSION_TYPE", "x11", true);
setenv("DISPLAY", x_display, true);
- if (xinitrc_path != NULL) {
- execlp("sh", "sh", xinitrc_path, (void *)NULL);
- } else if (session_cmd != NULL) {
- execvp(session_cmd[0], session_cmd);
- }
+ execvp(session_cmd[0], session_cmd);
wayback_log(LOG_ERROR, "Failed to launch session");
- free(xinitrc_path);
exit(EXIT_FAILURE);
}