|
|
1.1 ! root 1: /* /sccs/src/cmd/uucp/s.imsg.c ! 2: imsg.c 1.1 8/30/84 17:37:29 ! 3: */ ! 4: #include "uucp.h" ! 5: VERSION(@(#)imsg.c 1.1); ! 6: ! 7: #define MSYNC '\020' ! 8: /* maximum likely message - make sure you don't get run away input */ ! 9: #define MAXIMSG 256 ! 10: ! 11: /* ! 12: * read message routine used before a ! 13: * protocol is agreed upon. ! 14: * msg -> address of input buffer ! 15: * fn -> input file descriptor ! 16: * returns: ! 17: * EOF -> no more messages ! 18: * 0 -> message returned ! 19: */ ! 20: imsg(msg, fn) ! 21: register char *msg; ! 22: register int fn; ! 23: { ! 24: register char c; ! 25: short fndsync; ! 26: char *bmsg; ! 27: extern jmp_buf Sjbuf; ! 28: extern int errno; ! 29: ! 30: fndsync = 0; ! 31: bmsg = msg; ! 32: CDEBUG(7, "imsg %s>", ""); ! 33: errno = 0; /* only for debugging */ ! 34: while (read(fn, msg, sizeof(char)) == sizeof(char)) { ! 35: *msg &= 0177; ! 36: c = *msg; ! 37: CDEBUG(7, "%s", c < 040 ? "^" : ""); ! 38: CDEBUG(7, "%c", c < 040 ? c | 0100 : c); ! 39: if (c == MSYNC) { /* look for sync character */ ! 40: msg = bmsg; ! 41: fndsync = 1; ! 42: continue; ! 43: } ! 44: if (!fndsync) ! 45: continue; ! 46: ! 47: if (c == '\0' || c == '\n') { ! 48: *msg = '\0'; ! 49: return(0); ! 50: } ! 51: else ! 52: msg++; ! 53: ! 54: if (msg - bmsg > MAXIMSG) /* unlikely */ ! 55: return(FAIL); ! 56: } ! 57: CDEBUG(7, "\nread failed (%d)\n", errno); ! 58: /* have not found sync or end of message */ ! 59: longjmp(Sjbuf, 1); ! 60: } ! 61: ! 62: /* ! 63: * initial write message routine - ! 64: * used before a protocol is agreed upon. ! 65: * type -> message type ! 66: * msg -> message body address ! 67: * fn -> file descriptor ! 68: * return: ! 69: * Must always return 0 - wmesg (WMESG) looks for zero ! 70: */ ! 71: omsg(type, msg, fn) ! 72: register char *msg; ! 73: register char type; ! 74: int fn; ! 75: { ! 76: char buf[BUFSIZ]; ! 77: ! 78: (void) sprintf(buf, "%c%c%s", MSYNC, type, msg); ! 79: CDEBUG(7, "omsg >%s<\n", buf); ! 80: write(fn, buf, strlen(buf) + 1); ! 81: return(0); ! 82: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.