main: allow user to override shell on the command line

This commit is contained in:
Daniel Eklöf 2019-07-17 09:55:36 +02:00
parent 2046dc0fbd
commit c11cc2be57
No known key found for this signature in database
GPG key ID: 5BBD4992C116573F
3 changed files with 21 additions and 11 deletions

21
main.c
View file

@ -30,6 +30,7 @@
#include "shm.h"
#include "slave.h"
#include "terminal.h"
#include "tokenize.h"
#include "vt.h"
#define min(x, y) ((x) < (y) ? (x) : (y))
@ -305,6 +306,9 @@ main(int argc, char *const *argv)
}
}
argc -= optind;
argv += optind;
setlocale(LC_ALL, "");
setenv("TERM", "xterm-direct", 1); /* TODO: configurable */
@ -558,7 +562,19 @@ main(int argc, char *const *argv)
case 0:
/* Child */
close(fork_pipe[0]); /* Close read end */
slave_spawn(term.ptmx, conf.shell, fork_pipe[1]);
char **_shell_argv = NULL;
char *const *shell_argv = argv;
if (argc == 0) {
if (!tokenize_cmdline(conf.shell, &_shell_argv)) {
(void)!write(fork_pipe[1], &errno, sizeof(errno));
_exit(0);
}
shell_argv = _shell_argv;
}
slave_spawn(term.ptmx, shell_argv, fork_pipe[1]);
assert(false);
break;
@ -576,7 +592,8 @@ main(int argc, char *const *argv)
LOG_ERRNO("failed to read from pipe");
goto out;
} else if (ret == sizeof(_errno)) {
LOG_ERRNO("%s: failed to execute", conf.shell);
LOG_ERRNO(
"%s: failed to execute", argc == 0 ? conf.shell : argv[0]);
goto out;
} else
LOG_DBG("%s: successfully started", conf.shell);

View file

@ -11,18 +11,13 @@
#define LOG_MODULE "slave"
#define LOG_ENABLE_DBG 0
#include "log.h"
#include "tokenize.h"
void
slave_spawn(int ptmx, char *cmd, int err_fd)
slave_spawn(int ptmx, char *const argv[], int err_fd)
{
int pts = -1;
const char *pts_name = ptsname(ptmx);
char **argv = NULL;
if (!tokenize_cmdline(cmd, &argv))
goto err;
if (grantpt(ptmx) == -1) {
LOG_ERRNO("failed to grantpt()");
goto err;
@ -61,8 +56,6 @@ slave_spawn(int ptmx, char *cmd, int err_fd)
err:
(void)!write(err_fd, &errno, sizeof(errno));
if (argv)
free(argv);
if (pts != -1)
close(pts);
if (ptmx != -1)

View file

@ -1,4 +1,4 @@
#pragma once
#include <stdbool.h>
void slave_spawn(int ptmx, char *cmd, int err_fd);
void slave_spawn(int ptmx, char *const argv[], int err_fd);