10 struct namereg_entry
{
11 enum pa_namereg_type type
;
16 void pa_namereg_free(struct pa_core
*c
) {
20 assert(pa_hashset_ncontents(c
->namereg
) == 0);
21 pa_hashset_free(c
->namereg
, NULL
, NULL
);
24 const char *pa_namereg_register(struct pa_core
*c
, const char *name
, enum pa_namereg_type type
, void *data
, int fail
) {
25 struct namereg_entry
*e
;
29 assert(c
&& name
&& data
);
32 c
->namereg
= pa_hashset_new(pa_idxset_string_hash_func
, pa_idxset_string_compare_func
);
36 if ((e
= pa_hashset_get(c
->namereg
, name
)) && fail
)
43 size_t l
= strlen(name
);
47 for (i
= 1; i
<= 99; i
++) {
48 snprintf(n
, l
+2, "%s%u", name
, i
);
50 if (!(e
= pa_hashset_get(c
->namereg
, n
)))
61 e
= malloc(sizeof(struct namereg_entry
));
67 r
= pa_hashset_put(c
->namereg
, e
->name
, e
);
74 void pa_namereg_unregister(struct pa_core
*c
, const char *name
) {
75 struct namereg_entry
*e
;
79 e
= pa_hashset_get(c
->namereg
, name
);
82 r
= pa_hashset_remove(c
->namereg
, name
);
89 void* pa_namereg_get(struct pa_core
*c
, const char *name
, enum pa_namereg_type type
) {
90 struct namereg_entry
*e
;
96 if ((e
= pa_hashset_get(c
->namereg
, name
)))
97 if (e
->type
== e
->type
)
100 index
= (uint32_t) strtol(name
, &x
, 0);
105 if (type
== PA_NAMEREG_SINK
)
106 d
= pa_idxset_get_by_index(c
->sinks
, index
);
107 else if (type
== PA_NAMEREG_SOURCE
)
108 d
= pa_idxset_get_by_index(c
->sources
, index
);