11679Smckusick /* Copyright (c) 1979 Regents of the University of California */ 21679Smckusick 3*6498Smckusick static char sccsid[] = "@(#)READ4.c 1.6 04/09/82"; 41679Smckusick 51679Smckusick #include "h00vars.h" 6*6498Smckusick #include <errno.h> 7*6498Smckusick extern int errno; 81679Smckusick 93019Smckusic long 101679Smckusick READ4(curfile) 111679Smckusick 121679Smckusick register struct iorec *curfile; 131679Smckusick { 143019Smckusic long data; 153019Smckusic int retval; 161679Smckusick 171679Smckusick if (curfile->funit & FWRITE) { 183869Smckusic ERROR("%s: Attempt to read, but open for writing\n", 193869Smckusic curfile->pfname); 201679Smckusick return; 211679Smckusick } 221679Smckusick UNSYNC(curfile); 23*6498Smckusick errno = 0; 242223Smckusic retval = fscanf(curfile->fbuf, "%ld", &data); 252223Smckusic if (retval == EOF) { 263869Smckusic ERROR("%s: Tried to read past end of file\n", curfile->pfname); 272223Smckusic return; 282223Smckusic } 292223Smckusic if (retval == 0) { 303869Smckusic ERROR("%s: Bad data found on integer read\n", curfile->pfname); 311679Smckusick return; 321679Smckusick } 33*6498Smckusick if (errno == ERANGE) { 34*6498Smckusick ERROR("%s: Overflow on integer read\n", curfile->pfname); 35*6498Smckusick return; 36*6498Smckusick } 37*6498Smckusick if (errno != 0) { 38*6498Smckusick PERROR(curfile->pfname); 39*6498Smckusick return; 40*6498Smckusick } 412309Smckusic curfile->funit &= ~EOLN; 421679Smckusick curfile->funit |= SYNC; 431679Smckusick return data; 441679Smckusick } 45