Commit Diff


commit - 8a6837e8c0d174477fd6e8aca509c2107b414bf0
commit + 5bd21066c5fa3a39816416f93186c88832957330
blob - 0fc979dbfa087448e471722c7d5643c454e4a757
blob + 0c5609bd35afcea3b034d1aa09bf45d1c082617c
--- src/cmd/9term/9term.c
+++ src/cmd/9term/9term.c
@@ -59,6 +59,9 @@ threadmain(int argc, char *argv[])
 	ARGBEGIN{
 	default:
 		usage();
+	case 'l':
+		loginshell = TRUE;
+		break;
 	case 'f':
 		fontname = EARGF(usage());
 		break;
blob - 5b4f48c019211dde80498734b4a128194904d692
blob + c137b8f89f05d8075af127ecae443bd451f2c9c3
--- src/cmd/9term/rcstart.c
+++ src/cmd/9term/rcstart.c
@@ -3,6 +3,8 @@
 #include <libc.h>
 #include "term.h"
 
+int loginshell;
+
 static void
 sys(char *buf, int devnull)
 {
@@ -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;
 
@@ -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)
 	 */
@@ -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;
blob - 272b484791029182d58237c6b89c7d1968f0ce47
blob + c8d9926f705e7eb714562da1eba77a0095a4cfec
--- src/cmd/9term/term.h
+++ src/cmd/9term/term.h
@@ -7,3 +7,4 @@ extern int isecho(int);
 extern int setecho(int, int);
 extern int noecho;
 extern int getintr(int);
+extern int loginshell;