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: