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