Initial import from FreeBSD RELENG_4:
[dragonfly.git] / contrib / libf2c / libI77 / uio.c
1 #include "f2c.h"
2 #include "fio.h"
3 #include <sys/types.h>
4 uiolen f__reclen;
5
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
11 {
12         if(f__reading)
13         {
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);
20         }
21         else
22         {
23                 f__reclen += *number * len;
24                 (void) fwrite(ptr,(size_t)len,(size_t)(*number),f__cf);
25                 return(0);
26         }
27 }
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
33 {
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)
38         {
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
56         }
57         (void) fwrite(ptr,(size_t)len,(size_t)(*number),f__cf);
58         return(0);
59 }
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
65 {
66         if(f__sequential)
67                 return(do_us(number,ptr,len));
68         else    return(do_ud(number,ptr,len));
69 }