diff options
author | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-27 16:03:18 +0000 |
---|---|---|
committer | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-27 16:03:18 +0000 |
commit | 2dd5bc6a074165ddfbd57c4bd52c2d2dac8f47a1 (patch) | |
tree | 465b29cb405d3af0b0ad50c78e1dccc636594fec /src/pulsecore/shared.c | |
parent | Initial commit. (diff) | |
download | pulseaudio-2dd5bc6a074165ddfbd57c4bd52c2d2dac8f47a1.tar.xz pulseaudio-2dd5bc6a074165ddfbd57c4bd52c2d2dac8f47a1.zip |
Adding upstream version 14.2.upstream/14.2upstream
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'src/pulsecore/shared.c')
-rw-r--r-- | src/pulsecore/shared.c | 116 |
1 files changed, 116 insertions, 0 deletions
diff --git a/src/pulsecore/shared.c b/src/pulsecore/shared.c new file mode 100644 index 0000000..9bc7eb5 --- /dev/null +++ b/src/pulsecore/shared.c @@ -0,0 +1,116 @@ +/*** + This file is part of PulseAudio. + + Copyright 2004-2006 Lennart Poettering + + PulseAudio is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published + by the Free Software Foundation; either version 2.1 of the License, + or (at your option) any later version. + + PulseAudio is distributed in the hope that it will be useful, but + WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with PulseAudio; if not, see <http://www.gnu.org/licenses/>. +***/ + +#ifdef HAVE_CONFIG_H +#include <config.h> +#endif + +#include <pulse/xmalloc.h> +#include <pulsecore/macro.h> + +#include "shared.h" + +typedef struct pa_shared { + char *name; /* Points to memory allocated by the shared property system */ + void *data; /* Points to memory maintained by the caller */ +} pa_shared; + +/* Allocate a new shared property object */ +static pa_shared* shared_new(const char *name, void *data) { + pa_shared* p; + + pa_assert(name); + pa_assert(data); + + p = pa_xnew(pa_shared, 1); + p->name = pa_xstrdup(name); + p->data = data; + + return p; +} + +/* Free a shared property object */ +static void shared_free(pa_shared *p) { + pa_assert(p); + + pa_xfree(p->name); + pa_xfree(p); +} + +void* pa_shared_get(pa_core *c, const char *name) { + pa_shared *p; + + pa_assert(c); + pa_assert(name); + pa_assert(c->shared); + + if (!(p = pa_hashmap_get(c->shared, name))) + return NULL; + + return p->data; +} + +int pa_shared_set(pa_core *c, const char *name, void *data) { + pa_shared *p; + + pa_assert(c); + pa_assert(name); + pa_assert(data); + pa_assert(c->shared); + + if (pa_hashmap_get(c->shared, name)) + return -1; + + p = shared_new(name, data); + pa_hashmap_put(c->shared, p->name, p); + return 0; +} + +int pa_shared_remove(pa_core *c, const char *name) { + pa_shared *p; + + pa_assert(c); + pa_assert(name); + pa_assert(c->shared); + + if (!(p = pa_hashmap_remove(c->shared, name))) + return -1; + + shared_free(p); + return 0; +} + +void pa_shared_dump(pa_core *c, pa_strbuf *s) { + void *state = NULL; + pa_shared *p; + + pa_assert(c); + pa_assert(s); + + while ((p = pa_hashmap_iterate(c->shared, &state, NULL))) + pa_strbuf_printf(s, "[%s] -> [%p]\n", p->name, p->data); +} + +int pa_shared_replace(pa_core *c, const char *name, void *data) { + pa_assert(c); + pa_assert(name); + + (void) pa_shared_remove(c, name); + return pa_shared_set(c, name, data); +} |