diff --git a/libcpuid/cpuid_main.c b/libcpuid/cpuid_main.c index 90fe2b0..0acc74e 100644 --- a/libcpuid/cpuid_main.c +++ b/libcpuid/cpuid_main.c @@ -1287,7 +1287,7 @@ int cpuid_get_raw_data_core(struct cpu_raw_data_t* data, logical_cpu_t logical_c if (logical_cpu != (logical_cpu_t) -1) { debugf(2, "Getting raw dump for logical CPU %u\n", logical_cpu); if (!set_cpu_affinity(logical_cpu)) - return ERR_INVCNB; + return cpuid_set_error(ERR_INVCNB); affinity_saved = save_cpu_affinity(); } @@ -1414,8 +1414,7 @@ int cpuid_get_raw_data_core(struct cpu_raw_data_t* data, logical_cpu_t logical_c int cpuid_get_all_raw_data(struct cpu_raw_data_array_t* data) { - int cur_error = cpuid_set_error(ERR_OK); - int ret_error = cpuid_set_error(ERR_OK); + int r = ERR_OK; logical_cpu_t logical_cpu = 0; struct cpu_raw_data_t raw_tmp; @@ -1425,17 +1424,17 @@ int cpuid_get_all_raw_data(struct cpu_raw_data_array_t* data) cpu_raw_data_array_t_constructor(data, true); do { memset(&raw_tmp, 0, sizeof(struct cpu_raw_data_t)); - cur_error = cpuid_get_raw_data_core(&raw_tmp, logical_cpu); - if (cur_error == ERR_INVCNB) + if ((r = cpuid_get_raw_data_core(&raw_tmp, logical_cpu)) != ERR_OK) break; cpuid_grow_raw_data_array(data, logical_cpu + 1); memcpy(&data->raw[logical_cpu], &raw_tmp, sizeof(struct cpu_raw_data_t)); - if (ret_error == ERR_OK) - ret_error = cur_error; logical_cpu++; - } while (cur_error == ERR_OK); + } while (r == ERR_OK); - return ret_error; + /* On ERR_INVCNB, it means that logical_cpu value is out of bounds and we must break the loop, but it is a normal behavior. */ + if (r == ERR_INVCNB) + r = ERR_OK; + return cpuid_set_error(r); } int cpuid_serialize_raw_data(struct cpu_raw_data_t* data, const char* filename)