| #include <stdlib.h> |
| #include <string.h> |
| #include <unistd.h> |
| #include <sys/types.h> |
| |
| #include "nls.h" |
| #include "c.h" |
| #include "xalloc.h" |
| |
| #include "exec_shell.h" |
| |
| #define DEFAULT_SHELL "/bin/sh" |
| |
| void __attribute__((__noreturn__)) exec_shell(void) { |
| const char *shell = getenv("SHELL"), *shell_basename; |
| char *arg0; |
| if (!shell) |
| shell = DEFAULT_SHELL; |
| |
| shell_basename = basename(shell); |
| arg0 = xmalloc(strlen(shell_basename) + 2); |
| arg0[0] = '-'; |
| strcpy(arg0 + 1, shell_basename); |
| |
| execl(shell, arg0, NULL); |
| err(EXIT_FAILURE, _("failed to execute %s"), shell); |
| } |