Xinu7/src/cmd/fs/fgetreq.c


/* fgetreq.c - fgetreq */

#include "fs.h"

/*------------------------------------------------------------------------
 *  fgetreq  -  read a request packet from network and return its length
 *------------------------------------------------------------------------
 */
fgetreq(sock, fpacptr, fromptr, fromlen)
int	sock;
struct	fpacket	*fpacptr;
struct	sockaddr *fromptr;
int	*fromlen;
{
	int	len;
	struct	fphdr	*fptr;

	fptr = &fpacptr->fp_h;
	while ( (len=recvfrom(sock, fpacptr, sizeof(*fpacptr), 0,
		fromptr, fromlen)) < 0)
		if (errno != EINTR)
			return(SYSERR);

	/* Convert from network byte order to host byte order */

	fptr->f_pos = ntohl(fptr->f_pos);
	fptr->f_op = ntohs(fptr->f_op);
	fptr->f_count = ntohs(fptr->f_count);

	return(len);
}