14 int main(int argc, char **argv)
21 printf("dumbass, specify filename to unpack\n");
25 fd = open(argv[1], O_RDONLY);
27 perror("open datafile");
30 /* get number of entries */
31 read(fd, &num_entries, 4);
33 printf("%d entries in datafile\n", num_entries);
35 datafile = calloc(num_entries, sizeof(DirEntry));
36 read(fd, datafile, num_entries * sizeof(DirEntry));
37 printf("Directory Listing:\n");
38 for (i = 0; i < num_entries; i++) {
40 memset(filename, 0, sizeof(filename));
41 strncpy(filename, datafile[i].filename, 12);
42 printf("%02d:\t%s (%u bytes)\n", i, filename,
46 for (i = 0; i < num_entries; i++) {
50 memset(filename, 0, sizeof(filename));
51 strncpy(filename, datafile[i].filename, 12);
52 printf("Extracting %s ", filename);
54 outfd = open(filename, O_RDWR | O_CREAT, 0644);
56 perror("cant open file");
59 lseek(fd, datafile[i].offset, SEEK_SET);
60 buf = calloc(1, datafile[i].size + 16);
61 read(fd, buf, datafile[i].size);
62 write(outfd, buf, datafile[i].size);