tpi_read.lc 1.6 KB

123456789101112131415161718192021222324252627282930313233
  1. #include "tpi_daytime.h"## 1 ##src/streams/tpi_read.c##
  2. ssize_t## 2 ##src/streams/tpi_read.c##
  3. tpi_read(int fd, void *buf, size_t len)## 3 ##src/streams/tpi_read.c##
  4. {## 4 ##src/streams/tpi_read.c##
  5. struct strbuf ctlbuf;## 5 ##src/streams/tpi_read.c##
  6. struct strbuf datbuf;## 6 ##src/streams/tpi_read.c##
  7. union T_primitives rcvbuf;## 7 ##src/streams/tpi_read.c##
  8. int flags;## 8 ##src/streams/tpi_read.c##
  9. ctlbuf.maxlen = sizeof(union T_primitives);## 9 ##src/streams/tpi_read.c##
  10. ctlbuf.buf = (char *) &rcvbuf;## 10 ##src/streams/tpi_read.c##
  11. datbuf.maxlen = len;## 11 ##src/streams/tpi_read.c##
  12. datbuf.buf = buf;## 12 ##src/streams/tpi_read.c##
  13. datbuf.len = 0;## 13 ##src/streams/tpi_read.c##
  14. flags = 0;## 14 ##src/streams/tpi_read.c##
  15. Getmsg(fd, &ctlbuf, &datbuf, &flags);## 15 ##src/streams/tpi_read.c##
  16. if (ctlbuf.len >= (int) sizeof(long)) {## 16 ##src/streams/tpi_read.c##
  17. if (rcvbuf.type == T_DATA_IND)## 17 ##src/streams/tpi_read.c##
  18. return (datbuf.len);## 18 ##src/streams/tpi_read.c##
  19. else if (rcvbuf.type == T_ORDREL_IND)## 19 ##src/streams/tpi_read.c##
  20. return (0);## 20 ##src/streams/tpi_read.c##
  21. else## 21 ##src/streams/tpi_read.c##
  22. err_quit("tpi_read: unexpected type %d", rcvbuf.type);## 22 ##src/streams/tpi_read.c##
  23. } else if (ctlbuf.len == -1)## 23 ##src/streams/tpi_read.c##
  24. return (datbuf.len);## 24 ##src/streams/tpi_read.c##
  25. else## 25 ##src/streams/tpi_read.c##
  26. err_quit("tpi_read: bad length from getmsg");## 26 ##src/streams/tpi_read.c##
  27. }## 27 ##src/streams/tpi_read.c##