Xinu7/src/cmd/fs/fsread.c

/* fsread.c - fsread */

#include "fs.h"

/*------------------------------------------------------------------------
 *  fsread  -  handle read request and prepare reply
 *------------------------------------------------------------------------
 */
fsread(fpacptr, flen)
struct	fpacket	*fpacptr;
int	flen;
{
	struct	fphdr	*fptr;
	int	rfd;
	int	n;

	fptr = &fpacptr->fp_h;
	if ((rfd=Open(fptr->f_name, FLOLD|FLREAD)) < 0
		|| Seek(rfd, fptr->f_pos) < 0
		|| (n=read(fcache[rfd].fd, fpacptr->fpdata,
			fptr->f_count)) < 0) {
		fptr->f_op = FS_ERROR;
		return(FHDRLEN);
	}
	fcache[rfd].currpos = fptr->f_pos += fptr->f_count = n;
	return(n + FHDRLEN);
}