xref: /plan9/sys/src/cmd/sam/sys.c (revision 9a747e4fd48b9f4522c70c07e8f882a15030f964)
13e12c5d1SDavid du Colombier #include "sam.h"
23e12c5d1SDavid du Colombier 
33e12c5d1SDavid du Colombier static int inerror=FALSE;
43e12c5d1SDavid du Colombier 
53e12c5d1SDavid du Colombier /*
63e12c5d1SDavid du Colombier  * A reasonable interface to the system calls
73e12c5d1SDavid du Colombier  */
83e12c5d1SDavid du Colombier 
93e12c5d1SDavid du Colombier void
103e12c5d1SDavid du Colombier resetsys(void)
113e12c5d1SDavid du Colombier {
123e12c5d1SDavid du Colombier 	inerror = FALSE;
133e12c5d1SDavid du Colombier }
143e12c5d1SDavid du Colombier 
153e12c5d1SDavid du Colombier void
163e12c5d1SDavid du Colombier syserror(char *a)
173e12c5d1SDavid du Colombier {
18*9a747e4fSDavid du Colombier 	char buf[ERRMAX];
193e12c5d1SDavid du Colombier 
203e12c5d1SDavid du Colombier 	if(!inerror){
213e12c5d1SDavid du Colombier 		inerror=TRUE;
22*9a747e4fSDavid du Colombier 		errstr(buf, sizeof buf);
233e12c5d1SDavid du Colombier 		dprint("%s: ", a);
243e12c5d1SDavid du Colombier 		error_s(Eio, buf);
253e12c5d1SDavid du Colombier 	}
263e12c5d1SDavid du Colombier }
273e12c5d1SDavid du Colombier 
283e12c5d1SDavid du Colombier int
293e12c5d1SDavid du Colombier Read(int f, void *a, int n)
303e12c5d1SDavid du Colombier {
31*9a747e4fSDavid du Colombier 	char buf[ERRMAX];
32bd389b36SDavid du Colombier 
33bd389b36SDavid du Colombier 	if(read(f, (char *)a, n)!=n) {
34bd389b36SDavid du Colombier 		if (lastfile)
357dd7cddfSDavid du Colombier 			lastfile->rescuing = 1;
36*9a747e4fSDavid du Colombier 		errstr(buf, sizeof buf);
37bd389b36SDavid du Colombier 		if (downloaded)
38bd389b36SDavid du Colombier 			fprint(2, "read error: %s\n", buf);
39bd389b36SDavid du Colombier 		rescue();
40bd389b36SDavid du Colombier 		exits("read");
41bd389b36SDavid du Colombier 	}
423e12c5d1SDavid du Colombier 	return n;
433e12c5d1SDavid du Colombier }
443e12c5d1SDavid du Colombier 
453e12c5d1SDavid du Colombier int
463e12c5d1SDavid du Colombier Write(int f, void *a, int n)
473e12c5d1SDavid du Colombier {
483e12c5d1SDavid du Colombier 	int m;
493e12c5d1SDavid du Colombier 
503e12c5d1SDavid du Colombier 	if((m=write(f, (char *)a, n))!=n)
513e12c5d1SDavid du Colombier 		syserror("write");
523e12c5d1SDavid du Colombier 	return m;
533e12c5d1SDavid du Colombier }
543e12c5d1SDavid du Colombier 
553e12c5d1SDavid du Colombier void
563e12c5d1SDavid du Colombier Seek(int f, long n, int w)
573e12c5d1SDavid du Colombier {
583e12c5d1SDavid du Colombier 	if(seek(f, n, w)==-1)
593e12c5d1SDavid du Colombier 		syserror("seek");
603e12c5d1SDavid du Colombier }
61