#include #include #include #include "fileutils.h" void dearchive(FILE * f) { long nb; long * address; char fname[100]; int i; FILE * f_out; fread(&nb, 4, 1, f); nb++; fprintf(stderr, "Reading index... (%li elements)\n", nb); address = (long *) malloc(nb * sizeof(long) + 1); for (i = 0; i < nb; i++) { fread(address + i, 4, 1, f); } address[nb] = MAXINT; for (i = 0; i < nb; i++) { fprintf(stderr, "Dumping file %i\n", i); sprintf(fname, "part-%i.lz", i); f_out = fopen(fname, "wb"); copy(fileno(f), fileno(f_out), address[i + 1] - address[i]); fclose(f_out); } free(address); } int main(void) { dearchive(stdin); }