FreeCalypso > hg > freecalypso-tools
annotate ffstools/tiffs-rd/decode.c @ 919:1f27fc13eab7
tiffs: add support for extended filenames found in SE K2x0 FFS
author | Mychaela Falconia <falcon@freecalypso.org> |
---|---|
date | Sat, 31 Dec 2022 09:27:01 +0000 |
parents | ed983d4040a8 |
children |
rev | line source |
---|---|
726
d68275d47a32
tiffs IVA: decode command implemented
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1 /* |
d68275d47a32
tiffs IVA: decode command implemented
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
2 * This C module implements the decode command, displaying certain |
d68275d47a32
tiffs IVA: decode command implemented
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
3 * FFS files in a developer-friendly decoded form. |
d68275d47a32
tiffs IVA: decode command implemented
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
4 */ |
d68275d47a32
tiffs IVA: decode command implemented
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
5 |
d68275d47a32
tiffs IVA: decode command implemented
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
6 #include <sys/types.h> |
d68275d47a32
tiffs IVA: decode command implemented
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
7 #include <stdio.h> |
d68275d47a32
tiffs IVA: decode command implemented
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
8 #include <stdlib.h> |
d68275d47a32
tiffs IVA: decode command implemented
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
9 #include <string.h> |
d68275d47a32
tiffs IVA: decode command implemented
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
10 #include <strings.h> |
d68275d47a32
tiffs IVA: decode command implemented
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
11 #include <unistd.h> |
d68275d47a32
tiffs IVA: decode command implemented
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
12 #include "types.h" |
d68275d47a32
tiffs IVA: decode command implemented
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
13 #include "struct.h" |
d68275d47a32
tiffs IVA: decode command implemented
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
14 #include "globals.h" |
d68275d47a32
tiffs IVA: decode command implemented
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
15 #include "pathname.h" |
d68275d47a32
tiffs IVA: decode command implemented
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
16 |
d68275d47a32
tiffs IVA: decode command implemented
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
17 extern void write_afcdac_ascii(); |
d68275d47a32
tiffs IVA: decode command implemented
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
18 extern void write_stdmap_ascii(); |
d68275d47a32
tiffs IVA: decode command implemented
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
19 extern void write_adccal_table(); |
d68275d47a32
tiffs IVA: decode command implemented
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
20 extern void write_afcparams_table(); |
d68275d47a32
tiffs IVA: decode command implemented
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
21 extern void write_tx_ramps_table(); |
d68275d47a32
tiffs IVA: decode command implemented
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
22 extern void write_tx_levels_table(); |
d68275d47a32
tiffs IVA: decode command implemented
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
23 extern void write_tx_calchan_table(); |
d68275d47a32
tiffs IVA: decode command implemented
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
24 extern void write_tx_caltemp_table(); |
d68275d47a32
tiffs IVA: decode command implemented
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
25 extern void write_rx_calchan_table(); |
d68275d47a32
tiffs IVA: decode command implemented
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
26 extern void write_rx_caltemp_table(); |
d68275d47a32
tiffs IVA: decode command implemented
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
27 extern void write_rx_agcparams_table(); |
d68275d47a32
tiffs IVA: decode command implemented
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
28 |
727
ed983d4040a8
tiffs IVA: decode pcm-IMEI added
Mychaela Falconia <falcon@freecalypso.org>
parents:
726
diff
changeset
|
29 static void |
ed983d4040a8
tiffs IVA: decode pcm-IMEI added
Mychaela Falconia <falcon@freecalypso.org>
parents:
726
diff
changeset
|
30 pcm_IMEI_decode(bin, outf) |
ed983d4040a8
tiffs IVA: decode pcm-IMEI added
Mychaela Falconia <falcon@freecalypso.org>
parents:
726
diff
changeset
|
31 u8 *bin; |
ed983d4040a8
tiffs IVA: decode pcm-IMEI added
Mychaela Falconia <falcon@freecalypso.org>
parents:
726
diff
changeset
|
32 FILE *outf; |
ed983d4040a8
tiffs IVA: decode pcm-IMEI added
Mychaela Falconia <falcon@freecalypso.org>
parents:
726
diff
changeset
|
33 { |
ed983d4040a8
tiffs IVA: decode pcm-IMEI added
Mychaela Falconia <falcon@freecalypso.org>
parents:
726
diff
changeset
|
34 u8 rev[8]; |
ed983d4040a8
tiffs IVA: decode pcm-IMEI added
Mychaela Falconia <falcon@freecalypso.org>
parents:
726
diff
changeset
|
35 unsigned n; |
ed983d4040a8
tiffs IVA: decode pcm-IMEI added
Mychaela Falconia <falcon@freecalypso.org>
parents:
726
diff
changeset
|
36 |
ed983d4040a8
tiffs IVA: decode pcm-IMEI added
Mychaela Falconia <falcon@freecalypso.org>
parents:
726
diff
changeset
|
37 for (n = 0; n < 8; n++) |
ed983d4040a8
tiffs IVA: decode pcm-IMEI added
Mychaela Falconia <falcon@freecalypso.org>
parents:
726
diff
changeset
|
38 rev[n] = ((bin[n] & 0xF0) >> 4) | ((bin[n] & 0x0F) << 4); |
ed983d4040a8
tiffs IVA: decode pcm-IMEI added
Mychaela Falconia <falcon@freecalypso.org>
parents:
726
diff
changeset
|
39 fprintf(outf, "%02X%02X%02X%02X-%02X%02X%02X-%02X\n", rev[0], rev[1], |
ed983d4040a8
tiffs IVA: decode pcm-IMEI added
Mychaela Falconia <falcon@freecalypso.org>
parents:
726
diff
changeset
|
40 rev[2], rev[3], rev[4], rev[5], rev[6], rev[7]); |
ed983d4040a8
tiffs IVA: decode pcm-IMEI added
Mychaela Falconia <falcon@freecalypso.org>
parents:
726
diff
changeset
|
41 } |
ed983d4040a8
tiffs IVA: decode pcm-IMEI added
Mychaela Falconia <falcon@freecalypso.org>
parents:
726
diff
changeset
|
42 |
726
d68275d47a32
tiffs IVA: decode command implemented
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
43 static struct map { |
d68275d47a32
tiffs IVA: decode command implemented
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
44 char *req_name; |
d68275d47a32
tiffs IVA: decode command implemented
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
45 char *pathname; |
d68275d47a32
tiffs IVA: decode command implemented
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
46 int need_band; |
d68275d47a32
tiffs IVA: decode command implemented
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
47 unsigned size; |
d68275d47a32
tiffs IVA: decode command implemented
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
48 void (*decode_func)(); |
d68275d47a32
tiffs IVA: decode command implemented
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
49 } map_table[] = { |
d68275d47a32
tiffs IVA: decode command implemented
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
50 {"adccal", "/sys/adccal", 0, 36, write_adccal_table}, |
d68275d47a32
tiffs IVA: decode command implemented
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
51 {"afcdac", "/gsm/rf/afcdac", 0, 2, write_afcdac_ascii}, |
d68275d47a32
tiffs IVA: decode command implemented
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
52 {"afcparams", "/gsm/rf/afcparams", 0, 24, write_afcparams_table}, |
d68275d47a32
tiffs IVA: decode command implemented
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
53 {"stdmap", "/gsm/rf/stdmap", 0, 2, write_stdmap_ascii}, |
d68275d47a32
tiffs IVA: decode command implemented
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
54 {"tx-ramps", "/gsm/rf/tx/ramps.%s", 1, 512, write_tx_ramps_table}, |
d68275d47a32
tiffs IVA: decode command implemented
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
55 {"tx-levels", "/gsm/rf/tx/levels.%s", 1, 128, write_tx_levels_table}, |
d68275d47a32
tiffs IVA: decode command implemented
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
56 {"tx-calchan", "/gsm/rf/tx/calchan.%s", 1, 128, write_tx_calchan_table}, |
d68275d47a32
tiffs IVA: decode command implemented
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
57 {"tx-caltemp", "/gsm/rf/tx/caltemp.%s", 1, 40, write_tx_caltemp_table}, |
d68275d47a32
tiffs IVA: decode command implemented
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
58 {"rx-calchan", "/gsm/rf/rx/calchan.%s", 1, 40, write_rx_calchan_table}, |
d68275d47a32
tiffs IVA: decode command implemented
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
59 {"rx-caltemp", "/gsm/rf/rx/caltemp.%s", 1, 44, write_rx_caltemp_table}, |
d68275d47a32
tiffs IVA: decode command implemented
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
60 {"rx-agcparams", "/gsm/rf/rx/agcparams.%s", 1, 8, write_rx_agcparams_table}, |
727
ed983d4040a8
tiffs IVA: decode pcm-IMEI added
Mychaela Falconia <falcon@freecalypso.org>
parents:
726
diff
changeset
|
61 {"pcm-IMEI", "/pcm/IMEI", 0, 8, pcm_IMEI_decode}, |
726
d68275d47a32
tiffs IVA: decode command implemented
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
62 {0, 0, 0, 0, 0} |
d68275d47a32
tiffs IVA: decode command implemented
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
63 }; |
d68275d47a32
tiffs IVA: decode command implemented
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
64 |
d68275d47a32
tiffs IVA: decode command implemented
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
65 static u8 file_read_buf[512]; |
d68275d47a32
tiffs IVA: decode command implemented
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
66 static unsigned file_expected_size; |
d68275d47a32
tiffs IVA: decode command implemented
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
67 static unsigned file_read_ptr; |
d68275d47a32
tiffs IVA: decode command implemented
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
68 |
d68275d47a32
tiffs IVA: decode command implemented
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
69 static void |
d68275d47a32
tiffs IVA: decode command implemented
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
70 read_chunk(ch) |
d68275d47a32
tiffs IVA: decode command implemented
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
71 struct chunkinfo *ch; |
d68275d47a32
tiffs IVA: decode command implemented
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
72 { |
d68275d47a32
tiffs IVA: decode command implemented
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
73 if (!ch->len) |
d68275d47a32
tiffs IVA: decode command implemented
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
74 return; |
d68275d47a32
tiffs IVA: decode command implemented
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
75 if (file_read_ptr + ch->len > file_expected_size) { |
d68275d47a32
tiffs IVA: decode command implemented
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
76 fprintf(stderr, "error: FFS file is longer than expected\n"); |
d68275d47a32
tiffs IVA: decode command implemented
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
77 exit(1); |
d68275d47a32
tiffs IVA: decode command implemented
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
78 } |
d68275d47a32
tiffs IVA: decode command implemented
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
79 bcopy(ch->start, file_read_buf + file_read_ptr, ch->len); |
d68275d47a32
tiffs IVA: decode command implemented
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
80 file_read_ptr += ch->len; |
d68275d47a32
tiffs IVA: decode command implemented
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
81 } |
d68275d47a32
tiffs IVA: decode command implemented
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
82 |
d68275d47a32
tiffs IVA: decode command implemented
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
83 static void |
d68275d47a32
tiffs IVA: decode command implemented
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
84 segment_read_callback(inf, opaque) |
d68275d47a32
tiffs IVA: decode command implemented
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
85 struct inode_info *inf; |
d68275d47a32
tiffs IVA: decode command implemented
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
86 u_long opaque; |
d68275d47a32
tiffs IVA: decode command implemented
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
87 { |
d68275d47a32
tiffs IVA: decode command implemented
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
88 struct chunkinfo chi; |
d68275d47a32
tiffs IVA: decode command implemented
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
89 |
d68275d47a32
tiffs IVA: decode command implemented
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
90 size_extra_chunk(inf, &chi); |
d68275d47a32
tiffs IVA: decode command implemented
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
91 read_chunk(&chi); |
d68275d47a32
tiffs IVA: decode command implemented
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
92 } |
d68275d47a32
tiffs IVA: decode command implemented
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
93 |
d68275d47a32
tiffs IVA: decode command implemented
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
94 cmd_decode(argc, argv) |
d68275d47a32
tiffs IVA: decode command implemented
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
95 char **argv; |
d68275d47a32
tiffs IVA: decode command implemented
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
96 { |
d68275d47a32
tiffs IVA: decode command implemented
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
97 struct map *map; |
d68275d47a32
tiffs IVA: decode command implemented
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
98 char pathname[PATHNAME_BUF_SIZE]; |
d68275d47a32
tiffs IVA: decode command implemented
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
99 int headino; |
d68275d47a32
tiffs IVA: decode command implemented
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
100 struct inode_info *inf; |
d68275d47a32
tiffs IVA: decode command implemented
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
101 struct chunkinfo chi; |
d68275d47a32
tiffs IVA: decode command implemented
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
102 |
d68275d47a32
tiffs IVA: decode command implemented
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
103 if (argc < 2) { |
d68275d47a32
tiffs IVA: decode command implemented
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
104 usage: fprintf(stderr, "usage: decode file-keyword [band]\n"); |
d68275d47a32
tiffs IVA: decode command implemented
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
105 exit(1); |
d68275d47a32
tiffs IVA: decode command implemented
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
106 } |
d68275d47a32
tiffs IVA: decode command implemented
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
107 for (map = map_table; map->req_name; map++) |
d68275d47a32
tiffs IVA: decode command implemented
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
108 if (!strcmp(map->req_name, argv[1])) |
d68275d47a32
tiffs IVA: decode command implemented
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
109 break; |
d68275d47a32
tiffs IVA: decode command implemented
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
110 if (!map->req_name) { |
d68275d47a32
tiffs IVA: decode command implemented
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
111 fprintf(stderr, "error: file keyword \"%s\" not known\n", |
d68275d47a32
tiffs IVA: decode command implemented
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
112 argv[1]); |
d68275d47a32
tiffs IVA: decode command implemented
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
113 exit(1); |
d68275d47a32
tiffs IVA: decode command implemented
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
114 } |
d68275d47a32
tiffs IVA: decode command implemented
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
115 if (map->need_band) { |
d68275d47a32
tiffs IVA: decode command implemented
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
116 if (argc < 3) { |
d68275d47a32
tiffs IVA: decode command implemented
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
117 fprintf(stderr, |
d68275d47a32
tiffs IVA: decode command implemented
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
118 "error: band not specified for %s table\n", |
d68275d47a32
tiffs IVA: decode command implemented
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
119 map->req_name); |
d68275d47a32
tiffs IVA: decode command implemented
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
120 exit(1); |
d68275d47a32
tiffs IVA: decode command implemented
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
121 } |
d68275d47a32
tiffs IVA: decode command implemented
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
122 if (argc > 3) |
d68275d47a32
tiffs IVA: decode command implemented
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
123 goto usage; |
d68275d47a32
tiffs IVA: decode command implemented
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
124 if (strlen(argv[2]) > 7) { |
d68275d47a32
tiffs IVA: decode command implemented
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
125 fprintf(stderr, |
d68275d47a32
tiffs IVA: decode command implemented
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
126 "error: band name argument is too long\n"); |
d68275d47a32
tiffs IVA: decode command implemented
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
127 exit(1); |
d68275d47a32
tiffs IVA: decode command implemented
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
128 } |
d68275d47a32
tiffs IVA: decode command implemented
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
129 sprintf(pathname, map->pathname, argv[2]); |
d68275d47a32
tiffs IVA: decode command implemented
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
130 } else { |
d68275d47a32
tiffs IVA: decode command implemented
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
131 if (argc > 2) |
d68275d47a32
tiffs IVA: decode command implemented
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
132 goto usage; |
d68275d47a32
tiffs IVA: decode command implemented
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
133 strcpy(pathname, map->pathname); |
d68275d47a32
tiffs IVA: decode command implemented
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
134 } |
d68275d47a32
tiffs IVA: decode command implemented
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
135 file_expected_size = map->size; |
d68275d47a32
tiffs IVA: decode command implemented
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
136 |
d68275d47a32
tiffs IVA: decode command implemented
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
137 read_ffs_image(); |
d68275d47a32
tiffs IVA: decode command implemented
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
138 find_inode_block(); |
d68275d47a32
tiffs IVA: decode command implemented
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
139 alloc_inode_table(); |
d68275d47a32
tiffs IVA: decode command implemented
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
140 find_root_inode(); |
d68275d47a32
tiffs IVA: decode command implemented
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
141 |
d68275d47a32
tiffs IVA: decode command implemented
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
142 headino = find_pathname(pathname); |
d68275d47a32
tiffs IVA: decode command implemented
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
143 inf = inode_info[headino]; |
d68275d47a32
tiffs IVA: decode command implemented
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
144 if (inf->type != 0xF1) { |
d68275d47a32
tiffs IVA: decode command implemented
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
145 fprintf(stderr, "error: FFS object is not a regular file\n"); |
d68275d47a32
tiffs IVA: decode command implemented
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
146 exit(1); |
d68275d47a32
tiffs IVA: decode command implemented
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
147 } |
d68275d47a32
tiffs IVA: decode command implemented
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
148 size_head_chunk(inf, &chi); |
d68275d47a32
tiffs IVA: decode command implemented
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
149 read_chunk(&chi); |
d68275d47a32
tiffs IVA: decode command implemented
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
150 iterate_seg_file(headino, segment_read_callback, 0L, 0, 0); |
d68275d47a32
tiffs IVA: decode command implemented
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
151 if (file_read_ptr < file_expected_size) { |
d68275d47a32
tiffs IVA: decode command implemented
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
152 fprintf(stderr, "error: FFS file is shorter than expected\n"); |
d68275d47a32
tiffs IVA: decode command implemented
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
153 exit(1); |
d68275d47a32
tiffs IVA: decode command implemented
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
154 } |
d68275d47a32
tiffs IVA: decode command implemented
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
155 map->decode_func(file_read_buf, stdout); |
d68275d47a32
tiffs IVA: decode command implemented
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
156 exit(0); |
d68275d47a32
tiffs IVA: decode command implemented
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
157 } |