BSD 4_1c_2 release
[unix-history] / usr / src / usr.lib / libpc / READ4.c
CommitLineData
ffbbb01b
KM
1/* Copyright (c) 1979 Regents of the University of California */
2
e804469b 3static char sccsid[] = "@(#)READ4.c 1.6 4/9/82";
ffbbb01b
KM
4
5#include "h00vars.h"
049a9cea
KM
6#include <errno.h>
7extern int errno;
ffbbb01b 8
492cc5d3 9long
ffbbb01b
KM
10READ4(curfile)
11
12 register struct iorec *curfile;
13{
492cc5d3
KM
14 long data;
15 int retval;
ffbbb01b
KM
16
17 if (curfile->funit & FWRITE) {
86997b19
KM
18 ERROR("%s: Attempt to read, but open for writing\n",
19 curfile->pfname);
ffbbb01b
KM
20 return;
21 }
22 UNSYNC(curfile);
049a9cea 23 errno = 0;
53909d1e
KM
24 retval = fscanf(curfile->fbuf, "%ld", &data);
25 if (retval == EOF) {
86997b19 26 ERROR("%s: Tried to read past end of file\n", curfile->pfname);
53909d1e
KM
27 return;
28 }
29 if (retval == 0) {
86997b19 30 ERROR("%s: Bad data found on integer read\n", curfile->pfname);
ffbbb01b
KM
31 return;
32 }
049a9cea
KM
33 if (errno == ERANGE) {
34 ERROR("%s: Overflow on integer read\n", curfile->pfname);
35 return;
36 }
37 if (errno != 0) {
38 PERROR(curfile->pfname);
39 return;
40 }
e5053b93 41 curfile->funit &= ~EOLN;
ffbbb01b
KM
42 curfile->funit |= SYNC;
43 return data;
44}