BSD 4_1c_2 release
[unix-history] / usr / src / usr.lib / libI77 / douio.c
CommitLineData
26c8d007 1/*
43666f58 2char id_douio[] = "@(#)douio.c 1.2";
26c8d007
DW
3 *
4 * unformatted external i/o
5 */
6
7#include "fio.h"
8
9char *eor = "eor/uio";
10char *uio = "uio";
11
12do_us(number,ptr,len) ftnint *number; ftnlen len; char *ptr; /* sequential */
13{
14 if(reading)
15 {
16 recpos += *number * len;
17 if (recpos > reclen)
43666f58 18 err(errflag,F_EREREC,eor);
26c8d007
DW
19
20 if (fread(ptr,(int)len,(int)(*number),cf) != *number)
21 return(due_err(uio));
22 }
23 else
24 {
25 reclen += *number * len;
26 fwrite(ptr,(int)len,(int)(*number),cf);
27 }
28 return(OK);
29}
30
31do_uio(number,ptr,len) ftnint *number; ftnlen len; char *ptr;
32{
33 if(sequential)
34 return(do_us(number,ptr,len));
35 else
36 return(do_ud(number,ptr,len));
37}
38
39do_ud(number,ptr,len) ftnint *number; ftnlen len; char *ptr; /* direct */
40{
41 recpos += *number * len;
42 if(recpos > curunit->url && curunit->url!=1)
43666f58 43 err(errflag,F_EREREC,eor);
26c8d007
DW
44 if(reading)
45 {
46 if (fread(ptr, (int)len, (int)(*number), cf) != *number)
47 return(due_err(uio));
48 }
49 else
50 fwrite(ptr,(int)len,(int)(*number),cf);
51 return(OK);
52}
53
54due_err(s) char *s;
55{
56 if(feof(cf))
57 err(endflag,EOF,s)
58 else
59 { clearerr(cf);
60 err(errflag,errno,s)
61 }
62}