Snap for 6353621 from 09839223b2869e07cc0f8ecdb32d511b36d210c5 to r-keystone-qcom-release
Change-Id: I44001b901ba8b3f7d194d9e0e906b96202494375
diff --git a/mixer.c b/mixer.c
index da043ac..f26f43f 100644
--- a/mixer.c
+++ b/mixer.c
@@ -390,12 +390,11 @@
{
struct mixer_ctl_group *grp;
unsigned int n;
- int hw_ctl_count;
+ int hw_ctl_count = mixer_grp_get_count(mixer->hw_grp);
if (!mixer)
return NULL;
- hw_ctl_count = mixer_grp_get_count(mixer->hw_grp);
if (mixer->hw_grp) {
grp = mixer->hw_grp;
@@ -512,14 +511,13 @@
int mixer_ctl_get_value(struct mixer_ctl *ctl, unsigned int id)
{
- struct mixer_ctl_group *grp;
+ struct mixer_ctl_group *grp = ctl->grp;
struct snd_ctl_elem_value ev;
int ret;
if (!ctl || (id >= ctl->info->count))
return -EINVAL;
- grp = ctl->grp;
memset(&ev, 0, sizeof(ev));
ev.id.numid = ctl->info->id.numid;
ret = grp->ops->ioctl(grp->data, SNDRV_CTL_IOCTL_ELEM_READ, &ev);
@@ -553,7 +551,7 @@
int mixer_ctl_get_array(struct mixer_ctl *ctl, void *array, size_t count)
{
- struct mixer_ctl_group *grp;
+ struct mixer_ctl_group *grp = ctl->grp;
struct snd_ctl_elem_value ev;
int ret = 0;
size_t size;
@@ -563,7 +561,6 @@
if ((!ctl) || !count || !array)
return -EINVAL;
- grp = ctl->grp;
total_count = ctl->info->count;
if ((ctl->info->type == SNDRV_CTL_ELEM_TYPE_BYTES) &&
@@ -634,14 +631,14 @@
int mixer_ctl_set_value(struct mixer_ctl *ctl, unsigned int id, int value)
{
- struct mixer_ctl_group *grp;
+ struct mixer_ctl_group *grp = ctl->grp;
+
struct snd_ctl_elem_value ev;
int ret;
if (!ctl || (id >= ctl->info->count))
return -EINVAL;
- grp = ctl->grp;
memset(&ev, 0, sizeof(ev));
ev.id.numid = ctl->info->id.numid;
ret = grp->ops->ioctl(grp->data, SNDRV_CTL_IOCTL_ELEM_READ, &ev);
@@ -674,7 +671,7 @@
int mixer_ctl_set_array(struct mixer_ctl *ctl, const void *array, size_t count)
{
- struct mixer_ctl_group *grp;
+ struct mixer_ctl_group *grp = ctl->grp;
struct snd_ctl_elem_value ev;
size_t size;
void *dest;
@@ -683,7 +680,6 @@
if ((!ctl) || !count || !array)
return -EINVAL;
- grp = ctl->grp;
total_count = ctl->info->count;
if ((ctl->info->type == SNDRV_CTL_ELEM_TYPE_BYTES) &&
@@ -779,7 +775,7 @@
int mixer_ctl_set_enum_by_string(struct mixer_ctl *ctl, const char *string)
{
- struct mixer_ctl_group *grp;
+ struct mixer_ctl_group *grp = ctl->grp;
unsigned int i, num_enums;
struct snd_ctl_elem_value ev;
int ret;
@@ -787,7 +783,6 @@
if (!ctl || (ctl->info->type != SNDRV_CTL_ELEM_TYPE_ENUMERATED))
return -EINVAL;
- grp = ctl->grp;
num_enums = ctl->info->value.enumerated.items;
for (i = 0; i < num_enums; i++) {
if (!strcmp(string, ctl->ename[i])) {
diff --git a/mixer_plugin.c b/mixer_plugin.c
index 70c12a3..b3f1ccf 100644
--- a/mixer_plugin.c
+++ b/mixer_plugin.c
@@ -1,6 +1,6 @@
/* mixer_plugin.c
**
-** Copyright (c) 2019-2020, The Linux Foundation. All rights reserved.
+** Copyright (c) 2019, The Linux Foundation. All rights reserved.
**
** Redistribution and use in source and binary forms, with or without
** modification, are permitted provided that the following conditions are
@@ -40,6 +40,7 @@
#include <ctype.h>
#include <poll.h>
#include <dlfcn.h>
+#include <string.h>
#include <sys/eventfd.h>
#include <sys/ioctl.h>
@@ -323,11 +324,11 @@
/*TODO: Fill card_info here from snd-card-def */
memset(card_info, 0, sizeof(*card_info));
card_info->card = plug_data->card;
- memcpy(card_info->id, "card_id", strlen("card_id") + 1);
- memcpy(card_info->driver, "mymixer-so-name", strlen("mymixer-so-name") + 1);
- memcpy(card_info->name, "card-name", strlen("card-name") + 1);
- memcpy(card_info->longname, "card-name", strlen("card-name") + 1);
- memcpy(card_info->mixername, "mixer-name", strlen("mixer-name") + 1);
+ memcpy(card_info->id, "card_id", sizeof(card_info->id));
+ memcpy(card_info->driver, "mymixer-so-name", sizeof(card_info->driver));
+ memcpy(card_info->name, "card-name", sizeof(card_info->name));
+ memcpy(card_info->longname, "card-name", sizeof(card_info->longname));
+ memcpy(card_info->mixername, "mixer-name", sizeof(card_info->mixername));
printf("%s: card = %d\n", __func__, plug_data->card);
@@ -407,9 +408,10 @@
{
struct mixer_plug_data *plug_data;
struct mixer_plugin *plugin = NULL;
+ const char *err = NULL;
void *dl_hdl;
char *name, *so_name;
- char *open_fn_name, token[80], *token_saveptr;
+ char *open_fn_name, token[80];
int ret;
plug_data = calloc(1, sizeof(*plug_data));
@@ -422,7 +424,7 @@
/* Do not print error here.
* It is valid for card to not have virtual mixer node
*/
- goto err_free_plug_data;
+ goto err_get_mixer_node;
}
ret = snd_utils_get_str(plug_data->mixer_node, "so-name",
@@ -430,7 +432,7 @@
if(ret) {
fprintf(stderr, "%s: mixer so-name not found for card %u\n",
__func__, card);
- goto err_put_dev_node;
+ goto err_get_mixer_node;
}
@@ -438,21 +440,16 @@
if (!dl_hdl) {
fprintf(stderr, "%s: unable to open %s\n",
__func__, so_name);
- goto err_put_dev_node;
+ goto err_get_mixer_node;
}
sscanf(so_name, "lib%s", token);
- token_saveptr = token;
- name = strtok_r(token, ".", &token_saveptr);
- if (!name) {
- fprintf(stderr, "%s: invalid library name\n", __func__);
- goto err_dl_hdl;
- }
+ name = strtok(token, ".");
open_fn_name = calloc(1, strlen(name) + strlen("_open") + 1);
if (!open_fn_name) {
ret = -ENOMEM;
- goto err_dl_hdl;
+ goto err_get_mixer_node;
}
strncpy(open_fn_name, name, strlen(name) + 1);
@@ -460,17 +457,18 @@
printf("%s - %s\n", __func__, open_fn_name);
+ dlerror();
plug_data->mixer_plugin_open_fn = dlsym(dl_hdl, open_fn_name);
- if (!plug_data->mixer_plugin_open_fn) {
+ if (err) {
fprintf(stderr, "%s: dlsym open fn failed: %s\n",
- __func__, dlerror());
- goto err_open_fn_name;
+ __func__, err);
+ goto err_get_name;
}
ret = plug_data->mixer_plugin_open_fn(&plugin, card);
if (ret) {
fprintf(stderr, "%s: failed to open plugin, err: %d\n",
__func__, ret);
- goto err_open_fn_name;
+ goto err_get_name;
}
plug_data->plugin = plugin;
@@ -483,19 +481,13 @@
printf("%s: card = %d\n", __func__, plug_data->card);
- free(open_fn_name);
return 0;
-err_open_fn_name:
- free(open_fn_name);
-
-err_dl_hdl:
+err_get_name:
+ snd_utils_put_dev_node(plug_data->mixer_node);
dlclose(dl_hdl);
-err_put_dev_node:
- snd_utils_put_dev_node(plug_data->mixer_node);
-
-err_free_plug_data:
+err_get_mixer_node:
free(plug_data);
return -1;
diff --git a/pcm_plugin.c b/pcm_plugin.c
index 3e74b73..8ffe6ae 100644
--- a/pcm_plugin.c
+++ b/pcm_plugin.c
@@ -1,6 +1,6 @@
/* pcm_plugin.c
**
-** Copyright (c) 2019-2020, The Linux Foundation. All rights reserved.
+** Copyright (c) 2019, The Linux Foundation. All rights reserved.
**
** Redistribution and use in source and binary forms, with or without
** modification, are permitted provided that the following conditions are
@@ -652,9 +652,10 @@
unsigned int flags, void **data, void *pcm_node)
{
struct pcm_plug_data *plug_data;
+ const char *err = NULL;
void *dl_hdl;
int rc = 0;
- char *so_name, token[80], *name, *open_fn, *token_saveptr;
+ char *so_name, token[80], *name, *open_fn;
plug_data = calloc(1, sizeof(*plug_data));
if (!plug_data) {
@@ -678,12 +679,8 @@
dlerror();
sscanf(so_name, "lib%s", token);
- token_saveptr = token;
- name = strtok_r(token, ".", &token_saveptr);
- if (!name) {
- fprintf(stderr, "%s: invalid library name\n", __func__);
- goto err_open_fn;
- }
+ name = strtok(token, ".");
+
open_fn = calloc(1, strlen(name) + strlen("_open") + 1);
if (!open_fn) {
rc = -ENOMEM;
@@ -695,9 +692,11 @@
printf("%s - %s\n", __func__, open_fn);
plug_data->plugin_open_fn = dlsym(dl_hdl, open_fn);
- if (!plug_data->plugin_open_fn) {
+ err = dlerror();
+
+ if (err) {
fprintf(stderr, "%s: dlsym to open fn failed, err = '%s'\n",
- __func__, dlerror());
+ __func__, err);
goto err_dlsym;
}
@@ -721,7 +720,6 @@
plug_data->plugin->state = PCM_PLUG_STATE_OPEN;
- free(open_fn);
return 0;
err_dlsym: