1: #include "../h/rt.h"
2:
3: /*
4: * reads(f,i) - read i characters on file f.
5: */
6: Xreads(nargs, arg2, arg1, arg0)
7: int nargs;
8: struct descrip arg2, arg1, arg0;
9: {
10: register int cnt;
11: int status;
12: FILE *f;
13:
14: /*
15: * f defaults to &input and i defaults to 1 (character).
16: */
17: deffile(&arg1, &input);
18: defshort(&arg2, 1);
19:
20: /*
21: * Get a pointer to the file and be sure that it's open for reading.
22: */
23: f = BLKLOC(arg1)->file.fd;
24: status = BLKLOC(arg1)->file.status;
25: if ((status & FS_READ) == 0)
26: runerr(212, &arg1);
27:
28: /*
29: * Be sure that a positive number of bytes is to be read.
30: */
31: if ((cnt = INTVAL(arg2)) <= 0)
32: runerr(205, &arg2);
33:
34: /*
35: * Ensure that enough space for the string exists and read it directly
36: * into the string space. (By reading directly into the string space,
37: * no arbitrary restrictions are placed on the size of the string that
38: * can be read.) Make arg0 a descriptor for the string and return it.
39: */
40: sneed(cnt);
41: if (sfree + cnt > estrings)
42: runerr(302, NULL);
43: STRLOC(arg0) = sfree;
44: if ((cnt = fread(STRLOC(arg0), sizeof(char), cnt, f)) <= 0)
45: fail();
46: STRLEN(arg0) = cnt;
47: sfree += cnt;
48: }
49:
50: Procblock(reads,2)
Defined functions
Xreads
defined in line
6;
never used