Advertisement
Guest User

Untitled

a guest
Dec 12th, 2017
113
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.38 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <math.h>
  4.  
  5. int64_t
  6. calc_max_size(int64_t block_size,
  7. int64_t block_num_size,
  8. int64_t inode_direct_block_count)
  9. {
  10. int64_t res = inode_direct_block_count;
  11. int64_t l0, l1, l2;
  12. l0 = block_size / block_num_size;
  13. if(__builtin_smulll_overflow(l0, l0, &l1)){
  14. return -1;
  15. }
  16. if(__builtin_smulll_overflow(l1, l0, &l2)){
  17. return -1;
  18. }
  19. if(__builtin_saddll_overflow(res, l0, &res)){
  20. return -1;
  21. }
  22. if(__builtin_saddll_overflow(res, l1, &res)){
  23. return -1;
  24. }
  25. if(__builtin_saddll_overflow(res, l2, &res)){
  26. return -1;
  27. }
  28. if(block_num_size < 8 && res >= pow(2, 8 * block_num_size)){
  29. res = pow(2, 8 * block_num_size);
  30. }
  31. if(__builtin_smulll_overflow(res, block_num_size, &res)){
  32. return -1;
  33. }
  34. return res;
  35. }
  36.  
  37. int
  38. main(void)
  39. {
  40. int64_t block_size, block_num_size, inode_direct_block_count;
  41. scanf("%lld%lld%lld", &block_size, &block_num_size, &inode_direct_block_count);
  42. int64_t max_size = calc_max_size(block_size, block_num_size, inode_direct_block_count);
  43. printf("%lld\n", max_size);
  44. int64_t i = 1;
  45. int64_t max = calc_max_size(block_size, 1, inode_direct_block_count);
  46. for(i = 2; ; i++){
  47. }
  48. printf("%lld %lld\n", block_num_size, max_size);
  49. return 0;
  50. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement