Advertisement
cgiannotta

recover.c

Jan 17th, 2019
58
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.07 KB | None | 0 0
  1. // Recovers JPEGS from memory card
  2.  
  3. #include <cs50.h>
  4. #include <stdio.h>
  5.  
  6. int main(int argc, char *argv[])
  7. {
  8. // ensure proper usage
  9. if (argc ==! 2)
  10. {
  11. fprintf(stderr, "Usage: recovery file\n");
  12. return 1;
  13. }
  14.  
  15. // remember memory file name
  16. char *memfile = argv[1];
  17.  
  18. // open memory card
  19. FILE* memcard = fopen(memfile, "r");
  20. if (memcard == NULL)
  21. {
  22. fprintf(stderr, "Could not open %s.\n", memfile);
  23. return 2;
  24. }
  25.  
  26. // temporary storage
  27. int buffer[512 * sizeof(int)];
  28. int bytes_read;
  29. int img_count = 0;
  30. char filename[8];
  31. FILE* img = NULL;
  32.  
  33. // until the end of the memory file
  34. do
  35. {
  36. // read from memory file
  37. bytes_read = fread(buffer, 1, 512, memcard);
  38. int x = buffer[0];
  39. int c = img_count;
  40.  
  41. // determine if start of a new jpeg
  42. if (buffer[0] == 0xff && buffer[1] == 0xd8 && buffer[2] == 0xff && (buffer[3] & 0xf0) == 0xe0)
  43. {
  44. // determine if already found a jpeg
  45. if (img)
  46. {
  47. // close previous jpeg
  48. fclose(img);
  49.  
  50. // increment jpeg counter
  51. img_count++;
  52.  
  53. // start writing a new jpeg
  54. sprintf(filename, "%03i.jpg", img_count);
  55. img = fopen(filename, "w");
  56. fwrite(buffer, 1, 512, img);
  57. }
  58.  
  59. else
  60. {
  61. // increment jpeg counter
  62. img_count++;
  63.  
  64. // start writing a new jpeg
  65. sprintf(filename, "%03i.jpg", img_count);
  66. img = fopen(filename, "w");
  67. fwrite(buffer, 1, 512, img);
  68. }
  69. }
  70.  
  71. else
  72. {
  73. // if already found jpeg, write those bytes to current jpeg
  74. if (img)
  75. {
  76. fwrite(buffer, 1, 512, img);
  77. }
  78. }
  79.  
  80. }
  81. while (bytes_read == 512);
  82.  
  83. // close memory file
  84. fclose(memcard);
  85.  
  86. return 0;
  87.  
  88. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement