Blame


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"
4 7a4ee46d 2003-11-23 devnull
5 7a4ee46d 2003-11-23 devnull int
6 7a4ee46d 2003-11-23 devnull readifile(IFile *f, char *name)
7 7a4ee46d 2003-11-23 devnull {
8 7a4ee46d 2003-11-23 devnull ZBlock *b;
9 7a4ee46d 2003-11-23 devnull
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;
17 7a4ee46d 2003-11-23 devnull }
18 7a4ee46d 2003-11-23 devnull
19 7a4ee46d 2003-11-23 devnull void
20 7a4ee46d 2003-11-23 devnull freeifile(IFile *f)
21 7a4ee46d 2003-11-23 devnull {
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;
25 7a4ee46d 2003-11-23 devnull }
26 7a4ee46d 2003-11-23 devnull
27 7a4ee46d 2003-11-23 devnull int
28 7a4ee46d 2003-11-23 devnull partifile(IFile *f, Part *part, u64int start, u32int size)
29 7a4ee46d 2003-11-23 devnull {
30 7a4ee46d 2003-11-23 devnull ZBlock *b;
31 7a4ee46d 2003-11-23 devnull
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;
39 7a4ee46d 2003-11-23 devnull }
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;
44 7a4ee46d 2003-11-23 devnull }
45 7a4ee46d 2003-11-23 devnull
46 7a4ee46d 2003-11-23 devnull /*
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
49 7a4ee46d 2003-11-23 devnull */
50 7a4ee46d 2003-11-23 devnull char*
51 7a4ee46d 2003-11-23 devnull ifileline(IFile *f)
52 7a4ee46d 2003-11-23 devnull {
53 7a4ee46d 2003-11-23 devnull char *s, *e, *t;
54 7a4ee46d 2003-11-23 devnull int c;
55 7a4ee46d 2003-11-23 devnull
56 7a4ee46d 2003-11-23 devnull for(;;){
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;
69 7a4ee46d 2003-11-23 devnull }
70 7a4ee46d 2003-11-23 devnull }
71 7a4ee46d 2003-11-23 devnull
72 7a4ee46d 2003-11-23 devnull int
73 7a4ee46d 2003-11-23 devnull ifilename(IFile *f, char *dst)
74 7a4ee46d 2003-11-23 devnull {
75 7a4ee46d 2003-11-23 devnull char *s;
76 7a4ee46d 2003-11-23 devnull
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;
82 7a4ee46d 2003-11-23 devnull }
83 7a4ee46d 2003-11-23 devnull
84 7a4ee46d 2003-11-23 devnull int
85 7a4ee46d 2003-11-23 devnull ifileu32int(IFile *f, u32int *r)
86 7a4ee46d 2003-11-23 devnull {
87 7a4ee46d 2003-11-23 devnull char *s;
88 7a4ee46d 2003-11-23 devnull
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);
93 7a4ee46d 2003-11-23 devnull }