Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #include <stdlib.h>
- #include <math.h>
- int64_t
- calc_max_size(int64_t block_size,
- int64_t block_num_size,
- int64_t inode_direct_block_count)
- {
- int64_t res = inode_direct_block_count;
- int64_t l0, l1, l2;
- l0 = block_size / block_num_size;
- if(__builtin_smulll_overflow(l0, l0, &l1)){
- return -1;
- }
- if(__builtin_smulll_overflow(l1, l0, &l2)){
- return -1;
- }
- if(__builtin_saddll_overflow(res, l0, &res)){
- return -1;
- }
- if(__builtin_saddll_overflow(res, l1, &res)){
- return -1;
- }
- if(__builtin_saddll_overflow(res, l2, &res)){
- return -1;
- }
- if(block_num_size < 8 && res >= pow(2, 8 * block_num_size)){
- res = pow(2, 8 * block_num_size);
- }
- if(__builtin_smulll_overflow(res, block_num_size, &res)){
- return -1;
- }
- return res;
- }
- int
- main(void)
- {
- int64_t block_size, block_num_size, inode_direct_block_count;
- scanf("%lld%lld%lld", &block_size, &block_num_size, &inode_direct_block_count);
- int64_t max_size = calc_max_size(block_size, block_num_size, inode_direct_block_count);
- printf("%lld\n", max_size);
- int64_t i = 1;
- int64_t max = calc_max_size(block_size, 1, inode_direct_block_count);
- for(i = 2; ; i++){
- }
- printf("%lld %lld\n", block_num_size, max_size);
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement