I have been working on this for a long time. I used check50 on it and it reports that the last image isn't recovered correctly. Can someone provide insight?
#include <stdio.h>
#include <cs50.h>
#include <stdint.h>
int main(int argc, char* argv[]){
int cntr=0;
if(argc != 2){
fprintf(stderr, "Usage: ./recover source\n");
return 1;
}
FILE* inptr = fopen(argv[1], "r");
if (inptr == NULL)
{
fprintf(stderr, "Could not open %p.\n", inptr);
return 2;
}
int bytec;
FILE* img = NULL;
do{
uint8_t storage[512];
bytec = fread(&storage, 1, 512, inptr);
if(cntr == 0 && storage[0] == 0xff && storage[1] == 0xd8 && storage[2] == 0xff && ((storage[3] & 0xf0) == 0xe0)){
char files[8];
sprintf(files, "%03i.jpg", cntr);
img = fopen(files, "w");
cntr++;
fwrite(storage, 1, 512, img);
}else if(cntr > 0 && storage[0] == 0xff && storage[1] == 0xd8 && storage[2] == 0xff && (storage[3] & 0xf0) == 0xe0){
fclose(img);
char files[8];
sprintf(files, "%03i.jpg", cntr);
img = fopen(files, "w");
cntr++;
fwrite(storage, 1, 512, img);
}else if(cntr==0){
}else{
fwrite(storage, 1, 512, img);
}
}while(bytec==512);
uint8_t storage[512];
bytec = fread(&storage, 1, 512, inptr);
for(int f=0; f<512;f++){
if((char)storage[f]!=EOF){
fwrite(&storage[f], 1, 1, img);
}else{
fwrite(&storage[f], 1, 1, img);
fclose(img);
break;
}
}
printf("%d", cntr);
return 0;
}