Skip to content

Commit c2776b3

Browse files
fphelper: always look for keymap in kern.bin
1 parent 5711949 commit c2776b3

File tree

1 file changed

+21
-11
lines changed

1 file changed

+21
-11
lines changed

fphelper/main.c

+21-11
Original file line numberDiff line numberDiff line change
@@ -654,19 +654,27 @@ static void scan_fw(uint8_t *buf, unsigned size, int flags) {
654654
printf("0x%x: COLB, name = \"%s\", offs = 0x%x (0x%x), size = 0x%x, 0x%x\n",
655655
(unsigned)((uint8_t*)p2 - buf), name, p2[2], i + p2[2], p2[3], p2[4]);
656656
#if WITH_LZMADEC
657-
if (flags & 1) {
657+
do {
658658
const char *s = "unknown"; int k = 0;
659659
switch (p2[1]) {
660660
case 0x494d4147: s = "kern"; k = 1; break;
661661
case 0x75736572: s = "user"; k = 2; break;
662662
case 0x7253736f: s = "rsrc"; k = 3; break;
663663
}
664664
clues.drps_type = k;
665-
k = drps_cnt[k]++;
666-
if (!k) snprintf(name, sizeof(name), "%s.bin", s);
667-
else snprintf(name, sizeof(name), "%s%u.bin", s, k);
668-
drps_decode(buf, size, i, j, name);
669-
}
665+
if (flags & 1) {
666+
k = drps_cnt[k]++;
667+
if (!k) snprintf(name, sizeof(name), "%s.bin", s);
668+
else snprintf(name, sizeof(name), "%s%u.bin", s, k);
669+
s = name;
670+
} else {
671+
if (k != 1 || !clues.kern_addr) break;
672+
if (clues.keymap_addr < clues.kern_addr) break;
673+
// Decode to scan keymap.
674+
s = NULL;
675+
}
676+
drps_decode(buf, size, i, j, s);
677+
} while (0);
670678
#endif
671679
}
672680
} while (0);
@@ -1161,8 +1169,10 @@ static int drps_decode(uint8_t *mem, size_t size,
11611169
mem += colb_offs;
11621170
p = (uint32_t*)mem;
11631171

1164-
fo = fopen(outfn, "wb");
1165-
if (!fo) ERR_EXIT("fopen(output) failed\n");
1172+
if (outfn) {
1173+
fo = fopen(outfn, "wb");
1174+
if (!fo) ERR_EXIT("fopen(output) failed\n");
1175+
}
11661176

11671177
if (*p == 0x4e504143) {
11681178
uint32_t data_size = p[2], num, offs, next;
@@ -1190,7 +1200,7 @@ static int drps_decode(uint8_t *mem, size_t size,
11901200
size2 = READ32_LE(mem + 5); \
11911201
if (size2 > dst_size) FATAL(); \
11921202
result = sprd_lzmadec(mem, &src_size, dst, size2); \
1193-
fwrite(dst, 1, result, fo);
1203+
if (fo) fwrite(dst, 1, result, fo);
11941204

11951205
RUN_LZMADEC(mem + offs)
11961206
if (result != size2) {
@@ -1208,10 +1218,10 @@ static int drps_decode(uint8_t *mem, size_t size,
12081218
FATAL();
12091219
}
12101220
if (clues.drps_type == 1 && clues.kern_addr)
1211-
check_keymap2(dst, result, clues.kern_addr, 1);
1221+
check_keymap2(dst, result, clues.kern_addr, outfn ? 1 : 0);
12121222
#undef RUN_LZMADEC
12131223
}
1214-
fclose(fo);
1224+
if (fo) fclose(fo);
12151225
}
12161226
free(dst);
12171227
return 0;

0 commit comments

Comments
 (0)