|
|
1.1 root 1: #ifndef lint
2: static char *sccsid = "@(#)netio.c 1.7 87/07/31";
3: #endif lint
4:
5: #include <stdio.h>
6: #include <setjmp.h>
7: #include <sysexits.h>
8:
9: #include "smtp.h"
10:
11: char *strcpy(), *strncat();
12:
13: int
14: tgets(line, size, fi) /* fgets from TCP */
15: char *line;
16: int size;
17: FILE *fi;
18: {
19: register char *cr, *rp;
20:
21: *line = 0;
22: rp = fgets(line, size, fi);
23: if (ferror(fi)) {
24: perror("error reading from smtp");
25: bomb(EX_IOERR);
26: }
27: if (feof(fi)) {
28: perror("eof from smtp");
29: bomb(EX_IOERR);
30: }
31: if (rp==NULL) {
32: perror("Eof reading from smtp");
33: bomb(EX_IOERR);
34: }
35:
36: /* convert \r\n -> \n */
37: cr = line + strlen(line) - 2;
38: if (cr >= line && *cr == '\r' && *(cr+1) == '\n') { /* CRLF there? */
39: *cr++ = '\n';
40: *cr = 0;
41: } else /* no CRLF present */
42: cr += 2; /* point at NUL byte */
43:
44: if (feof(fi)) {
45: perror("read eof from smtp");
46: bomb(EX_IOERR);
47: }
48: return cr - line;
49: }
50:
51: int
52: tputs(line, fo) /* fputs to TCP */
53: char *line;
54: FILE *fo;
55: {
56: char buf[MAXSTR];
57: register char *nl;
58:
59: (void) strcpy(buf, line);
60: /* replace terminating \n by \r\n */
61: nl = buf + strlen(buf) - 1; /* presumably \n */
62: if (nl >= buf && *nl=='\n') { /* if it is ... */
63: *nl++ = '\r';
64: *nl++ = '\n';
65: *nl = 0;
66: } else
67: printf("unterminated line: <%s>\n", buf);
68:
69: (void) fputs(buf, fo);
70: (void) fflush(fo);
71: if (ferror(fo)) {
72: perror("error writing to smtp");
73: bomb(EX_IOERR);
74: }
75: return 0;
76: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.