mirror of
https://github.com/anrieff/libcpuid
synced 2025-02-12 20:24:05 +00:00
Improve errors handling in cpuid_get_all_raw_data() and cpuid_get_raw_data_core()
Close #202
This commit is contained in:
parent
dec92af12f
commit
505c8b5fe6
1 changed files with 8 additions and 9 deletions
|
@ -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) {
|
if (logical_cpu != (logical_cpu_t) -1) {
|
||||||
debugf(2, "Getting raw dump for logical CPU %u\n", logical_cpu);
|
debugf(2, "Getting raw dump for logical CPU %u\n", logical_cpu);
|
||||||
if (!set_cpu_affinity(logical_cpu))
|
if (!set_cpu_affinity(logical_cpu))
|
||||||
return ERR_INVCNB;
|
return cpuid_set_error(ERR_INVCNB);
|
||||||
affinity_saved = save_cpu_affinity();
|
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 cpuid_get_all_raw_data(struct cpu_raw_data_array_t* data)
|
||||||
{
|
{
|
||||||
int cur_error = cpuid_set_error(ERR_OK);
|
int r = ERR_OK;
|
||||||
int ret_error = cpuid_set_error(ERR_OK);
|
|
||||||
logical_cpu_t logical_cpu = 0;
|
logical_cpu_t logical_cpu = 0;
|
||||||
struct cpu_raw_data_t raw_tmp;
|
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);
|
cpu_raw_data_array_t_constructor(data, true);
|
||||||
do {
|
do {
|
||||||
memset(&raw_tmp, 0, sizeof(struct cpu_raw_data_t));
|
memset(&raw_tmp, 0, sizeof(struct cpu_raw_data_t));
|
||||||
cur_error = cpuid_get_raw_data_core(&raw_tmp, logical_cpu);
|
if ((r = cpuid_get_raw_data_core(&raw_tmp, logical_cpu)) != ERR_OK)
|
||||||
if (cur_error == ERR_INVCNB)
|
|
||||||
break;
|
break;
|
||||||
cpuid_grow_raw_data_array(data, logical_cpu + 1);
|
cpuid_grow_raw_data_array(data, logical_cpu + 1);
|
||||||
memcpy(&data->raw[logical_cpu], &raw_tmp, sizeof(struct cpu_raw_data_t));
|
memcpy(&data->raw[logical_cpu], &raw_tmp, sizeof(struct cpu_raw_data_t));
|
||||||
if (ret_error == ERR_OK)
|
|
||||||
ret_error = cur_error;
|
|
||||||
logical_cpu++;
|
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)
|
int cpuid_serialize_raw_data(struct cpu_raw_data_t* data, const char* filename)
|
||||||
|
|
Loading…
Add table
Reference in a new issue