]> git.alsa-project.org Git - alsa-lib.git/commitdiff
control: add __snd_ctl_add_elem_set() helper
authorJaroslav Kysela <perex@perex.cz>
Thu, 25 Mar 2021 19:27:44 +0000 (20:27 +0100)
committerJaroslav Kysela <perex@perex.cz>
Thu, 25 Mar 2021 19:36:39 +0000 (20:36 +0100)
It simplifies the add_elem_set functions and we need it for UCM.
It's an internal function.

Signed-off-by: Jaroslav Kysela <perex@perex.cz>
src/control/control.c
src/control/control_local.h

index a3a32a17f67b66b05b323c532aadc0e54a94669e..17d1baa0afb3ecd5073fc9b498b1a52fcfcbab61 100644 (file)
@@ -436,6 +436,25 @@ static inline int set_user_access(snd_ctl_elem_info_t *info)
        return 0;
 }
 
+int __snd_ctl_add_elem_set(snd_ctl_t *ctl, snd_ctl_elem_info_t *info,
+                          unsigned int element_count,
+                          unsigned int member_count)
+{
+       if (ctl == NULL || info->id.name[0] == '\0')
+               return -EINVAL;
+
+       if (set_user_access(info))
+               return -EINVAL;
+
+       info->owner = element_count;
+       info->count = member_count;
+
+       if (!validate_element_member_dimension(info))
+               return -EINVAL;
+
+       return ctl->ops->element_add(ctl, info);
+}
+
 /**
  * \brief Create and add some user-defined control elements of integer type.
  * \param ctl A handle of backend module for control interface.
@@ -489,23 +508,15 @@ int snd_ctl_add_integer_elem_set(snd_ctl_t *ctl, snd_ctl_elem_info_t *info,
        unsigned int numid;
        int err;
 
-       if (ctl == NULL || info == NULL || info->id.name[0] == '\0')
-               return -EINVAL;
-
-       if (set_user_access(info))
+       if (info == NULL)
                return -EINVAL;
 
        info->type = SND_CTL_ELEM_TYPE_INTEGER;
-       info->owner = element_count;
-       info->count = member_count;
        info->value.integer.min = min;
        info->value.integer.max = max;
        info->value.integer.step = step;
 
-       if (!validate_element_member_dimension(info))
-               return -EINVAL;
-
-       err = ctl->ops->element_add(ctl, info);
+       err = __snd_ctl_add_elem_set(ctl, info, element_count, member_count);
        if (err < 0)
                return err;
        numid = snd_ctl_elem_id_get_numid(&info->id);
@@ -579,23 +590,15 @@ int snd_ctl_add_integer64_elem_set(snd_ctl_t *ctl, snd_ctl_elem_info_t *info,
        unsigned int numid;
        int err;
 
-       if (ctl == NULL || info == NULL || info->id.name[0] == '\0')
-               return -EINVAL;
-
-       if (set_user_access(info))
+       if (info == NULL)
                return -EINVAL;
 
        info->type = SND_CTL_ELEM_TYPE_INTEGER64;
-       info->owner = element_count;
-       info->count = member_count;
        info->value.integer64.min = min;
        info->value.integer64.max = max;
        info->value.integer64.step = step;
 
-       if (!validate_element_member_dimension(info))
-               return -EINVAL;
-
-       err = ctl->ops->element_add(ctl, info);
+       err = __snd_ctl_add_elem_set(ctl, info, element_count, member_count);
        if (err < 0)
                return err;
        numid = snd_ctl_elem_id_get_numid(&info->id);
@@ -658,22 +661,14 @@ int snd_ctl_add_boolean_elem_set(snd_ctl_t *ctl, snd_ctl_elem_info_t *info,
                                 unsigned int element_count,
                                 unsigned int member_count)
 {
-       if (ctl == NULL || info == NULL || info->id.name[0] == '\0')
-               return -EINVAL;
-
-       if (set_user_access(info))
+       if (info == NULL)
                return -EINVAL;
 
        info->type = SND_CTL_ELEM_TYPE_BOOLEAN;
-       info->owner = element_count;
-       info->count = member_count;
        info->value.integer.min = 0;
        info->value.integer.max = 1;
 
-       if (!validate_element_member_dimension(info))
-               return -EINVAL;
-
-       return ctl->ops->element_add(ctl, info);
+       return __snd_ctl_add_elem_set(ctl, info, element_count, member_count);
 }
 
 /**
@@ -729,11 +724,7 @@ int snd_ctl_add_enumerated_elem_set(snd_ctl_t *ctl, snd_ctl_elem_info_t *info,
        char *buf, *p;
        int err;
 
-       if (ctl == NULL || info == NULL || info->id.name[0] == '\0' ||
-           labels == NULL)
-               return -EINVAL;
-
-       if (set_user_access(info))
+       if (info == NULL || labels == NULL)
                return -EINVAL;
 
        info->type = SND_CTL_ELEM_TYPE_ENUMERATED;
@@ -757,10 +748,7 @@ int snd_ctl_add_enumerated_elem_set(snd_ctl_t *ctl, snd_ctl_elem_info_t *info,
                p += strlen(labels[i]) + 1;
        }
 
-       if (!validate_element_member_dimension(info))
-               return -EINVAL;
-
-       err = ctl->ops->element_add(ctl, info);
+       err = __snd_ctl_add_elem_set(ctl, info, element_count, member_count);
 
        free(buf);
 
@@ -810,20 +798,12 @@ int snd_ctl_add_bytes_elem_set(snd_ctl_t *ctl, snd_ctl_elem_info_t *info,
                               unsigned int element_count,
                               unsigned int member_count)
 {
-       if (ctl == NULL || info == NULL || info->id.name[0] == '\0')
-               return -EINVAL;
-
-       if (set_user_access(info))
+       if (info == NULL)
                return -EINVAL;
 
        info->type = SND_CTL_ELEM_TYPE_BYTES;
-       info->owner = element_count;
-       info->count = member_count;
 
-       if (!validate_element_member_dimension(info))
-               return -EINVAL;
-
-       return ctl->ops->element_add(ctl, info);
+       return __snd_ctl_add_elem_set(ctl, info, element_count, member_count);
 }
 
 /**
index 9568968efc30260dc46cd581c3cc0afcd3f0a7e9..4afcfd297ab7cfa3fe1d1bea305bd7e5c41bcd64 100644 (file)
@@ -106,3 +106,7 @@ int snd_ctl_async(snd_ctl_t *ctl, int sig, pid_t pid);
 int INTERNAL(snd_ctl_elem_info_get_dimensions)(const snd_ctl_elem_info_t *obj);
 int INTERNAL(snd_ctl_elem_info_get_dimension)(const snd_ctl_elem_info_t *obj, unsigned int idx);
 #endif /* INTERNAL */
+
+int __snd_ctl_add_elem_set(snd_ctl_t *ctl, snd_ctl_elem_info_t *info,
+                          unsigned int element_count,
+                          unsigned int member_count);