#include "tpi_daytime.h"
ssize_t
tpi_read(int fd, void *buf, size_t len)
{
struct strbuf ctlbuf;
struct strbuf datbuf;
union T_primitives rcvbuf;
int flags;
ctlbuf.maxlen = sizeof(union T_primitives);
ctlbuf.buf = (char *) &rcvbuf;
datbuf.maxlen = len;
datbuf.buf = buf;
datbuf.len = 0;
flags = 0;
Getmsg(fd, &ctlbuf, &datbuf, &flags);
if (ctlbuf.len >= (int) sizeof(long)) {
if (rcvbuf.type == T_DATA_IND)
return(datbuf.len);
else if (rcvbuf.type == T_ORDREL_IND)
return(0);
else
err_quit("tpi_read: unexpected type %d", rcvbuf.type);
} else if (ctlbuf.len == -1)
return(datbuf.len);
else
err_quit("tpi_read: bad length from getmsg");
}
syntax highlighted by Code2HTML, v. 0.9.1