FreeCalypso > hg > freecalypso-sw
annotate ffstools/tiffs-rd/object.c @ 731:68693b72670b
gsm-fw/g23m-gsm/rr: initial *.h preen
| author | Michael Spacefalcon <msokolov@ivan.Harhan.ORG> | 
|---|---|
| date | Sun, 05 Oct 2014 01:27:32 +0000 | 
| parents | 317936902be4 | 
| children | 
| rev | line source | 
|---|---|
| 
233
 
ae9ff2d1e3da
tiffs IVA: basic ls integrated
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1 /* | 
| 
 
ae9ff2d1e3da
tiffs IVA: basic ls integrated
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2 * This C module implements object-level analysis. | 
| 
 
ae9ff2d1e3da
tiffs IVA: basic ls integrated
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
3 */ | 
| 
 
ae9ff2d1e3da
tiffs IVA: basic ls integrated
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
4 | 
| 
234
 
024042383a26
tiffs IVA: ls reports file sizes
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents: 
233 
diff
changeset
 | 
5 #include <sys/types.h> | 
| 
233
 
ae9ff2d1e3da
tiffs IVA: basic ls integrated
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
6 #include <ctype.h> | 
| 
 
ae9ff2d1e3da
tiffs IVA: basic ls integrated
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
7 #include <stdio.h> | 
| 
 
ae9ff2d1e3da
tiffs IVA: basic ls integrated
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
8 #include <stdlib.h> | 
| 
 
ae9ff2d1e3da
tiffs IVA: basic ls integrated
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
9 #include <string.h> | 
| 
 
ae9ff2d1e3da
tiffs IVA: basic ls integrated
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
10 #include <strings.h> | 
| 
 
ae9ff2d1e3da
tiffs IVA: basic ls integrated
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
11 #include "types.h" | 
| 
 
ae9ff2d1e3da
tiffs IVA: basic ls integrated
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
12 #include "struct.h" | 
| 
 
ae9ff2d1e3da
tiffs IVA: basic ls integrated
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
13 #include "globals.h" | 
| 
 
ae9ff2d1e3da
tiffs IVA: basic ls integrated
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
14 #include "pathname.h" | 
| 
 
ae9ff2d1e3da
tiffs IVA: basic ls integrated
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
15 | 
| 
 
ae9ff2d1e3da
tiffs IVA: basic ls integrated
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
16 validate_obj_name(ino, root_special) | 
| 
 
ae9ff2d1e3da
tiffs IVA: basic ls integrated
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
17 { | 
| 
 
ae9ff2d1e3da
tiffs IVA: basic ls integrated
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
18 struct inode_info *inf = inode_info[ino]; | 
| 
 
ae9ff2d1e3da
tiffs IVA: basic ls integrated
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
19 u8 *p, *endp; | 
| 
 
ae9ff2d1e3da
tiffs IVA: basic ls integrated
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
20 int c; | 
| 
 
ae9ff2d1e3da
tiffs IVA: basic ls integrated
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
21 | 
| 
 
ae9ff2d1e3da
tiffs IVA: basic ls integrated
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
22 if (!inf->len) | 
| 
 
ae9ff2d1e3da
tiffs IVA: basic ls integrated
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
23 return(0); | 
| 
 
ae9ff2d1e3da
tiffs IVA: basic ls integrated
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
24 p = inf->dataptr; | 
| 
 
ae9ff2d1e3da
tiffs IVA: basic ls integrated
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
25 endp = p + inf->len; | 
| 
 
ae9ff2d1e3da
tiffs IVA: basic ls integrated
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
26 for (; ; p++) { | 
| 
 
ae9ff2d1e3da
tiffs IVA: basic ls integrated
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
27 if (p >= endp) | 
| 
 
ae9ff2d1e3da
tiffs IVA: basic ls integrated
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
28 return(0); | 
| 
 
ae9ff2d1e3da
tiffs IVA: basic ls integrated
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
29 c = *p; | 
| 
 
ae9ff2d1e3da
tiffs IVA: basic ls integrated
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
30 if (!c) | 
| 
 
ae9ff2d1e3da
tiffs IVA: basic ls integrated
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
31 break; | 
| 
 
ae9ff2d1e3da
tiffs IVA: basic ls integrated
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
32 if (c < ' ' || c > '~') | 
| 
 
ae9ff2d1e3da
tiffs IVA: basic ls integrated
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
33 return(0); | 
| 
 
ae9ff2d1e3da
tiffs IVA: basic ls integrated
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
34 if (root_special || isalnum(c)) | 
| 
 
ae9ff2d1e3da
tiffs IVA: basic ls integrated
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
35 continue; | 
| 
 
ae9ff2d1e3da
tiffs IVA: basic ls integrated
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
36 switch (c) { | 
| 
 
ae9ff2d1e3da
tiffs IVA: basic ls integrated
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
37 case '.': | 
| 
 
ae9ff2d1e3da
tiffs IVA: basic ls integrated
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
38 case ',': | 
| 
 
ae9ff2d1e3da
tiffs IVA: basic ls integrated
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
39 case '_': | 
| 
 
ae9ff2d1e3da
tiffs IVA: basic ls integrated
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
40 case '-': | 
| 
 
ae9ff2d1e3da
tiffs IVA: basic ls integrated
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
41 case '+': | 
| 
 
ae9ff2d1e3da
tiffs IVA: basic ls integrated
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
42 case '%': | 
| 
 
ae9ff2d1e3da
tiffs IVA: basic ls integrated
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
43 case '$': | 
| 
 
ae9ff2d1e3da
tiffs IVA: basic ls integrated
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
44 case '#': | 
| 
 
ae9ff2d1e3da
tiffs IVA: basic ls integrated
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
45 continue; | 
| 
 
ae9ff2d1e3da
tiffs IVA: basic ls integrated
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
46 default: | 
| 
 
ae9ff2d1e3da
tiffs IVA: basic ls integrated
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
47 return(0); | 
| 
 
ae9ff2d1e3da
tiffs IVA: basic ls integrated
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
48 } | 
| 
 
ae9ff2d1e3da
tiffs IVA: basic ls integrated
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
49 } | 
| 
 
ae9ff2d1e3da
tiffs IVA: basic ls integrated
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
50 if (!root_special) { | 
| 
 
ae9ff2d1e3da
tiffs IVA: basic ls integrated
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
51 c = p - inf->dataptr; | 
| 
 
ae9ff2d1e3da
tiffs IVA: basic ls integrated
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
52 if (c < 1 || c > MAX_FN_COMPONENT) | 
| 
 
ae9ff2d1e3da
tiffs IVA: basic ls integrated
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
53 return(0); | 
| 
 
ae9ff2d1e3da
tiffs IVA: basic ls integrated
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
54 if (!strcmp(inf->dataptr, ".") || !strcmp(inf->dataptr, "..")) | 
| 
 
ae9ff2d1e3da
tiffs IVA: basic ls integrated
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
55 return(0); | 
| 
 
ae9ff2d1e3da
tiffs IVA: basic ls integrated
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
56 } | 
| 
 
ae9ff2d1e3da
tiffs IVA: basic ls integrated
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
57 inf->byte_after_name = p + 1; | 
| 
 
ae9ff2d1e3da
tiffs IVA: basic ls integrated
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
58 return(1); | 
| 
 
ae9ff2d1e3da
tiffs IVA: basic ls integrated
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
59 } | 
| 
234
 
024042383a26
tiffs IVA: ls reports file sizes
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents: 
233 
diff
changeset
 | 
60 | 
| 
 
024042383a26
tiffs IVA: ls reports file sizes
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents: 
233 
diff
changeset
 | 
61 u8 * | 
| 
 
024042383a26
tiffs IVA: ls reports file sizes
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents: 
233 
diff
changeset
 | 
62 find_end_of_chunk(inf) | 
| 
 
024042383a26
tiffs IVA: ls reports file sizes
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents: 
233 
diff
changeset
 | 
63 struct inode_info *inf; | 
| 
 
024042383a26
tiffs IVA: ls reports file sizes
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents: 
233 
diff
changeset
 | 
64 { | 
| 
 
024042383a26
tiffs IVA: ls reports file sizes
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents: 
233 
diff
changeset
 | 
65 u8 *p; | 
| 
 
024042383a26
tiffs IVA: ls reports file sizes
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents: 
233 
diff
changeset
 | 
66 int i; | 
| 
 
024042383a26
tiffs IVA: ls reports file sizes
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents: 
233 
diff
changeset
 | 
67 | 
| 
 
024042383a26
tiffs IVA: ls reports file sizes
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents: 
233 
diff
changeset
 | 
68 p = inf->dataptr + inf->len; | 
| 
 
024042383a26
tiffs IVA: ls reports file sizes
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents: 
233 
diff
changeset
 | 
69 for (i = 1; i <= 16; i++) { | 
| 
 
024042383a26
tiffs IVA: ls reports file sizes
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents: 
233 
diff
changeset
 | 
70 if (!p[-i]) | 
| 
 
024042383a26
tiffs IVA: ls reports file sizes
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents: 
233 
diff
changeset
 | 
71 return(p - i); | 
| 
 
024042383a26
tiffs IVA: ls reports file sizes
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents: 
233 
diff
changeset
 | 
72 if (p[-i] != 0xFF) | 
| 
 
024042383a26
tiffs IVA: ls reports file sizes
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents: 
233 
diff
changeset
 | 
73 break; | 
| 
 
024042383a26
tiffs IVA: ls reports file sizes
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents: 
233 
diff
changeset
 | 
74 } | 
| 
 
024042383a26
tiffs IVA: ls reports file sizes
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents: 
233 
diff
changeset
 | 
75 fprintf(stderr, | 
| 
 
024042383a26
tiffs IVA: ls reports file sizes
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents: 
233 
diff
changeset
 | 
76 "error: chunk @%x (inode #%x): no valid termination found\n", | 
| 
 
024042383a26
tiffs IVA: ls reports file sizes
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents: 
233 
diff
changeset
 | 
77 inf->offset, inf->ino); | 
| 
 
024042383a26
tiffs IVA: ls reports file sizes
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents: 
233 
diff
changeset
 | 
78 return(p); /* bogon, allows the rest to continue */ | 
| 
 
024042383a26
tiffs IVA: ls reports file sizes
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents: 
233 
diff
changeset
 | 
79 } | 
| 
 
024042383a26
tiffs IVA: ls reports file sizes
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents: 
233 
diff
changeset
 | 
80 | 
| 
 
024042383a26
tiffs IVA: ls reports file sizes
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents: 
233 
diff
changeset
 | 
81 size_head_chunk(inf, chi) | 
| 
 
024042383a26
tiffs IVA: ls reports file sizes
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents: 
233 
diff
changeset
 | 
82 struct inode_info *inf; | 
| 
 
024042383a26
tiffs IVA: ls reports file sizes
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents: 
233 
diff
changeset
 | 
83 struct chunkinfo *chi; | 
| 
 
024042383a26
tiffs IVA: ls reports file sizes
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents: 
233 
diff
changeset
 | 
84 { | 
| 
 
024042383a26
tiffs IVA: ls reports file sizes
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents: 
233 
diff
changeset
 | 
85 chi->start = inf->byte_after_name; | 
| 
 
024042383a26
tiffs IVA: ls reports file sizes
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents: 
233 
diff
changeset
 | 
86 chi->end = find_end_of_chunk(inf); | 
| 
 
024042383a26
tiffs IVA: ls reports file sizes
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents: 
233 
diff
changeset
 | 
87 if (chi->start >= chi->end) { | 
| 
 
024042383a26
tiffs IVA: ls reports file sizes
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents: 
233 
diff
changeset
 | 
88 chi->len = 0; | 
| 
 
024042383a26
tiffs IVA: ls reports file sizes
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents: 
233 
diff
changeset
 | 
89 return(0); | 
| 
 
024042383a26
tiffs IVA: ls reports file sizes
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents: 
233 
diff
changeset
 | 
90 } else { | 
| 
 
024042383a26
tiffs IVA: ls reports file sizes
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents: 
233 
diff
changeset
 | 
91 chi->len = chi->end - chi->start; | 
| 
 
024042383a26
tiffs IVA: ls reports file sizes
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents: 
233 
diff
changeset
 | 
92 return(1); | 
| 
 
024042383a26
tiffs IVA: ls reports file sizes
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents: 
233 
diff
changeset
 | 
93 } | 
| 
 
024042383a26
tiffs IVA: ls reports file sizes
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents: 
233 
diff
changeset
 | 
94 } | 
| 
 
024042383a26
tiffs IVA: ls reports file sizes
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents: 
233 
diff
changeset
 | 
95 | 
| 
 
024042383a26
tiffs IVA: ls reports file sizes
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents: 
233 
diff
changeset
 | 
96 size_extra_chunk(inf, chi) | 
| 
 
024042383a26
tiffs IVA: ls reports file sizes
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents: 
233 
diff
changeset
 | 
97 struct inode_info *inf; | 
| 
 
024042383a26
tiffs IVA: ls reports file sizes
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents: 
233 
diff
changeset
 | 
98 struct chunkinfo *chi; | 
| 
 
024042383a26
tiffs IVA: ls reports file sizes
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents: 
233 
diff
changeset
 | 
99 { | 
| 
 
024042383a26
tiffs IVA: ls reports file sizes
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents: 
233 
diff
changeset
 | 
100 chi->start = inf->dataptr; | 
| 
 
024042383a26
tiffs IVA: ls reports file sizes
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents: 
233 
diff
changeset
 | 
101 chi->end = find_end_of_chunk(inf); | 
| 
 
024042383a26
tiffs IVA: ls reports file sizes
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents: 
233 
diff
changeset
 | 
102 chi->len = chi->end - chi->start; | 
| 
 
024042383a26
tiffs IVA: ls reports file sizes
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents: 
233 
diff
changeset
 | 
103 } | 
| 
 
024042383a26
tiffs IVA: ls reports file sizes
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents: 
233 
diff
changeset
 | 
104 | 
| 
 
024042383a26
tiffs IVA: ls reports file sizes
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents: 
233 
diff
changeset
 | 
105 void | 
| 
237
 
317936902be4
tiffs IVA: regular ls fully implemented
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents: 
234 
diff
changeset
 | 
106 iterate_seg_file(seghead, callback, callback_data, deleted, verbose) | 
| 
234
 
024042383a26
tiffs IVA: ls reports file sizes
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents: 
233 
diff
changeset
 | 
107 void (*callback)(); | 
| 
 
024042383a26
tiffs IVA: ls reports file sizes
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents: 
233 
diff
changeset
 | 
108 u_long callback_data; | 
| 
 
024042383a26
tiffs IVA: ls reports file sizes
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents: 
233 
diff
changeset
 | 
109 { | 
| 
 
024042383a26
tiffs IVA: ls reports file sizes
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents: 
233 
diff
changeset
 | 
110 int ino; | 
| 
 
024042383a26
tiffs IVA: ls reports file sizes
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents: 
233 
diff
changeset
 | 
111 struct inode_info *inf; | 
| 
 
024042383a26
tiffs IVA: ls reports file sizes
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents: 
233 
diff
changeset
 | 
112 | 
| 
 
024042383a26
tiffs IVA: ls reports file sizes
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents: 
233 
diff
changeset
 | 
113 for (ino = inode_info[seghead]->descend; ino; ino = inf->descend) { | 
| 
 
024042383a26
tiffs IVA: ls reports file sizes
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents: 
233 
diff
changeset
 | 
114 loop: if (!validate_inode(ino)) { | 
| 
 
024042383a26
tiffs IVA: ls reports file sizes
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents: 
233 
diff
changeset
 | 
115 fprintf(stderr, | 
| 
 
024042383a26
tiffs IVA: ls reports file sizes
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents: 
233 
diff
changeset
 | 
116 "error: following seg file hit invalid inode #%x\n", | 
| 
 
024042383a26
tiffs IVA: ls reports file sizes
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents: 
233 
diff
changeset
 | 
117 ino); | 
| 
 
024042383a26
tiffs IVA: ls reports file sizes
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents: 
233 
diff
changeset
 | 
118 return; | 
| 
 
024042383a26
tiffs IVA: ls reports file sizes
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents: 
233 
diff
changeset
 | 
119 } | 
| 
 
024042383a26
tiffs IVA: ls reports file sizes
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents: 
233 
diff
changeset
 | 
120 inf = inode_info[ino]; | 
| 
 
024042383a26
tiffs IVA: ls reports file sizes
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents: 
233 
diff
changeset
 | 
121 switch (inf->type) { | 
| 
 
024042383a26
tiffs IVA: ls reports file sizes
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents: 
233 
diff
changeset
 | 
122 case 0xF4: | 
| 
 
024042383a26
tiffs IVA: ls reports file sizes
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents: 
233 
diff
changeset
 | 
123 callback(inf, callback_data); | 
| 
 
024042383a26
tiffs IVA: ls reports file sizes
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents: 
233 
diff
changeset
 | 
124 continue; | 
| 
 
024042383a26
tiffs IVA: ls reports file sizes
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents: 
233 
diff
changeset
 | 
125 case 0x00: | 
| 
 
024042383a26
tiffs IVA: ls reports file sizes
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents: 
233 
diff
changeset
 | 
126 if (deleted) { | 
| 
 
024042383a26
tiffs IVA: ls reports file sizes
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents: 
233 
diff
changeset
 | 
127 if (inf->len) | 
| 
 
024042383a26
tiffs IVA: ls reports file sizes
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents: 
233 
diff
changeset
 | 
128 callback(inf, callback_data); | 
| 
 
024042383a26
tiffs IVA: ls reports file sizes
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents: 
233 
diff
changeset
 | 
129 else | 
| 
 
024042383a26
tiffs IVA: ls reports file sizes
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents: 
233 
diff
changeset
 | 
130 fprintf(stderr, | 
| 
 
024042383a26
tiffs IVA: ls reports file sizes
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents: 
233 
diff
changeset
 | 
131 "error: presumed deleted segment inode #%x has been reclaimed\n", | 
| 
 
024042383a26
tiffs IVA: ls reports file sizes
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents: 
233 
diff
changeset
 | 
132 ino); | 
| 
 
024042383a26
tiffs IVA: ls reports file sizes
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents: 
233 
diff
changeset
 | 
133 continue; | 
| 
 
024042383a26
tiffs IVA: ls reports file sizes
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents: 
233 
diff
changeset
 | 
134 } | 
| 
 
024042383a26
tiffs IVA: ls reports file sizes
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents: 
233 
diff
changeset
 | 
135 if (!inf->sibling) { | 
| 
 
024042383a26
tiffs IVA: ls reports file sizes
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents: 
233 
diff
changeset
 | 
136 fprintf(stderr, | 
| 
 
024042383a26
tiffs IVA: ls reports file sizes
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents: 
233 
diff
changeset
 | 
137 "error: segment object at inode #%x: marked deleted, but no sibling\n", | 
| 
 
024042383a26
tiffs IVA: ls reports file sizes
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents: 
233 
diff
changeset
 | 
138 ino); | 
| 
 
024042383a26
tiffs IVA: ls reports file sizes
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents: 
233 
diff
changeset
 | 
139 return; | 
| 
 
024042383a26
tiffs IVA: ls reports file sizes
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents: 
233 
diff
changeset
 | 
140 } | 
| 
237
 
317936902be4
tiffs IVA: regular ls fully implemented
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents: 
234 
diff
changeset
 | 
141 if (verbose) | 
| 
 
317936902be4
tiffs IVA: regular ls fully implemented
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents: 
234 
diff
changeset
 | 
142 printf("seg inode #%x deleted, moved to #%x\n", | 
| 
 
317936902be4
tiffs IVA: regular ls fully implemented
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents: 
234 
diff
changeset
 | 
143 ino, inf->sibling); | 
| 
234
 
024042383a26
tiffs IVA: ls reports file sizes
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents: 
233 
diff
changeset
 | 
144 ino = inf->sibling; | 
| 
 
024042383a26
tiffs IVA: ls reports file sizes
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents: 
233 
diff
changeset
 | 
145 goto loop; | 
| 
 
024042383a26
tiffs IVA: ls reports file sizes
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents: 
233 
diff
changeset
 | 
146 default: | 
| 
 
024042383a26
tiffs IVA: ls reports file sizes
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents: 
233 
diff
changeset
 | 
147 fprintf(stderr, | 
| 
 
024042383a26
tiffs IVA: ls reports file sizes
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents: 
233 
diff
changeset
 | 
148 "error: inode #%x: unexpected type %02X when expecting segment (F4)\n", | 
| 
 
024042383a26
tiffs IVA: ls reports file sizes
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents: 
233 
diff
changeset
 | 
149 ino, inf->type); | 
| 
 
024042383a26
tiffs IVA: ls reports file sizes
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents: 
233 
diff
changeset
 | 
150 return; | 
| 
 
024042383a26
tiffs IVA: ls reports file sizes
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents: 
233 
diff
changeset
 | 
151 } | 
| 
 
024042383a26
tiffs IVA: ls reports file sizes
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents: 
233 
diff
changeset
 | 
152 } | 
| 
 
024042383a26
tiffs IVA: ls reports file sizes
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents: 
233 
diff
changeset
 | 
153 } | 
