Annotation of 43BSDReno/contrib/mh/uip/ttym.c, revision 1.1.1.1

1.1       root        1: /* ttym.c - miscellaneous routines */
                      2: 
                      3: #include "../h/mh.h"
                      4: #include <pwd.h>
                      5: #ifndef        NSIG
                      6: #include <signal.h>
                      7: #endif NSIG
                      8: #include <sys/time.h>
                      9: 
                     10: static int ttyf();
                     11: 
                     12: /*  */
                     13: 
                     14: 
                     15: static void
                     16: ttym(fd, command, line, user, vec)
                     17:        int fd;
                     18:        char *command, *line, *user, **vec;
                     19: {
                     20:     SIGDECL (*pstat)();
                     21:     char   *ap,
                     22:            *term,
                     23:            *myself,
                     24:            *getlogin (),
                     25:            *rindex (),
                     26:            *ttyname ();
                     27:     struct passwd  *pw,
                     28:                    *getpwuid ();
                     29: 
                     30:     if ((term = ap = ttyname (2)) && (term = rindex (term, '/')))
                     31:        term++;
                     32:     if (term == NULL || *term == NULL)
                     33:        term = ap;
                     34:     if ((myself = getlogin ()) == NULL || *myself == NULL)
                     35:        myself = (pw = getpwuid (getuid ())) ? pw -> pw_name : NULL;
                     36: 
                     37:     pstat = signal (SIGPIPE, SIG_IGN);
                     38:     (void) write (fd, command, strlen (command));
                     39:     (void) write (fd, "", 1);
                     40: 
                     41:     if (term)
                     42:        (void) write (fd, term, strlen (term));
                     43:     (void) write (fd, "", 1);
                     44: 
                     45:     if (myself)
                     46:        (void) write (fd, myself, strlen (myself));
                     47:     (void) write (fd, "", 1);
                     48: 
                     49:     if (line && *line)
                     50:        (void) write (fd, line, strlen (line));
                     51:     (void) write (fd, "", 1);
                     52: 
                     53:     if (user && *user)
                     54:        (void) write (fd, user, strlen (user));
                     55:     (void) write (fd, "", 1);
                     56: 
                     57:     if (vec)
                     58:        while (ap = *vec++) {
                     59:            (void) write (fd, ap, strlen (ap));
                     60:            (void) write (fd, "", 1);
                     61:        }
                     62: 
                     63:     (void) write (fd, "", 1);
                     64:     (void) signal (SIGPIPE, pstat);
                     65: }
                     66: 
                     67: /*  */
                     68: 
                     69: static int
                     70: ttyv(fd)
                     71:        int fd;
                     72: {
                     73:     int     ifds,
                     74:            nbits;
                     75:     char    c;
                     76:     struct timeval tv;
                     77: 
                     78:     ifds = 1 << fd;
                     79:     nbits = getdtablesize();
                     80:     tv.tv_sec = SMLWAIT;
                     81:     tv.tv_usec = 0;
                     82:     if (select (nbits, &ifds, (int *) 0, (int *) 0, &tv) <= 0
                     83:            || read (fd, &c, 1) != 1)
                     84:        return NOTOK;
                     85:     if (c == NULL)
                     86:        return fd;
                     87:     putc (c, stderr);
                     88: 
                     89:     (void) ttyf (fd, stderr);
                     90:     return NOTOK;
                     91: }
                     92: 
                     93: 
                     94: static int
                     95: ttyf(fd, f)
                     96:        int fd;
                     97:        FILE *f;
                     98: {
                     99:     int     i;
                    100:     char    buffer[BUFSIZ];
                    101: 
                    102:     while ((i = read (fd, buffer, sizeof buffer)) > 0)
                    103:        (void) fwrite (buffer, sizeof (char), i, f);
                    104:     return i;
                    105: }

unix.superglobalmegacorp.com

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