Guest User

Untitled

a guest
May 25th, 2018
98
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.34 KB | None | 0 0
  1. #include <fcntl.h>
  2. #include <stdio.h>
  3. #include <stdlib.h>
  4. #include <unistd.h>
  5. #include "ext2.h"
  6.  
  7. #define BASE_OFFSET 1024
  8. #define EXT2_BLOCK_SIZE 1024
  9. #define IMAGE "image.img"
  10.  
  11. typedef unsigned char bmap;
  12. #define __NBITS (8 * (int) sizeof (bmap))
  13. #define __BMELT(d) ((d) / __NBITS)
  14. #define __BMMASK(d) ((bmap) 1 << ((d) % __NBITS))
  15. #define BM_SET(d, set) ((set[__BMELT (d)] |= __BMMASK (d)))
  16. #define BM_CLR(d, set) ((set[__BMELT (d)] &= ~__BMMASK (d)))
  17. #define BM_ISSET(d, set) ((set[__BMELT (d)] & __BMMASK (d)) != 0)
  18.  
  19. unsigned int block_size = 0;
  20. #define BLOCK_OFFSET(block) (BASE_OFFSET + (block-1)*block_size)
  21.  
  22. int main(void)
  23. {
  24. struct ext2_super_block super;
  25. struct ext2_group_desc group;
  26. int fd;
  27.  
  28. if ((fd = open(IMAGE, O_RDONLY)) < 0) {
  29. perror(IMAGE);
  30. exit(1);
  31. }
  32.  
  33. // read super-block
  34. lseek(fd, BASE_OFFSET, SEEK_SET);
  35. read(fd, &super, sizeof(super));
  36. if (super.s_magic != EXT2_SUPER_MAGIC) {
  37. fprintf(stderr, "Not a Ext2 filesystem\n");
  38. exit(1);
  39. }
  40. block_size = 1024 << super.s_log_block_size;
  41.  
  42. printf("Reading from image file " IMAGE ":\n"
  43. "Blocks count : %u\n"
  44. "First non-reserved inode: %u\n"
  45. "Inode size : %u\n",
  46. super.s_blocks_count,
  47. super.s_first_ino,
  48. super.s_inode_size);
  49.  
  50. return 0;
  51. }
Add Comment
Please, Sign In to add comment