e mod: cpufreq - handle the case where cpu has zero freqs - dont crash

it can be that if you remove setuid bits on cpufreq binary we can end
up with zero freqs on bsd. this causes a crash.

@fix
This commit is contained in:
Carsten Haitzler 2016-03-24 12:17:35 +09:00
parent 3cdc11a107
commit 1b73bedd4d
1 changed files with 21 additions and 15 deletions

View File

@ -1040,22 +1040,28 @@ _cpufreq_face_update_available(Instance *inst)
int i; int i;
unsigned int count; unsigned int count;
count = eina_list_count(cpufreq_config->status->frequencies); if (cpufreq_config->status->frequencies)
frequency_msg = malloc(sizeof(Edje_Message_Int_Set) + (count - 1) * sizeof(int)); {
EINA_SAFETY_ON_NULL_RETURN(frequency_msg); count = eina_list_count(cpufreq_config->status->frequencies);
frequency_msg->count = count; frequency_msg = malloc(sizeof(Edje_Message_Int_Set) + (count - 1) * sizeof(int));
for (l = cpufreq_config->status->frequencies, i = 0; l; l = l->next, i++) EINA_SAFETY_ON_NULL_RETURN(frequency_msg);
frequency_msg->val[i] = (long)l->data; frequency_msg->count = count;
edje_object_message_send(inst->o_cpu, EDJE_MESSAGE_INT_SET, 1, frequency_msg); for (l = cpufreq_config->status->frequencies, i = 0; l; l = l->next, i++)
free(frequency_msg); frequency_msg->val[i] = (long)l->data;
edje_object_message_send(inst->o_cpu, EDJE_MESSAGE_INT_SET, 1, frequency_msg);
free(frequency_msg);
}
count = eina_list_count(cpufreq_config->status->governors); if (cpufreq_config->status->governors)
governor_msg = malloc(sizeof(Edje_Message_String_Set) + (count - 1) * sizeof(char *)); {
governor_msg->count = count; count = eina_list_count(cpufreq_config->status->governors);
for (l = cpufreq_config->status->governors, i = 0; l; l = l->next, i++) governor_msg = malloc(sizeof(Edje_Message_String_Set) + (count - 1) * sizeof(char *));
governor_msg->str[i] = (char *)l->data; governor_msg->count = count;
edje_object_message_send(inst->o_cpu, EDJE_MESSAGE_STRING_SET, 2, governor_msg); for (l = cpufreq_config->status->governors, i = 0; l; l = l->next, i++)
free(governor_msg); governor_msg->str[i] = (char *)l->data;
edje_object_message_send(inst->o_cpu, EDJE_MESSAGE_STRING_SET, 2, governor_msg);
free(governor_msg);
}
} }
static void static void