]> git.alsa-project.org Git - alsa-lib.git/commitdiff
Added snd_config_imake_* functions.
authorJaroslav Kysela <perex@perex.cz>
Sat, 24 Nov 2001 18:29:15 +0000 (18:29 +0000)
committerJaroslav Kysela <perex@perex.cz>
Sat, 24 Nov 2001 18:29:15 +0000 (18:29 +0000)
include/conf.h
src/conf.c
src/confmisc.c
src/pcm/pcm_hooks.c

index 0fc0636b794d1ae7196884efd4908dcfc1af505a..c9e0e72730ffcd23d268397d56a322f13b7d3b94 100644 (file)
@@ -96,6 +96,11 @@ int snd_config_make_string(snd_config_t **config, const char *key);
 int snd_config_make_pointer(snd_config_t **config, const char *key);
 int snd_config_make_compound(snd_config_t **config, const char *key, int join);
 
+int snd_config_imake_integer(snd_config_t **config, const char *key, const long value);
+int snd_config_imake_real(snd_config_t **config, const char *key, const double value);
+int snd_config_imake_string(snd_config_t **config, const char *key, const char *ascii);
+int snd_config_imake_pointer(snd_config_t **config, const char *key, const void *ptr);
+
 snd_config_type_t snd_config_get_type(snd_config_t *config);
 
 int snd_config_set_id(snd_config_t *config, const char *id);
index 794e6ec83358d617c67a8d7ef7fdf308b9335150..1b93cfe497fa4e3ef24c34e933a7b2108d8def65 100644 (file)
@@ -1586,6 +1586,88 @@ int snd_config_make_compound(snd_config_t **config, const char *id,
        return 0;
 }
 
+/**
+ * \brief Build an integer config node and use given initial value
+ * \param config Returned config node handle pointer
+ * \param id Node id
+ * \param value Initial value
+ * \return 0 on success otherwise a negative error code
+ */
+int snd_config_imake_integer(snd_config_t **config, const char *id, const long value)
+{
+       int err;
+       
+       err = snd_config_make(config, id, SND_CONFIG_TYPE_INTEGER);
+       if (err < 0)
+               return err;
+       (*config)->u.integer = value;
+       return 0;
+}
+
+/**
+ * \brief Build a real config node and use given initial value
+ * \param config Returned config node handle pointer
+ * \param id Node id
+ * \param value Initial value
+ * \return 0 on success otherwise a negative error code
+ */
+int snd_config_imake_real(snd_config_t **config, const char *id, const double value)
+{
+       int err;
+       
+       err = snd_config_make(config, id, SND_CONFIG_TYPE_REAL);
+       if (err < 0)
+               return err;
+       (*config)->u.real = value;
+       return 0;
+}
+
+/**
+ * \brief Build a string config node and use given initial value
+ * \param config Returned config node handle pointer
+ * \param id Node id
+ * \param value Initial value
+ * \return 0 on success otherwise a negative error code
+ */
+int snd_config_imake_string(snd_config_t **config, const char *id, const char *value)
+{
+       int err;
+       snd_config_t *tmp;
+       
+       err = snd_config_make(&tmp, id, SND_CONFIG_TYPE_STRING);
+       if (err < 0)
+               return err;
+       if (value) {
+               tmp->u.string = strdup(value);
+               if (!tmp->u.string) {
+                       snd_config_delete(tmp);
+                       return -ENOMEM;
+               }
+       } else {
+               tmp->u.string = NULL;
+       }
+       *config = tmp;
+       return 0;
+}
+
+/**
+ * \brief Build a pointer config node and use given initial value
+ * \param config Returned config node handle pointer
+ * \param id Node id
+ * \param value Initial value
+ * \return 0 on success otherwise a negative error code
+ */
+int snd_config_imake_pointer(snd_config_t **config, const char *id, const void *value)
+{
+       int err;
+       
+       err = snd_config_make(config, id, SND_CONFIG_TYPE_POINTER);
+       if (err < 0)
+               return err;
+       (*config)->u.ptr = value;
+       return 0;
+}
+
 /**
  * \brief Change the value of an integer config node
  * \param config Config node handle
@@ -1629,9 +1711,13 @@ int snd_config_set_string(snd_config_t *config, const char *value)
                return -EINVAL;
        if (config->u.string)
                free(config->u.string);
-       config->u.string = strdup(value);
-       if (!config->u.string)
-               return -ENOMEM;
+       if (value) {
+               config->u.string = strdup(value);
+               if (!config->u.string)
+                       return -ENOMEM;
+       } else {
+               config->u.string = NULL;
+       }
        return 0;
 }
 
@@ -2394,10 +2480,9 @@ int snd_config_hook_load_for_all_cards(snd_config_t *root, snd_config_t *config,
                        err = snd_determine_driver(card, &fdriver);
                        if (err < 0)
                                return err;
-                       err = snd_config_make_string(&private_data, "string");
+                       err = snd_config_imake_string(&private_data, "string", fdriver);
                        if (err < 0)
                                goto __err;
-                       snd_config_set_string(private_data, fdriver);
                        if (snd_config_search(root, fdriver, &n) >= 0) {
                                if (snd_config_get_string(n, &driver) < 0)
                                        continue;
@@ -2763,23 +2848,21 @@ static int _snd_config_expand(snd_config_t *src,
                case SND_CONFIG_TYPE_INTEGER:
                {
                        long v;
-                       err = snd_config_make(dst, id, type);
-                       if (err < 0)
-                               return err;
                        err = snd_config_get_integer(src, &v);
                        assert(err >= 0);
-                       snd_config_set_integer(*dst, v);
+                       err = snd_config_imake_integer(dst, id, v);
+                       if (err < 0)
+                               return err;
                        break;
                }
                case SND_CONFIG_TYPE_REAL:
                {
                        double v;
-                       err = snd_config_make(dst, id, type);
-                       if (err < 0)
-                               return err;
                        err = snd_config_get_real(src, &v);
                        assert(err >= 0);
-                       snd_config_set_real(*dst, v);
+                       err = snd_config_imake_real(dst, id, v);
+                       if (err < 0)
+                               return err;
                        break;
                }
                case SND_CONFIG_TYPE_STRING:
@@ -2801,14 +2884,9 @@ static int _snd_config_expand(snd_config_t *src,
                                        return err;
                                }
                        } else {
-                               err = snd_config_make(dst, id, type);
+                               err = snd_config_imake_string(dst, id, s);
                                if (err < 0)
                                        return err;
-                               err = snd_config_set_string(*dst, s);
-                               if (err < 0) {
-                                       snd_config_delete(*dst);
-                                       return err;
-                               }
                        }
                        break;
                }
index d93fe9c7c7d48c7a6c76fc95459bdbba863a522f..096177682ec9e7aef9e5c1590634ddb2114c6709 100644 (file)
@@ -283,11 +283,8 @@ int snd_func_getenv(snd_config_t **dst, snd_config_t *root, snd_config_t *src,
        if (err >= 0) {
                const char *id;
                err = snd_config_get_id(src, &id);
-               if (err >= 0) {
-                       err = snd_config_make_string(dst, id);
-                       if (err >= 0)
-                               snd_config_set_string(*dst, res);
-               }
+               if (err >= 0)
+                       err = snd_config_imake_string(dst, id, res);
                free(res);
        }
       __error:
@@ -336,10 +333,9 @@ int snd_func_igetenv(snd_config_t **dst, snd_config_t *root, snd_config_t *src,
        err = snd_config_get_id(src, &id);
        if (err < 0)
                return err;
-       err = snd_config_make_integer(dst, id);
+       err = snd_config_imake_integer(dst, id, v);
        if (err < 0)
                return err;
-       snd_config_set_integer(*dst, v);
        return 0;
 }
 #ifndef DOC_HIDDEN
@@ -424,11 +420,8 @@ int snd_func_concat(snd_config_t **dst, snd_config_t *root, snd_config_t *src,
                goto __error;
        }
        err = snd_config_get_id(src, &id);
-       if (err >= 0) {
-               err = snd_config_make_string(dst, id);
-               if (err >= 0)
-                       snd_config_set_string(*dst, res);
-       }
+       if (err >= 0)
+               err = snd_config_imake_string(dst, id, res);
        free(res);
       __error:
        return err;
@@ -461,10 +454,7 @@ int snd_func_datadir(snd_config_t **dst, snd_config_t *root ATTRIBUTE_UNUSED,
        err = snd_config_get_id(src, &id);
        if (err < 0)
                return err;
-       err = snd_config_make_string(dst, id);
-       if (err >= 0)
-               err = snd_config_set_string(*dst, DATADIR "/alsa");
-       return err;
+       return snd_config_imake_string(dst, id, DATADIR "/alsa");
 }
 #ifndef DOC_HIDDEN
 SND_DLSYM_BUILD_VERSION(snd_func_datadir, SND_CONFIG_DLSYM_VERSION_EVALUATE);
@@ -527,11 +517,8 @@ int snd_func_private_string(snd_config_t **dst, snd_config_t *root ATTRIBUTE_UNU
                return err;
        }
        err = snd_config_get_id(src, &id);
-       if (err >= 0) {
-               err = snd_config_make_string(dst, id);
-               if (err >= 0)
-                       err = snd_config_set_string(*dst, str);
-       }
+       if (err >= 0)
+               err = snd_config_imake_string(dst, id, str);
        return err;
 }
 #ifndef DOC_HIDDEN
@@ -609,11 +596,8 @@ int snd_func_private_card_driver(snd_config_t **dst, snd_config_t *root ATTRIBUT
        if ((err = snd_determine_driver(card, &driver)) < 0)
                return err;
        err = snd_config_get_id(src, &id);
-       if (err >= 0) {
-               err = snd_config_make_string(dst, id);
-               if (err >= 0)
-                       err = snd_config_set_string(*dst, driver);
-       }
+       if (err >= 0)
+               err = snd_config_imake_string(dst, id, driver);
        free(driver);
        return err;
 }
@@ -667,10 +651,9 @@ int snd_func_card_driver(snd_config_t **dst, snd_config_t *root, snd_config_t *s
                return v;
        }
        free(str);
-       err = snd_config_make_integer(&val, "card");
+       err = snd_config_imake_integer(&val, "card", v);
        if (err < 0)
                return err;
-       snd_config_set_integer(val, v);
        err = snd_func_private_card_driver(dst, root, src, val);
        snd_config_delete(val);
        return err;
@@ -738,11 +721,8 @@ int snd_func_card_id(snd_config_t **dst, snd_config_t *root, snd_config_t *src,
                goto __error;
        }
        err = snd_config_get_id(src, &id);
-       if (err >= 0) {
-               err = snd_config_make_string(dst, id);
-               if (err >= 0)
-                       err = snd_config_set_string(*dst, res);
-       }
+       if (err >= 0)
+               err = snd_config_imake_string(dst, id, res);
        free(res);
       __error:
        if (ctl)
@@ -836,11 +816,8 @@ int snd_func_pcm_id(snd_config_t **dst, snd_config_t *root, snd_config_t *src, v
                goto __error;
        }
        err = snd_config_get_id(src, &id);
-       if (err >= 0) {
-               err = snd_config_make_string(dst, id);
-               if (err >= 0)
-                       err = snd_config_set_string(*dst, snd_pcm_info_get_id(info));
-       }
+       if (err >= 0)
+               err = snd_config_imake_string(dst, id, snd_pcm_info_get_id(info));
       __error:
        if (ctl)
                snd_ctl_close(ctl);
@@ -893,11 +870,8 @@ int snd_func_private_pcm_subdevice(snd_config_t **dst, snd_config_t *root ATTRIB
                return err;
        }
        err = snd_config_get_id(src, &id);
-       if (err >= 0) {
-               err = snd_config_make_integer(dst, id);
-               if (err >= 0)
-                       err = snd_config_set_integer(*dst, snd_pcm_info_get_subdevice(info));
-       }
+       if (err >= 0)
+               err = snd_config_imake_integer(dst, id, snd_pcm_info_get_subdevice(info));
        return err;
 }
 #ifndef DOC_HIDDEN
index 65cc3e964df229c04020bedaa3ee345ed6951095..e8349b84da861df941ed2886eee3105b8eed5911 100644 (file)
@@ -650,10 +650,9 @@ int _snd_pcm_hook_ctl_elems_install(snd_pcm_t *pcm, snd_config_t *conf)
                SNDERR("Cannot open CTL %s", ctl_name);
                return err;
        }
-       err = snd_config_make_pointer(&pcm_conf, "pcm_handle");
+       err = snd_config_imake_pointer(&pcm_conf, "pcm_handle", pcm);
        if (err < 0)
                goto _err;
-       snd_config_set_pointer(pcm_conf, pcm);
        err = snd_sctl_build(&sctl, ctl, conf, pcm_conf, 0);
        if (err < 0)
                goto _err;