comparison mpffs/ls.c @ 39:9bc7f0e03fa8

iterate_extra_chunks() function written, mpffs-ls converted to use it
author Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
date Mon, 01 Jul 2013 06:49:50 +0000
parents 0bf037ba4149
children
comparison
equal deleted inserted replaced
38:e9c6d6615f32 39:9bc7f0e03fa8
16 extern struct objinfo root; 16 extern struct objinfo root;
17 extern int verbose; 17 extern int verbose;
18 18
19 char workpath[512]; 19 char workpath[512];
20 20
21 void
22 extra_chunk_callback(obj, opaque)
23 struct objinfo *obj;
24 u_long opaque;
25 {
26 size_t *accump = (size_t *) opaque;
27 struct chunkinfo chi;
28
29 size_extra_chunk(obj, &chi);
30 *accump += chi.len;
31 }
32
21 size_t 33 size_t
22 get_file_size(head) 34 get_file_size(head)
23 struct objinfo *head; 35 struct objinfo *head;
24 { 36 {
25 int ent;
26 struct objinfo ch;
27 struct chunkinfo chi; 37 struct chunkinfo chi;
28 size_t accum; 38 size_t accum;
29 39
30 size_head_chunk(head, &chi); 40 size_head_chunk(head, &chi);
31 accum = chi.len; 41 accum = chi.len;
32 for (ent = head->descend; ent != 0xFFFF; ent = ch.descend) { 42 iterate_extra_chunks(head->descend, extra_chunk_callback,
33 ch.entryno = ent; 43 (u_long) &accum);
34 get_index_entry(&ch);
35 if (ch.type != 0xF4) {
36 fprintf(stderr,
37 "file continuation object at index %x: type %02X != expected F4\n",
38 ent, ch.type);
39 break;
40 }
41 validate_chunk(&ch);
42 size_extra_chunk(&ch, &chi);
43 accum += chi.len;
44 if (ch.sibling != 0xFFFF)
45 fprintf(stderr,
46 "warning: file continuation object (index %x) has a non-nil sibling pointer\n",
47 ent);
48 }
49 return(accum); 44 return(accum);
50 } 45 }
51 46
52 dump_dir(firstent, path_prefix) 47 dump_dir(firstent, path_prefix)
53 { 48 {