ASoC: core: Use kasprintf instead of opencoding it
authorLars-Peter Clausen <lars@metafoo.de>
Tue, 14 May 2013 09:05:32 +0000 (11:05 +0200)
committerMark Brown <broonie@opensource.wolfsonmicro.com>
Tue, 14 May 2013 12:52:52 +0000 (16:52 +0400)
kasprintf calculates the size of the result string, allocates a buffer large
enough to hold the string and then performs the format string operation. There
are a couple of places in ASoC where these three steps are done by hand and
where kasprintf can be used instead.

Signed-off-by: Lars-Peter Clausen <lars@metafoo.de>
Acked-by: Liam Girdwood <liam.r.girdwood@linux.intel.com>
Signed-off-by: Mark Brown <broonie@opensource.wolfsonmicro.com>
sound/soc/soc-core.c
sound/soc/soc-dapm.c

index 9d95ef5..4489c5b 100644 (file)
@@ -2237,7 +2237,6 @@ struct snd_kcontrol *snd_soc_cnew(const struct snd_kcontrol_new *_template,
        struct snd_kcontrol_new template;
        struct snd_kcontrol *kcontrol;
        char *name = NULL;
-       int name_len;
 
        memcpy(&template, _template, sizeof(template));
        template.index = 0;
@@ -2246,13 +2245,10 @@ struct snd_kcontrol *snd_soc_cnew(const struct snd_kcontrol_new *_template,
                long_name = template.name;
 
        if (prefix) {
-               name_len = strlen(long_name) + strlen(prefix) + 2;
-               name = kmalloc(name_len, GFP_KERNEL);
+               name = kasprintf(GFP_KERNEL, "%s %s", prefix, long_name);
                if (!name)
                        return NULL;
 
-               snprintf(name, name_len, "%s %s", prefix, long_name);
-
                template.name = name;
        } else {
                template.name = long_name;
index e4e5420..071579b 100644 (file)
@@ -521,7 +521,6 @@ static int dapm_create_or_share_mixmux_kcontrol(struct snd_soc_dapm_widget *w,
        int wlistentries;
        size_t wlistsize;
        bool wname_in_long_name, kcname_in_long_name;
-       size_t name_len;
        char *long_name;
        const char *name;
        int ret;
@@ -586,25 +585,19 @@ static int dapm_create_or_share_mixmux_kcontrol(struct snd_soc_dapm_widget *w,
                }
 
                if (wname_in_long_name && kcname_in_long_name) {
-                       name_len = strlen(w->name) - prefix_len + 1 +
-                                  strlen(w->kcontrol_news[kci].name) + 1;
-
-                       long_name = kmalloc(name_len, GFP_KERNEL);
-                       if (long_name == NULL) {
-                               kfree(wlist);
-                               return -ENOMEM;
-                       }
-
                        /*
                         * The control will get a prefix from the control
                         * creation process but we're also using the same
                         * prefix for widgets so cut the prefix off the
                         * front of the widget name.
                         */
-                       snprintf(long_name, name_len, "%s %s",
+                       long_name = kasprintf(GFP_KERNEL, "%s %s",
                                 w->name + prefix_len,
                                 w->kcontrol_news[kci].name);
-                       long_name[name_len - 1] = '\0';
+                       if (long_name == NULL) {
+                               kfree(wlist);
+                               return -ENOMEM;
+                       }
 
                        name = long_name;
                } else if (wname_in_long_name) {
@@ -3077,7 +3070,6 @@ snd_soc_dapm_new_control(struct snd_soc_dapm_context *dapm,
                         const struct snd_soc_dapm_widget *widget)
 {
        struct snd_soc_dapm_widget *w;
-       size_t name_len;
        int ret;
 
        if ((w = dapm_cnew_widget(widget)) == NULL)
@@ -3118,19 +3110,16 @@ snd_soc_dapm_new_control(struct snd_soc_dapm_context *dapm,
                break;
        }
 
-       name_len = strlen(widget->name) + 1;
        if (dapm->codec && dapm->codec->name_prefix)
-               name_len += 1 + strlen(dapm->codec->name_prefix);
-       w->name = kmalloc(name_len, GFP_KERNEL);
+               w->name = kasprintf(GFP_KERNEL, "%s %s",
+                       dapm->codec->name_prefix, widget->name);
+       else
+               w->name = kasprintf(GFP_KERNEL, "%s", widget->name);
+
        if (w->name == NULL) {
                kfree(w);
                return NULL;
        }
-       if (dapm->codec && dapm->codec->name_prefix)
-               snprintf((char *)w->name, name_len, "%s %s",
-                       dapm->codec->name_prefix, widget->name);
-       else
-               snprintf((char *)w->name, name_len, "%s", widget->name);
 
        switch (w->id) {
        case snd_soc_dapm_switch: