fixes from spafford
[unix-history] / usr / src / usr.bin / uucp / nio.c
CommitLineData
d5f442e1
RC
1#ifdef lint
2static char sccsid[] = "@(#)nio.c 5.1 (BERKELEY) %G%";
3#endif
4
5#include "uucp.h"
6#include <sys/param.h>
7
8extern unsigned short ntohs(), htons();
9
10nturnon()
11{
12 return(0);
13}
14
15nturnoff()
16{
17 return(0);
18}
19
20nwrmsg(type, str, fn)
21char type;
22register char *str;
23{
24 char bufr[BUFSIZ];
25 register char *cp = bufr;
26 unsigned short nlen;
27 int len;
28
29 for (*cp++ = type; *cp = *str++; cp++)
30 ;
31 if (cp[-1] == '\n')
32 *--cp = (char)0;
33 len = (cp - bufr) + 1;
34 nlen = htons(len);
35 if (write(fn, &nlen, sizeof nlen) != sizeof nlen ||
36 write(fn, bufr, len) != len)
37 return(FAIL);
38 return(0);
39}
40
41nrdmsg(str, fn)
42char *str;
43{
44 int count, cc;
45 unsigned short ncount;
46
47 if ((cc = read(fn, &ncount, sizeof ncount)) != sizeof ncount) {
48 DEBUG(7, "nrdmsg bad byte count read (%d)\n", cc);
49 return(FAIL);
50 }
51 count = ntohs(ncount);
52 DEBUG(7, "nrdmsg expecting %d bytes, got ", count);
53 if ((cc = read(fn, str, count)) != count) {
54 DEBUG(7, "%d\n", cc);
55 return(FAIL);
56 }
57 DEBUG(7, "them%c", '\n');
58 return(0);
59}
60
61/* call ultouch every TC calls to either grdblk or gwrblk -- rti!trt */
62#define TC 60
63static int tc = TC;
64
65nwrdata(fp1, fn)
66FILE *fp1;
67{
68 int len, cc;
69 unsigned short nlen;
70 char bufr[BUFSIZ], msg[64];
71 extern long time();
72 long bytes = 0L, secs = time((long *)0);
73
74 while ((len = fread(bufr, sizeof(char), BUFSIZ, fp1)) > 0) {
75 /* call ultouch occasionally -- rti!trt */
76 if (--tc < 0) {
77 tc = TC;
78 ultouch();
79 }
80 DEBUG(7, "nwrdata writing %d bytes, ", len);
81 nlen = htons((unsigned short)len);
82 if ((cc = write(fn, &nlen, sizeof nlen)) != sizeof nlen) {
83 DEBUG(7, "bad byte count write (%d)\n", cc);
84 return(FAIL);
85 }
86 if ((cc = write(fn, bufr, len)) != len) {
87 DEBUG(7, "wrote %d\n", cc);
88 return(FAIL);
89 }
90 DEBUG(7, "succeeded%c", '\n');
91 bytes += len;
92 }
93 nlen = 0;
94 DEBUG(7, "nwrdata writing eof marker, ", 0);
95 if ((cc = write(fn, &nlen, sizeof nlen)) != sizeof nlen) {
96 DEBUG(7, "bad byte count write (%d)\n", cc);
97 return(FAIL);
98 }
99 DEBUG(7, "succeeded%c", '\n');
100 secs = time((long *)0) - secs;
101 sprintf(msg, "sent data %ld bytes %ld secs", bytes, secs);
102 DEBUG(1, "%s\n", msg);
103 syslog(msg);
104 sysacct(bytes, secs);
105 return(0);
106}
107
108nrddata(fn, fp2)
109FILE *fp2;
110{
111 int len, cc;
112 unsigned short nlen;
113 char bufr[BUFSIZ], msg[64];
114 extern long time();
115 long bytes = 0L, secs = time((long *)0);
116
117 for (;;) {
118 /* call ultouch occasionally -- rti!trt */
119 if (--tc < 0 ) {
120 tc = TC;
121 ultouch();
122 }
123 if ((cc = read(fn, &nlen, sizeof nlen)) != sizeof nlen) {
124 DEBUG(7, "nrddata bad byte count read (%d)\n", cc);
125 return(FAIL);
126 }
127 len = ntohs(nlen);
128 if (len == 0)
129 break;
130 DEBUG(7, "nrddata expecting %d bytes, got ", len);
131 if ((cc = read(fn, bufr, len)) != len ||
132 fwrite(bufr, sizeof(char), len, fp2) != len) {
133 DEBUG(7, "%d\n", cc);
134 return(FAIL);
135 }
136 DEBUG(7, "them%c", '\n');
137 bytes += len;
138 }
139 secs = time((long *)0) - secs;
140 sprintf(msg, "received data %ld bytes %ld secs", bytes, secs);
141 DEBUG(1, "%s\n", msg);
142 syslog(msg);
143 sysacct(bytes, secs);
144 return(0);
145}