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;