Annotation of 43BSD/contrib/icon/functions/reads.c, revision 1.1.1.1

1.1       root        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)

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.