forked from enlightenment/efl
eina_cpu: Fix coverity defects in eina_cpu_map_init
Fixes a potential fd leak on failure and wrong core to speed mapping on systems with > 31 cpu cores CID: 1362860 CID: 1362859 CID: 1362857
This commit is contained in:
parent
b324b754f3
commit
9799d45ee7
|
@ -323,6 +323,7 @@ eina_cpu_map_init(void)
|
|||
fastest_core_speed = -1;
|
||||
|
||||
#if defined (__linux__) || defined(__GLIBC__)
|
||||
FILE *f = NULL;
|
||||
Eina_Iterator *it;
|
||||
Eina_Strbuf *fname;
|
||||
const Eina_File_Direct_Info *f_info;
|
||||
|
@ -339,7 +340,6 @@ eina_cpu_map_init(void)
|
|||
eina_str_has_prefix(f_info->path,
|
||||
"/sys/devices/system/cpu/cpufreq/policy"))
|
||||
{
|
||||
FILE *f;
|
||||
int num, speed;
|
||||
|
||||
eina_strbuf_append_printf(fname, "%s%s", f_info->path, "/cpuinfo_max_freq");
|
||||
|
@ -349,6 +349,7 @@ eina_cpu_map_init(void)
|
|||
speed = -1;
|
||||
num = fscanf(f, "%d", &speed);
|
||||
fclose(f);
|
||||
f = NULL;
|
||||
if ((num != 1) || (speed == -1)) goto err;
|
||||
|
||||
slowest_core_speed = MIN(speed, slowest_core_speed);
|
||||
|
@ -370,15 +371,17 @@ eina_cpu_map_init(void)
|
|||
{
|
||||
corelist = malloc(sizeof(*corelist));
|
||||
if (!corelist) goto err;
|
||||
*corelist = 1 << core;
|
||||
*corelist = 1LL << core;
|
||||
eina_hash_add(cpu_hash, &speed, corelist);
|
||||
}
|
||||
*corelist |= 1 << core;
|
||||
*corelist |= 1LL << core;
|
||||
} while (num != EOF);
|
||||
fclose(f);
|
||||
f = NULL;
|
||||
}
|
||||
}
|
||||
err:
|
||||
if (f) fclose(f);
|
||||
eina_strbuf_free(fname);
|
||||
eina_iterator_free(it);
|
||||
#endif
|
||||
|
|
Loading…
Reference in New Issue