comparison uip/ttym.c @ 0:bce86c4163a3

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