|
|
1.1 ! root 1: #include <libc.h> ! 2: #include "worm.h" ! 3: ! 4: Read(s, buf, n) ! 5: register Superblock *s; ! 6: char *buf; ! 7: long n; ! 8: { ! 9: register k; ! 10: int len; ! 11: ! 12: n *= s->blocksize; ! 13: if(n != (int)n){ ! 14: fprint(2, "bad arg to Read n=%ld\n", n); ! 15: abort(); ! 16: } ! 17: len = BIGBLOCK; ! 18: while(n){ ! 19: if(n < len) len = n; ! 20: fprint(2, "reading fd=%d len=%d\n", s->fd, len); ! 21: if((k = read(s->fd, buf, len)) != len){ ! 22: fprint(2, "k=%d\n", k); ! 23: if(k && (errno != ENXIO)){ ! 24: perror("Read"); ! 25: exit(1); ! 26: } ! 27: return(1); ! 28: } ! 29: n -= len; ! 30: buf += len; ! 31: } ! 32: return(0); ! 33: } ! 34: ! 35: Write(s, buf, n) ! 36: register Superblock *s; ! 37: char *buf; ! 38: long n; ! 39: { ! 40: register k; ! 41: int len; ! 42: char msg[256]; ! 43: ! 44: n *= s->blocksize; ! 45: if(n != (int)n){ ! 46: fprint(2, "bad arg to Write n=%d\n", n); ! 47: abort(); ! 48: } ! 49: len = BIGBLOCK; ! 50: while(n){ ! 51: if(n < len) len = n; ! 52: if((k = write(s->fd, buf, len)) != len){ ! 53: sprint(msg, "Write %d blks (%dB)", n/s->blocksize, n); ! 54: perror(msg); ! 55: return(1); ! 56: } ! 57: n -= len; ! 58: buf += len; ! 59: } ! 60: return(0); ! 61: } ! 62: ! 63: Seek(s, blk) ! 64: register Superblock *s; ! 65: long blk; ! 66: { ! 67: bigseek(s->fd, blk, s->blocksize, 0); ! 68: } ! 69: ! 70: bigseek(fd, a, b, ptr) ! 71: { ! 72: #define SEEK64 /**/ ! 73: #ifdef SEEK64 ! 74: #include <sys/param.h> ! 75: llong_t off; ! 76: extern llong_t Llmul(), ltoL(); ! 77: ! 78: off = Llmul(ltoL(a), b); ! 79: llseek(fd, off, ptr); ! 80: fprint(2, "seek(fd=%d, %dx%d\n", fd, a, b); ! 81: #else ! 82: lseek(fd, a*(long)b, ptr); ! 83: #endif ! 84: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.