#include #include #include #define BLOCK 2048 int main(int argc, char *argv[]) { FILE *img; int i, j, entrycount; int oldpos; int offset; int size; char filename[24]; FILE *file; char temp[BLOCK]; if (argc < 2) { printf("Usage: %s img\n", argv[0]); exit(1); } if ((img = fopen(argv[1], "r")) == NULL) { printf("Couldn't open file: %s\n", argv[1]); exit(1); } fseek(img, 4, SEEK_CUR); fread(&entrycount, 4, 1, img); for (j = 0; j < entrycount; j++) { fread(&offset, 4, 1, img); fread(&size, 4, 1, img); fread(filename, 1, 24, img); oldpos = ftell(img); if ((file = fopen(filename, "w")) == NULL) { printf("Couldn't open file: %s\n", filename); exit(1); } fseek(img, offset*BLOCK, 0); for (i = 0; i < size; i++) { fread(temp, BLOCK, 1, img); fwrite(temp, BLOCK, 1, file); } fclose(file); fseek(img, oldpos, 0); } fclose(img); return 0; }