Annotation of coherent/g/usr/bin/script/server.c, revision 1.1

1.1     ! root        1: /*
        !             2:  * File:       server.c
        !             3:  *
        !             4:  * Purpose:    main program for recording process
        !             5:  *
        !             6:  * $Log:       server.c,v $
        !             7:  * Revision 1.2  92/06/15  10:04:57  bin
        !             8:  * *** empty log message ***
        !             9:  * 
        !            10:  */
        !            11: 
        !            12: /*
        !            13:  * Includes.
        !            14:  */
        !            15: #include <stdio.h>
        !            16: 
        !            17: /*
        !            18:  * Definitions.
        !            19:  *     Constants.
        !            20:  *     Macros with argument lists.
        !            21:  *     Typedefs.
        !            22:  *     Enums.
        !            23:  */
        !            24: 
        !            25: typedef unsigned char uchar;
        !            26: typedef unsigned int  uint;
        !            27: typedef unsigned long ulong;
        !            28: 
        !            29: /*
        !            30:  * Functions.
        !            31:  *     Import Functions.
        !            32:  *     Export Functions.
        !            33:  *     Local Functions.
        !            34:  */
        !            35: main();
        !            36: 
        !            37: /*
        !            38:  * Global Data.
        !            39:  *     Import Variables.
        !            40:  *     Export Variables.
        !            41:  *     Local Variables.
        !            42:  */
        !            43: 
        !            44: /*
        !            45:  * main()
        !            46:  *
        !            47:  * Usage is script [-l logfile] [command]
        !            48:  *
        !            49:  * All output from the specified command, including echoing of user
        !            50:  * input, is recorded to the logfile.
        !            51:  *
        !            52:  * "logfile" defaults to L.pid, where "pid" is the number of the
        !            53:  * recording process.
        !            54:  *
        !            55:  * "command" defaults to the whatever environment variable SHELL
        !            56:  * specifies, and to "/bin/sh" if SHELL is not set.
        !            57:  */
        !            58: main(argc, argv, envp)
        !            59: int argc;
        !            60: char ** argv, ** envp;
        !            61: {
        !            62:        int master_fd, slave_fd, childpid;
        !            63:        static char master_pty[32];
        !            64:        static char slave_pty[32];
        !            65:        static char log_file[60];
        !            66:        int argn, n;
        !            67: 
        !            68:        sprintf(log_file, "Log.%d", getpid());
        !            69:        argv++;
        !            70:        for (argn = 1; argn < argc; argn++, argv++) {
        !            71:                if (strncmp(*argv, "-l", 2) == 0) {
        !            72:                        if (strlen(*argv) > 2) {
        !            73:                                if (strlen(*argv) < 62)
        !            74:                                        strcpy(log_file, *argv + 2);
        !            75:                        } else
        !            76:                                strcpy(log_file, *++argv);
        !            77:                        continue;
        !            78:                }
        !            79:                break;
        !            80:        }
        !            81: 
        !            82:        if (!isatty(0) || !isatty(1)) {
        !            83:                fprintf(stderr, "stdin and stdout must be tty devices\n");
        !            84:                exit(1);
        !            85:        }
        !            86: 
        !            87:        if ((master_fd = getpseudotty(master_pty, slave_pty)) < 0) {
        !            88:                fprintf(stderr, "can't open master pty\n");
        !            89:                exit(1);
        !            90:        }
        !            91: 
        !            92:        if (tty_getmode(0) < 0) {
        !            93:                fprintf(stderr, "can't getmode of stdin\n");
        !            94:                exit(1);
        !            95:        }
        !            96: 
        !            97:        if ((childpid = fork()) < 0) {
        !            98:                fprintf(stderr, "forking error\n");
        !            99:                exit(1);
        !           100:        }
        !           101: 
        !           102:        if (childpid == 0) { /* child */
        !           103:                setpgrp();
        !           104: 
        !           105:                if ((slave_fd = open(slave_pty, 2)) < 0) {
        !           106:                        fprintf(stderr, "can't open slave pty\n");
        !           107:                        exit(1);
        !           108:                }
        !           109:                close(master_fd);
        !           110: 
        !           111:                if (tty_setmode(slave_fd) < 0) {
        !           112:                        fprintf(stderr, "can't setmode of slave fd\n");
        !           113:                        exit(1);
        !           114:                }
        !           115:                exec_shell(slave_fd, argv, envp);
        !           116:        }
        !           117: 
        !           118:        if (tty_raw(0) < 0) {
        !           119:                fprintf(stderr, "tty_raw error on stdin\n");
        !           120:                exit(1);
        !           121:        }
        !           122: 
        !           123:        pass_all(master_fd, log_file);
        !           124: 
        !           125:        if (tty_reset(0) < 0) {
        !           126:                fprintf(stderr, "tty_reset error on stdin\n");
        !           127:                exit(1);
        !           128:        }
        !           129: 
        !           130:        exit(0);
        !           131: }

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.