tdifferent login shell - plan9port - [fork] Plan 9 from user space
(HTM) git clone git://src.adamsgaard.dk/plan9port
(DIR) Log
(DIR) Files
(DIR) Refs
(DIR) README
(DIR) LICENSE
---
(DIR) commit 5bd21066c5fa3a39816416f93186c88832957330
(DIR) parent 8a6837e8c0d174477fd6e8aca509c2107b414bf0
(HTM) Author: rsc <devnull@localhost>
Date: Wed, 18 Jan 2006 23:11:00 +0000
different login shell
Diffstat:
M src/cmd/9term/9term.c | 3 +++
M src/cmd/9term/rcstart.c | 13 +++++++++++--
M src/cmd/9term/term.h | 1 +
3 files changed, 15 insertions(+), 2 deletions(-)
---
(DIR) diff --git a/src/cmd/9term/9term.c b/src/cmd/9term/9term.c
t@@ -59,6 +59,9 @@ threadmain(int argc, char *argv[])
ARGBEGIN{
default:
usage();
+ case 'l':
+ loginshell = TRUE;
+ break;
case 'f':
fontname = EARGF(usage());
break;
(DIR) diff --git a/src/cmd/9term/rcstart.c b/src/cmd/9term/rcstart.c
t@@ -3,6 +3,8 @@
#include <libc.h>
#include "term.h"
+int loginshell;
+
static void
sys(char *buf, int devnull)
{
t@@ -31,7 +33,7 @@ int
rcstart(int argc, char **argv, int *pfd, int *tfd)
{
int fd[2], i, pid;
- char *xargv[3];
+ char *cmd, *xargv[3];
char slave[256];
int sfd;
t@@ -44,6 +46,13 @@ rcstart(int argc, char **argv, int *pfd, int *tfd)
argv[1] = "-i";
argv[2] = 0;
}
+ cmd = argv[0];
+ if(loginshell){
+ argv[0] = malloc(strlen(cmd)+2);
+ strcpy(argv[0]+1, cmd);
+ argv[0][0] = '-';
+ }
+
/*
* fd0 is slave (tty), fd1 is master (pty)
*/
t@@ -85,7 +94,7 @@ rcstart(int argc, char **argv, int *pfd, int *tfd)
signal(SIGINT, SIG_DFL);
signal(SIGHUP, SIG_DFL);
signal(SIGTERM, SIG_DFL);
- execvp(argv[0], argv);
+ execvp(cmd, argv);
fprint(2, "exec %s failed: %r\n", argv[0]);
_exit(2);
break;
(DIR) diff --git a/src/cmd/9term/term.h b/src/cmd/9term/term.h
t@@ -7,3 +7,4 @@ extern int isecho(int);
extern int setecho(int, int);
extern int noecho;
extern int getintr(int);
+extern int loginshell;