Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #include <stdlib.h>
- int main(int argc, char *argv[])
- {
- if(argc != 2)
- {
- fprintf(stderr, "Usage: ./recover image\n");
- return 1;
- }
- char *infile = argv[1];
- FILE *inptr = fopen(infile, "r");
- if (inptr == NULL)
- {
- fprintf(stderr, "Could not open %s.\n", infile);
- return 2;
- }
- //open new outfile
- FILE *outptr = NULL;
- //create a buffer
- char buffer[512];
- //sprintf variables
- char name[10];
- int a = 0;
- int q = 1;
- int w = 1;
- //iterate
- while(fread(&buffer, 512, 1, inptr))
- {
- //find jpeg header
- if((buffer[0]&0xff) == 0xff && (buffer[1]&0xff) == 0xd8 && (buffer[2]&0xff) == 0xff && (buffer[3] & 0xf0) == 0xe0)
- {
- //printf("%ith head read, 1: %x, 2: %x, 3: %x, 4: %x\n", w, buffer[0],buffer[1],buffer[2],buffer[3]);
- w++;
- //create a numbered file
- sprintf(name,"%03d.jpg",a);
- //open outfile
- outptr = fopen(name,"w");
- //write head chunk
- fwrite(&buffer, 512, 1, outptr);
- //printf("%ith head write, 1: %x, 2: %x, 3: %x, 4: %x\n", q, buffer[0],buffer[1],buffer[2],buffer[3]);
- q++;
- //identify next chunk
- while(fread(&buffer, 512, 1, inptr))
- {
- //printf("%ith body read, 1: %x, 2: %x, 3: %x, 4: %x\n", w, buffer[0],buffer[1],buffer[2],buffer[3]);
- w++;
- if((buffer[0]&0xff) == 0xff && (buffer[1]&0xff) == 0xd8 && (buffer[2]&0xff) == 0xff && (buffer[3] & 0xf0) == 0xe0)
- {
- //printf("2st head, 1: %x, 2: %x, 3: %x, 4: %x\n", buffer[0],buffer[1],buffer[2],buffer[3]);
- //close previous jpg file
- fclose(outptr);
- printf("%s is closed\n",name);
- //update variables
- a++;
- //create a numbered file
- sprintf(name,"%03d.jpg",a);
- //open new outfile
- outptr = fopen(name,"w");
- //write body chunk
- fwrite(&buffer, 512, 1, outptr);
- }
- else
- {
- //write body chunk
- fwrite(&buffer, 512, 1, outptr);
- //printf("%ith body write, 1: %x, 2: %x, 3: %x, 4: %x\n", q, buffer[0],buffer[1],buffer[2],buffer[3]);
- q++;
- }
- }
- }
- }
- fclose(inptr);
- fclose(outptr);
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement