Allow hint for ctl, hwdep, timer and seq

Like pcm and rawmidi, each object parser needs to accept the hint
component.  Now a new local function _snd_conf_generic_id() was
introduced to replace each call of "comment" and "type" field checks.

Also, the two existing identical functions for pcm and rawmidi are
removed and the new function is used commonly.

Signed-off-by: Takashi Iwai <tiwai@suse.de>
This commit is contained in:
Takashi Iwai 2015-04-30 14:52:35 +02:00
parent 46d98392d0
commit 7d9972c6ad
12 changed files with 25 additions and 54 deletions

View file

@ -348,4 +348,6 @@ int snd_config_search_alias_hooks(snd_config_t *config,
const char *base, const char *key,
snd_config_t **result);
int _snd_conf_generic_id(const char *id);
#endif

View file

@ -1302,3 +1302,16 @@ int snd_func_refer(snd_config_t **dst, snd_config_t *root, snd_config_t *src,
#ifndef DOC_HIDDEN
SND_DLSYM_BUILD_VERSION(snd_func_refer, SND_CONFIG_DLSYM_VERSION_EVALUATE);
#endif
#ifndef DOC_HIDDEN
int _snd_conf_generic_id(const char *id)
{
static const char ids[3][8] = { "comment", "type", "hint" };
unsigned int k;
for (k = 0; k < sizeof(ids) / sizeof(ids[0]); ++k) {
if (strcmp(id, ids[k]) == 0)
return 1;
}
return 0;
}
#endif

View file

@ -446,9 +446,7 @@ int _snd_ctl_hw_open(snd_ctl_t **handlep, char *name, snd_config_t *root ATTRIBU
const char *id;
if (snd_config_get_id(n, &id) < 0)
continue;
if (strcmp(id, "comment") == 0)
continue;
if (strcmp(id, "type") == 0)
if (_snd_conf_generic_id(id))
continue;
if (strcmp(id, "card") == 0) {
err = snd_config_get_integer(n, &card);

View file

@ -551,10 +551,7 @@ int _snd_ctl_shm_open(snd_ctl_t **handlep, char *name, snd_config_t *root, snd_c
const char *id;
if (snd_config_get_id(n, &id) < 0)
continue;
if (strcmp(id, "comment") == 0)
continue;
if (strcmp(id, "type") == 0)
continue;
if (_snd_conf_generic_id(id))
if (strcmp(id, "server") == 0) {
err = snd_config_get_string(n, &server);
if (err < 0) {
@ -597,7 +594,7 @@ int _snd_ctl_shm_open(snd_ctl_t **handlep, char *name, snd_config_t *root, snd_c
const char *id;
if (snd_config_get_id(n, &id) < 0)
continue;
if (strcmp(id, "comment") == 0)
if (_snd_conf_generic_id(id))
continue;
if (strcmp(id, "host") == 0)
continue;

View file

@ -158,9 +158,7 @@ int _snd_hwdep_hw_open(snd_hwdep_t **hwdep, char *name,
const char *id;
if (snd_config_get_id(n, &id) < 0)
continue;
if (strcmp(id, "comment") == 0)
continue;
if (strcmp(id, "type") == 0)
if (_snd_conf_generic_id(id))
continue;
if (strcmp(id, "card") == 0) {
err = snd_config_get_integer(n, &card);

View file

@ -7059,18 +7059,6 @@ int snd_pcm_slave_conf(snd_config_t *root, snd_config_t *conf,
return err;
}
int snd_pcm_conf_generic_id(const char *id)
{
static const char ids[3][8] = { "comment", "type", "hint" };
unsigned int k;
for (k = 0; k < sizeof(ids) / sizeof(ids[0]); ++k) {
if (strcmp(id, ids[k]) == 0)
return 1;
}
return 0;
}
static void snd_pcm_set_ptr(snd_pcm_t *pcm, snd_pcm_rbptr_t *rbptr,
volatile snd_pcm_uframes_t *hw_ptr, int fd, off_t offset)
{

View file

@ -262,8 +262,6 @@ struct _snd_pcm {
snd1_pcm_areas_from_bufs
#define snd_pcm_open_named_slave \
snd1_pcm_open_named_slave
#define snd_pcm_conf_generic_id \
snd1_pcm_conf_generic_id
#define snd_pcm_hw_open_fd \
snd1_pcm_hw_open_fd
#define snd_pcm_wait_nocheck \
@ -882,7 +880,8 @@ snd_pcm_open_slave(snd_pcm_t **pcmp, snd_config_t *root,
return snd_pcm_open_named_slave(pcmp, NULL, root, conf, stream,
mode, parent_conf);
}
int snd_pcm_conf_generic_id(const char *id);
#define snd_pcm_conf_generic_id(id) _snd_conf_generic_id(id)
int snd_pcm_hw_open_fd(snd_pcm_t **pcmp, const char *name, int fd, int mmap_emulation, int sync_ptr_ioctl);
int __snd_pcm_mmap_emul_open(snd_pcm_t **pcmp, const char *name,

View file

@ -990,21 +990,3 @@ ssize_t snd_rawmidi_read(snd_rawmidi_t *rawmidi, void *buffer, size_t size)
assert(buffer || size == 0);
return (rawmidi->ops->read)(rawmidi, buffer, size);
}
#ifndef DOC_HIDDEN
int snd_rawmidi_conf_generic_id(const char *id)
{
static const char ids[][8] = {
"comment",
"type",
"hint",
};
unsigned int k;
for (k = 0; k < sizeof ids / sizeof *ids; ++k) {
if (strcmp(id, ids[k]) == 0)
return 1;
}
return 0;
}
#endif

View file

@ -58,4 +58,4 @@ int snd_rawmidi_virtual_open(snd_rawmidi_t **inputp, snd_rawmidi_t **outputp,
const char *name, snd_seq_t *seq_handle, int port,
int merge, int mode);
int snd_rawmidi_conf_generic_id(const char *id);
#define snd_rawmidi_conf_generic_id(id) _snd_conf_generic_id(id)

View file

@ -546,9 +546,7 @@ int _snd_seq_hw_open(snd_seq_t **handlep, char *name,
const char *id;
if (snd_config_get_id(n, &id) < 0)
continue;
if (strcmp(id, "comment") == 0)
continue;
if (strcmp(id, "type") == 0)
if (_snd_conf_generic_id(id))
continue;
return -EINVAL;
}

View file

@ -299,9 +299,7 @@ int _snd_timer_hw_open(snd_timer_t **timer, char *name,
const char *id;
if (snd_config_get_id(n, &id) < 0)
continue;
if (strcmp(id, "comment") == 0)
continue;
if (strcmp(id, "type") == 0)
if (_snd_conf_generic_id(id))
continue;
if (strcmp(id, "class") == 0) {
err = snd_config_get_integer(n, &dev_class);

View file

@ -134,9 +134,7 @@ int _snd_timer_query_hw_open(snd_timer_query_t **timer, char *name,
const char *id;
if (snd_config_get_id(n, &id) < 0)
continue;
if (strcmp(id, "comment") == 0)
continue;
if (strcmp(id, "type") == 0)
if (_snd_conf_generic_id(id))
continue;
SNDERR("Unexpected field %s", id);
return -EINVAL;