block_id_counter FileManagerPosix::getMaxUsedBlockCounter(const block_id_domain block_domain) const { const string block_domain_str(ToZeroPaddedString(block_domain, kBlockIdDomainLengthInDigits)); string glob_pattern(storage_path_); glob_pattern.append("qsblk_"); glob_pattern.append(block_domain_str); glob_pattern.append("_*.qsb"); glob_t glob_result; glob(glob_pattern.c_str(), 0, nullptr, &glob_result); string filename_pattern(storage_path_); filename_pattern.append("qsblk_"); filename_pattern.append(block_domain_str); filename_pattern.append("_%"); filename_pattern.append(SCNu64); filename_pattern.append(".qsb"); block_id_counter counter_max = 0, counter; if (glob_result.gl_pathc > 0 && sscanf(glob_result.gl_pathv[glob_result.gl_pathc - 1], filename_pattern.c_str(), &counter) == 1 && counter > counter_max) { counter_max = counter; } globfree(&glob_result); return counter_max; }
block_id_counter FileManagerWindows::getMaxUsedBlockCounter(const block_id_domain block_domain) const { const string block_domain_str(ToZeroPaddedString(block_domain, kBlockIdDomainLengthInDigits)); string glob_pattern(storage_path_); glob_pattern.append("qsblk_"); glob_pattern.append(block_domain_str); glob_pattern.append("_*.qsb"); WIN32_FIND_DATA find_data; HANDLE find_handle = INVALID_HANDLE_VALUE; DWORD error_code = 0; find_handle = FindFirstFile(glob_pattern.c_str(), &find_data); if (find_handle == INVALID_HANDLE_VALUE) { error_code = GetLastError(); if (error_code != ERROR_FILE_NOT_FOUND) { LOG(ERROR) << "Failed to retrieve blockfiles with error_code: " << error_code; } return 0; } string filename_pattern("qsblk_"); filename_pattern.append(block_domain_str); filename_pattern.append("_%"); filename_pattern.append(SCNu64); filename_pattern.append(".qsb"); block_id_counter counter_max = 0, counter; do { if (sscanf(find_data.cFileName, filename_pattern.c_str(), &counter) == 1 && counter > counter_max) { counter_max = counter; } } while (FindNextFile(find_handle, &find_data) != 0); error_code = GetLastError(); if (error_code != ERROR_NO_MORE_FILES) { LOG(ERROR) << "Failed to FindNextFile with error_code: " << error_code; } if (FindClose(find_handle) == 0) { LOG(ERROR) << "Failed to close the file with error_code: " << GetLastError(); } return counter_max; }