#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");
}