FreeCalypso > hg > freecalypso-reveng
annotate mpffs/ls.c @ 30:9c3c5a572b57
mpffs-ls works with the length code stubbed out
author | Michael Spacefalcon <msokolov@ivan.Harhan.ORG> |
---|---|
date | Sun, 30 Jun 2013 06:28:58 +0000 |
parents | |
children | 3cca8070ef0f |
rev | line source |
---|---|
30
9c3c5a572b57
mpffs-ls works with the length code stubbed out
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
1 /* |
9c3c5a572b57
mpffs-ls works with the length code stubbed out
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
2 * This module contains the main function and other code specific to mpffs-ls |
9c3c5a572b57
mpffs-ls works with the length code stubbed out
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
3 */ |
9c3c5a572b57
mpffs-ls works with the length code stubbed out
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
4 |
9c3c5a572b57
mpffs-ls works with the length code stubbed out
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
5 #include <sys/types.h> |
9c3c5a572b57
mpffs-ls works with the length code stubbed out
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
6 #include <ctype.h> |
9c3c5a572b57
mpffs-ls works with the length code stubbed out
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
7 #include <stdio.h> |
9c3c5a572b57
mpffs-ls works with the length code stubbed out
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
8 #include <string.h> |
9c3c5a572b57
mpffs-ls works with the length code stubbed out
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
9 #include <strings.h> |
9c3c5a572b57
mpffs-ls works with the length code stubbed out
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
10 #include <stdlib.h> |
9c3c5a572b57
mpffs-ls works with the length code stubbed out
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
11 #include <unistd.h> |
9c3c5a572b57
mpffs-ls works with the length code stubbed out
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
12 #include "types.h" |
9c3c5a572b57
mpffs-ls works with the length code stubbed out
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
13 #include "struct.h" |
9c3c5a572b57
mpffs-ls works with the length code stubbed out
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
14 |
9c3c5a572b57
mpffs-ls works with the length code stubbed out
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
15 extern char *imgfile; |
9c3c5a572b57
mpffs-ls works with the length code stubbed out
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
16 extern struct objinfo root; |
9c3c5a572b57
mpffs-ls works with the length code stubbed out
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
17 extern int verbose; |
9c3c5a572b57
mpffs-ls works with the length code stubbed out
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
18 |
9c3c5a572b57
mpffs-ls works with the length code stubbed out
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
19 char workpath[512]; |
9c3c5a572b57
mpffs-ls works with the length code stubbed out
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
20 |
9c3c5a572b57
mpffs-ls works with the length code stubbed out
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
21 u_long |
9c3c5a572b57
mpffs-ls works with the length code stubbed out
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
22 get_file_size(head) |
9c3c5a572b57
mpffs-ls works with the length code stubbed out
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
23 struct objinfo *head; |
9c3c5a572b57
mpffs-ls works with the length code stubbed out
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
24 { |
9c3c5a572b57
mpffs-ls works with the length code stubbed out
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
25 return(0); /* stub, remains to be implemented */ |
9c3c5a572b57
mpffs-ls works with the length code stubbed out
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
26 } |
9c3c5a572b57
mpffs-ls works with the length code stubbed out
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
27 |
9c3c5a572b57
mpffs-ls works with the length code stubbed out
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
28 dump_dir(firstent, path_prefix) |
9c3c5a572b57
mpffs-ls works with the length code stubbed out
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
29 { |
9c3c5a572b57
mpffs-ls works with the length code stubbed out
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
30 int ent; |
9c3c5a572b57
mpffs-ls works with the length code stubbed out
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
31 struct objinfo obj; |
9c3c5a572b57
mpffs-ls works with the length code stubbed out
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
32 u_long size; |
9c3c5a572b57
mpffs-ls works with the length code stubbed out
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
33 |
9c3c5a572b57
mpffs-ls works with the length code stubbed out
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
34 for (ent = firstent; ent != 0xFFFF; ent = obj.sibling) { |
9c3c5a572b57
mpffs-ls works with the length code stubbed out
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
35 obj.entryno = ent; |
9c3c5a572b57
mpffs-ls works with the length code stubbed out
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
36 get_index_entry(&obj); |
9c3c5a572b57
mpffs-ls works with the length code stubbed out
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
37 if (!obj.type) /* skip deleted objects w/o further validation */ |
9c3c5a572b57
mpffs-ls works with the length code stubbed out
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
38 continue; |
9c3c5a572b57
mpffs-ls works with the length code stubbed out
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
39 validate_chunk(&obj); |
9c3c5a572b57
mpffs-ls works with the length code stubbed out
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
40 validate_obj_name(&obj); |
9c3c5a572b57
mpffs-ls works with the length code stubbed out
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
41 if (path_prefix + strlen(obj.dataptr) + 2 > sizeof workpath) { |
9c3c5a572b57
mpffs-ls works with the length code stubbed out
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
42 fprintf(stderr, |
9c3c5a572b57
mpffs-ls works with the length code stubbed out
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
43 "handling object at index %x, name \"%s\": path buffer overflow\n", |
9c3c5a572b57
mpffs-ls works with the length code stubbed out
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
44 obj.entryno, (char *)obj.dataptr); |
9c3c5a572b57
mpffs-ls works with the length code stubbed out
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
45 exit(1); |
9c3c5a572b57
mpffs-ls works with the length code stubbed out
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
46 } |
9c3c5a572b57
mpffs-ls works with the length code stubbed out
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
47 sprintf(workpath + path_prefix, "/%s", (char *)obj.dataptr); |
9c3c5a572b57
mpffs-ls works with the length code stubbed out
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
48 switch (obj.type) { |
9c3c5a572b57
mpffs-ls works with the length code stubbed out
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
49 case 0xF2: |
9c3c5a572b57
mpffs-ls works with the length code stubbed out
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
50 /* directory */ |
9c3c5a572b57
mpffs-ls works with the length code stubbed out
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
51 printf("d %s\n", workpath); |
9c3c5a572b57
mpffs-ls works with the length code stubbed out
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
52 dump_dir(obj.descend, strlen(workpath)); |
9c3c5a572b57
mpffs-ls works with the length code stubbed out
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
53 continue; |
9c3c5a572b57
mpffs-ls works with the length code stubbed out
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
54 case 0xF1: |
9c3c5a572b57
mpffs-ls works with the length code stubbed out
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
55 /* regular file */ |
9c3c5a572b57
mpffs-ls works with the length code stubbed out
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
56 size = get_file_size(&obj); |
9c3c5a572b57
mpffs-ls works with the length code stubbed out
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
57 printf("- %7lu %s\n", size, workpath); |
9c3c5a572b57
mpffs-ls works with the length code stubbed out
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
58 continue; |
9c3c5a572b57
mpffs-ls works with the length code stubbed out
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
59 case 0xE1: |
9c3c5a572b57
mpffs-ls works with the length code stubbed out
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
60 /* special .journal file */ |
9c3c5a572b57
mpffs-ls works with the length code stubbed out
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
61 printf("j %s\n", workpath); |
9c3c5a572b57
mpffs-ls works with the length code stubbed out
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
62 continue; |
9c3c5a572b57
mpffs-ls works with the length code stubbed out
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
63 default: |
9c3c5a572b57
mpffs-ls works with the length code stubbed out
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
64 printf("%s (index entry #%x): unexpected type %02X; skipping\n", |
9c3c5a572b57
mpffs-ls works with the length code stubbed out
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
65 workpath, obj.entryno, obj.type); |
9c3c5a572b57
mpffs-ls works with the length code stubbed out
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
66 continue; |
9c3c5a572b57
mpffs-ls works with the length code stubbed out
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
67 } |
9c3c5a572b57
mpffs-ls works with the length code stubbed out
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
68 } |
9c3c5a572b57
mpffs-ls works with the length code stubbed out
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
69 } |
9c3c5a572b57
mpffs-ls works with the length code stubbed out
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
70 |
9c3c5a572b57
mpffs-ls works with the length code stubbed out
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
71 usage() |
9c3c5a572b57
mpffs-ls works with the length code stubbed out
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
72 { |
9c3c5a572b57
mpffs-ls works with the length code stubbed out
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
73 fprintf(stderr, "usage: mpffs-ls [options] ffs-image\n"); |
9c3c5a572b57
mpffs-ls works with the length code stubbed out
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
74 exit(1); |
9c3c5a572b57
mpffs-ls works with the length code stubbed out
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
75 } |
9c3c5a572b57
mpffs-ls works with the length code stubbed out
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
76 |
9c3c5a572b57
mpffs-ls works with the length code stubbed out
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
77 main(argc, argv) |
9c3c5a572b57
mpffs-ls works with the length code stubbed out
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
78 char **argv; |
9c3c5a572b57
mpffs-ls works with the length code stubbed out
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
79 { |
9c3c5a572b57
mpffs-ls works with the length code stubbed out
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
80 extern int optind; |
9c3c5a572b57
mpffs-ls works with the length code stubbed out
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
81 |
9c3c5a572b57
mpffs-ls works with the length code stubbed out
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
82 parse_cmdline_options(argc, argv); |
9c3c5a572b57
mpffs-ls works with the length code stubbed out
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
83 if (argc - optind != 1) |
9c3c5a572b57
mpffs-ls works with the length code stubbed out
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
84 usage(); |
9c3c5a572b57
mpffs-ls works with the length code stubbed out
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
85 imgfile = argv[optind]; |
9c3c5a572b57
mpffs-ls works with the length code stubbed out
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
86 preliminaries(); |
9c3c5a572b57
mpffs-ls works with the length code stubbed out
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
87 dump_dir(root.descend, 0); |
9c3c5a572b57
mpffs-ls works with the length code stubbed out
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
88 exit(0); |
9c3c5a572b57
mpffs-ls works with the length code stubbed out
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
89 } |