Annotation of researchv9/libc/fio/fioread.c, revision 1.1.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 = Ffb[fd];
                     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.