for (i = 0; i < ar->num_mixer_paths; i++) {
free(ar->mixer_path[i].name);
if (ar->mixer_path[i].setting) {
- free(ar->mixer_path[i].setting->value.ptr);
+ size_t j;
+ for (j = 0; j < ar->mixer_path[i].length; j++) {
+ free(ar->mixer_path[i].setting[j].value.ptr);
+ }
free(ar->mixer_path[i].setting);
+ ar->mixer_path[i].size = 0;
+ ar->mixer_path[i].length = 0;
+ ar->mixer_path[i].setting = NULL;
}
}
free(ar->mixer_path);
if (state->level == 1) {
/* top level path: create and stash the path */
state->path = path_create(ar, (char *)attr_name);
+ if (state->path == NULL)
+ ALOGE("path created failed, please check the path if existed");
} else {
/* nested path */
struct mixer_path *sub_path = path_get_by_name(ar, attr_name);
if (!sub_path) {
ALOGE("unable to find sub path '%s'", attr_name);
- } else {
+ } else if (state->path != NULL) {
path_add_path(ar, state->path, sub_path);
}
}
mixer_value.index = atoi((char *)attr_id);
else
mixer_value.index = -1;
- path_add_value(ar, state->path, &mixer_value);
+ if (state->path != NULL)
+ path_add_value(ar, state->path, &mixer_value);
}
}
static int audio_route_update_path(struct audio_route *ar, const char *name, bool reverse)
{
struct mixer_path *path;
- int32_t i, end;
unsigned int j;
if (!ar) {
return -1;
}
- i = reverse ? (path->length - 1) : 0;
- end = reverse ? -1 : (int32_t)path->length;
- while (i != end) {
+ for (size_t i = 0; i < path->length; ++i) {
unsigned int ctl_index;
enum mixer_ctl_type type;
- ctl_index = path->setting[i].ctl_index;
+ ctl_index = path->setting[reverse ? path->length - 1 - i : i].ctl_index;
struct mixer_state * ms = &ar->mixer_state[ctl_index];
break;
}
}
-
- i = reverse ? (i - 1) : (i + 1);
}
return 0;
}