Annotation of researchv10no/cmd/mk/export/fio/fioread.c, revision 1.1

1.1     ! root        1: #define        FIO_IMP
        !             2: #include       "fio.h"
        !             3: #include       <libc.h>
        !             4: 
        !             5: #define                MAXREAD         0xff00          /* 64K - 4K */
        !             6: #define                FIOSHORT        100
        !             7: 
        !             8: long
        !             9: Fread(fd, addr, n)
        !            10:        char *addr;
        !            11:        long n;
        !            12: {
        !            13:        register unsigned char *p;
        !            14:        register Fbuffer *f;
        !            15:        COUNT k;
        !            16:        char *oaddr = addr;
        !            17:        char *goal = addr+n;
        !            18: 
        !            19:        FIOSET(f, fd);
        !            20: again:
        !            21:        k = f->end - f->next;
        !            22:        if(n < k) k = n;
        !            23:        memcpy(addr, (char *)f->next, k);
        !            24:        f->next += k;
        !            25:        f->lnext = f->next;     /* effectively disable undo */
        !            26:        n -= k;
        !            27:        addr += k;
        !            28:        if((n > 0) && (n < FIOSHORT)){  /* buffer reads of less than FIOSHORT */
        !            29:                if(f->next == f->end)
        !            30:                        f->next = f->end = f->buf;
        !            31:                if(Ffillbuf(fd) < 0)
        !            32:                        return((long)(addr - oaddr));
        !            33:                goto again;
        !            34:        }
        !            35:        if(n > 0)
        !            36:                FIOFLUSH(f->oflush);
        !            37:        while(n > 0){   /* buffer is empty so do real reads */
        !            38:                k = n;
        !            39:                if(k > MAXREAD) k = MAXREAD;
        !            40:                if((k = read(fd, addr, k)) < 0)
        !            41:                        return(-1L);
        !            42:                if(k == 0) break;
        !            43:                addr += k;
        !            44:                n -= k;
        !            45:                f->offset += k;
        !            46:        }
        !            47:        return((long)(addr - oaddr));
        !            48: }

unix.superglobalmegacorp.com

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