1
0
Fork 0
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:
The Tumultuous Unicorn Of Darkness 2024-07-26 11:57:11 +02:00
parent dec92af12f
commit 505c8b5fe6
No known key found for this signature in database
GPG key ID: 1E55EE2EFF18BC1A

View file

@ -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)