#include "sam.h"

static int inerror=FALSE;

/*
 * A reasonable interface to the system calls
 */

void
resetsys(void)
{
	inerror = FALSE;
}

void
syserror(char *a)
{
	char buf[ERRMAX];

	if(!inerror){
		inerror=TRUE;
		errstr(buf, sizeof buf);
		dprint("%s: ", a);
		error_s(Eio, buf);
	}
}

int
Read(int f, void *a, int n)
{
	char buf[ERRMAX];

	if(read(f, (char *)a, n)!=n) {
		if (lastfile)
			lastfile->rescuing = 1;
		errstr(buf, sizeof buf);
		if (downloaded)
			fprint(2, "read error: %s\n", buf);
		rescue();
		exits("read");
	}
	return n;
}

int
Write(int f, void *a, int n)
{
	int m;

	if((m=write(f, (char *)a, n))!=n)
		syserror("write");
	return m;
}

void
Seek(int f, long n, int w)
{
	if(seek(f, n, w)==-1)
		syserror("seek");
}
