int main(int argc, char *argv[]) { off_t size; uint8_t *buf; int fd; if (argc != 2) { fprintf(stderr, "usage: %s image\n", argv[0]); exit(EXIT_FAILURE); } if ((fd = open(argv[1], O_RDONLY)) == -1) err(EXIT_FAILURE, "%s", argv[1]); if ((size = lseek(fd, 0, SEEK_END)) == -1) err(EXIT_FAILURE, "%s", argv[1]); if ((buf = mmap(NULL, size, PROT_READ, MAP_SHARED | MAP_FILE, fd, 0)) == MAP_FAILED) err(EXIT_FAILURE, "%s", argv[1]); if (memcmp(buf, "RKFW", 4) == 0) unpack_rkfw(argv[1], buf, size); else if (memcmp(buf, "RKAF", 4) == 0) unpack_rkaf(argv[1], buf, size); else if (memcmp(buf, "KRNL", 4) == 0 || memcmp(buf, "PARM", 4) == 0) unpack_krnl(argv[1], buf, size); else if (memcmp(buf, "ANDROID!", 8) == 0) unpack_android(argv[1], buf, size); else errx(EXIT_FAILURE, "invalid signature"); printf("unpacked\n"); munmap(buf, size); close(fd); return EXIT_SUCCESS; }
int main(int argc, char *argv[]) { if (argc != 2) fatal("rkunpack v%d.%d\nusage: %s update.img\n", RKFLASHTOOL_VERSION_MAJOR, RKFLASHTOOL_VERSION_MINOR, argv[0]); if ((fd = open(argv[1], O_BINARY | O_RDONLY)) == -1) fatal("%s: %s\n", argv[1], strerror(errno)); if ((size = lseek(fd, 0, SEEK_END)) == -1) fatal("%s: %s\n", argv[1], strerror(errno)); #ifdef _WIN32 fm = CreateFileMapping((HANDLE)_get_osfhandle(fd), NULL, PAGE_READONLY, 0, 0, NULL); buf = MapViewOfFile(fm, FILE_MAP_READ, 0, 0, 0); if (!buf) fatal("%s: cannot create MapView of File\n", argv[1]); #else if ((buf = mmap(NULL, size, PROT_READ, MAP_SHARED | MAP_FILE, fd, 0)) == MAP_FAILED) fatal("%s: %s\n", argv[1], strerror(errno)); #endif if (!memcmp(buf, "RKAF", 4)) unpack_rkaf(); else if (!memcmp(buf, "RKFW", 4)) unpack_rkfw(); else fatal("%s: invalid signature\n", argv[1]); printf("unpacked\n"); #ifdef _WIN32 CloseHandle(fm); UnmapViewOfFile(buf); #else munmap(buf, size); #endif close(fd); return 0; }