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