1 7a4ee46d 2003-11-23 devnull #include "stdinc.h"
2 7a4ee46d 2003-11-23 devnull #include "dat.h"
3 7a4ee46d 2003-11-23 devnull #include "fns.h"
6 7a4ee46d 2003-11-23 devnull readifile(IFile *f, char *name)
8 7a4ee46d 2003-11-23 devnull ZBlock *b;
10 7a4ee46d 2003-11-23 devnull b = readfile(name);
11 7a4ee46d 2003-11-23 devnull if(b == nil)
12 7a4ee46d 2003-11-23 devnull return -1;
13 7a4ee46d 2003-11-23 devnull f->name = name;
14 7a4ee46d 2003-11-23 devnull f->b = b;
15 7a4ee46d 2003-11-23 devnull f->pos = 0;
16 7a4ee46d 2003-11-23 devnull return 0;
20 7a4ee46d 2003-11-23 devnull freeifile(IFile *f)
22 7a4ee46d 2003-11-23 devnull freezblock(f->b);
23 7a4ee46d 2003-11-23 devnull f->b = nil;
24 7a4ee46d 2003-11-23 devnull f->pos = 0;
28 7a4ee46d 2003-11-23 devnull partifile(IFile *f, Part *part, u64int start, u32int size)
30 7a4ee46d 2003-11-23 devnull ZBlock *b;
32 7a4ee46d 2003-11-23 devnull b = alloczblock(size, 0);
33 7a4ee46d 2003-11-23 devnull if(b == nil)
34 7a4ee46d 2003-11-23 devnull return -1;
35 7a4ee46d 2003-11-23 devnull if(readpart(part, start, b->data, size) < 0){
36 7a4ee46d 2003-11-23 devnull seterr(EAdmin, "can't read %s: %r", part->name);
37 7a4ee46d 2003-11-23 devnull freezblock(b);
38 7a4ee46d 2003-11-23 devnull return -1;
40 7a4ee46d 2003-11-23 devnull f->name = part->name;
41 7a4ee46d 2003-11-23 devnull f->b = b;
42 7a4ee46d 2003-11-23 devnull f->pos = 0;
43 7a4ee46d 2003-11-23 devnull return 0;
47 7a4ee46d 2003-11-23 devnull * return the next non-blank input line,
48 7a4ee46d 2003-11-23 devnull * stripped of leading white space and with # comments eliminated
51 7a4ee46d 2003-11-23 devnull ifileline(IFile *f)
53 7a4ee46d 2003-11-23 devnull char *s, *e, *t;
57 7a4ee46d 2003-11-23 devnull s = (char*)&f->b->data[f->pos];
58 7a4ee46d 2003-11-23 devnull e = memchr(s, '\n', f->b->len - f->pos);
59 7a4ee46d 2003-11-23 devnull if(e == nil)
60 7a4ee46d 2003-11-23 devnull return nil;
61 7a4ee46d 2003-11-23 devnull *e++ = '\0';
62 7a4ee46d 2003-11-23 devnull f->pos = e - (char*)f->b->data;
63 7a4ee46d 2003-11-23 devnull t = strchr(s, '#');
64 7a4ee46d 2003-11-23 devnull if(t != nil)
65 7a4ee46d 2003-11-23 devnull *t = '\0';
66 7a4ee46d 2003-11-23 devnull for(; c = *s; s++)
67 7a4ee46d 2003-11-23 devnull if(c != ' ' && c != '\t' && c != '\r')
68 7a4ee46d 2003-11-23 devnull return s;
73 7a4ee46d 2003-11-23 devnull ifilename(IFile *f, char *dst)
77 7a4ee46d 2003-11-23 devnull s = ifileline(f);
78 7a4ee46d 2003-11-23 devnull if(s == nil || strlen(s) >= ANameSize)
79 7a4ee46d 2003-11-23 devnull return -1;
80 7a4ee46d 2003-11-23 devnull namecp(dst, s);
81 7a4ee46d 2003-11-23 devnull return 0;
85 7a4ee46d 2003-11-23 devnull ifileu32int(IFile *f, u32int *r)
89 7a4ee46d 2003-11-23 devnull s = ifileline(f);
90 7a4ee46d 2003-11-23 devnull if(s == nil)
91 7a4ee46d 2003-11-23 devnull return -1;
92 7a4ee46d 2003-11-23 devnull return stru32int(s, r);