Initial revision
[official-gcc.git] / gcc / f / runtime / libI77 / uio.c
blobea733cec06c20a253d502514181e2c32c7982bae
1 #include "f2c.h"
2 #include "fio.h"
3 #include <sys/types.h>
4 uiolen f__reclen;
6 #ifdef KR_headers
7 do_us(number,ptr,len) ftnint *number; char *ptr; ftnlen len;
8 #else
9 do_us(ftnint *number, char *ptr, ftnlen len)
10 #endif
12 if(f__reading)
14 f__recpos += (int)(*number * len);
15 if(f__recpos>f__reclen)
16 err(f__elist->cierr, 110, "do_us");
17 if (fread(ptr,(size_t)len,(size_t)(*number),f__cf) != *number)
18 err(f__elist->ciend, EOF, "do_us");
19 return(0);
21 else
23 f__reclen += *number * len;
24 (void) fwrite(ptr,(size_t)len,(size_t)(*number),f__cf);
25 return(0);
28 #ifdef KR_headers
29 integer do_ud(number,ptr,len) ftnint *number; char *ptr; ftnlen len;
30 #else
31 integer do_ud(ftnint *number, char *ptr, ftnlen len)
32 #endif
34 f__recpos += (int)(*number * len);
35 if(f__recpos > f__curunit->url && f__curunit->url!=1)
36 err(f__elist->cierr,110,"do_ud");
37 if(f__reading)
39 #ifdef Pad_UDread
40 #ifdef KR_headers
41 int i;
42 #else
43 size_t i;
44 #endif
45 if (!(i = fread(ptr,(size_t)len,(size_t)(*number),f__cf))
46 && !(f__recpos - *number*len))
47 err(f__elist->cierr,EOF,"do_ud");
48 if (i < *number)
49 memset(ptr + i*len, 0, (*number - i)*len);
50 return 0;
51 #else
52 if(fread(ptr,(size_t)len,(size_t)(*number),f__cf) != *number)
53 err(f__elist->cierr,EOF,"do_ud");
54 else return(0);
55 #endif
57 (void) fwrite(ptr,(size_t)len,(size_t)(*number),f__cf);
58 return(0);
60 #ifdef KR_headers
61 integer do_uio(number,ptr,len) ftnint *number; char *ptr; ftnlen len;
62 #else
63 integer do_uio(ftnint *number, char *ptr, ftnlen len)
64 #endif
66 if(f__sequential)
67 return(do_us(number,ptr,len));
68 else return(do_ud(number,ptr,len));