diff --git a/src/policy_pfrd.cpp b/src/policy_pfrd.cpp index 09c625cc..e35a9b0c 100644 --- a/src/policy_pfrd.cpp +++ b/src/policy_pfrd.cpp @@ -31,6 +31,11 @@ using std::vector; namespace pfrd { + struct branch_info { + uint64_t spaceavail; + const string *basepath; + }; + uint64_t get_int64_rand(uint64_t const& min, uint64_t const& max) { return (((uint64_t)(unsigned int)rand() << 32) + (uint64_t)(unsigned int)rand()) % (max - min) + min; @@ -51,10 +56,9 @@ namespace pfrd fs::info_t info; const Branch *branch; const string *pfrdbasepath; - uint64_t cache_spaceavail_branches[256]; - bool useable_branches[256]; - const string *cache_basepath_branches[256]; size_t branch_count = branches_.size(); + bool useable_branches[branch_count]; + branch_info branches_cache[branch_count]; error = ENOENT; pfrdbasepath = NULL; @@ -73,9 +77,9 @@ namespace pfrd if(info.spaceavail < minfreespace_) error_and_continue(error,ENOSPC); - cache_spaceavail_branches[i] = info.spaceavail; useable_branches[i] = true; - cache_basepath_branches[i] = &branch->path; + branches_cache[i].spaceavail = info.spaceavail; + branches_cache[i].basepath = &branch->path; sum += info.spaceavail; } @@ -87,10 +91,10 @@ namespace pfrd if (!useable_branches[i]) continue; - index += cache_spaceavail_branches[i]; + index += branches_cache[i].spaceavail; if(index > byte_index) { - pfrdbasepath = cache_basepath_branches[i]; + pfrdbasepath = branches_cache[i].basepath; break; } }