summaryrefslogtreecommitdiffstats
path: root/src/common.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/common.c')
-rw-r--r--src/common.c502
1 files changed, 252 insertions, 250 deletions
diff --git a/src/common.c b/src/common.c
index db60aa0..f18f13d 100644
--- a/src/common.c
+++ b/src/common.c
@@ -1,3 +1,5 @@
+/*-*- Mode: C; c-basic-offset: 8 -*-*/
+
/***
This file is part of libcanberra.
@@ -124,42 +126,42 @@
*/
int ca_context_create(ca_context **_c) {
- ca_context *c;
- int ret;
- const char *d;
+ ca_context *c;
+ int ret;
+ const char *d;
- ca_return_val_if_fail(!ca_detect_fork(), CA_ERROR_FORKED);
- ca_return_val_if_fail(_c, CA_ERROR_INVALID);
+ ca_return_val_if_fail(!ca_detect_fork(), CA_ERROR_FORKED);
+ ca_return_val_if_fail(_c, CA_ERROR_INVALID);
- if (!(c = ca_new0(ca_context, 1)))
- return CA_ERROR_OOM;
+ if (!(c = ca_new0(ca_context, 1)))
+ return CA_ERROR_OOM;
- if (!(c->mutex = ca_mutex_new())) {
- ca_context_destroy(c);
- return CA_ERROR_OOM;
- }
+ if (!(c->mutex = ca_mutex_new())) {
+ ca_context_destroy(c);
+ return CA_ERROR_OOM;
+ }
- if ((ret = ca_proplist_create(&c->props)) < 0) {
- ca_context_destroy(c);
- return ret;
- }
+ if ((ret = ca_proplist_create(&c->props)) < 0) {
+ ca_context_destroy(c);
+ return ret;
+ }
- if ((d = getenv("CANBERRA_DRIVER"))) {
- if ((ret = ca_context_set_driver(c, d)) < 0) {
- ca_context_destroy(c);
- return ret;
+ if ((d = getenv("CANBERRA_DRIVER"))) {
+ if ((ret = ca_context_set_driver(c, d)) < 0) {
+ ca_context_destroy(c);
+ return ret;
+ }
}
- }
- if ((d = getenv("CANBERRA_DEVICE"))) {
- if ((ret = ca_context_change_device(c, d)) < 0) {
- ca_context_destroy(c);
- return ret;
+ if ((d = getenv("CANBERRA_DEVICE"))) {
+ if ((ret = ca_context_change_device(c, d)) < 0) {
+ ca_context_destroy(c);
+ return ret;
+ }
}
- }
- *_c = c;
- return CA_SUCCESS;
+ *_c = c;
+ return CA_SUCCESS;
}
/**
@@ -171,29 +173,29 @@ int ca_context_create(ca_context **_c) {
* Returns: 0 on success, negative error code on error.
*/
int ca_context_destroy(ca_context *c) {
- int ret = CA_SUCCESS;
+ int ret = CA_SUCCESS;
- ca_return_val_if_fail(!ca_detect_fork(), CA_ERROR_FORKED);
- ca_return_val_if_fail(c, CA_ERROR_INVALID);
+ ca_return_val_if_fail(!ca_detect_fork(), CA_ERROR_FORKED);
+ ca_return_val_if_fail(c, CA_ERROR_INVALID);
- /* There's no locking necessary here, because the application is
- * broken anyway if it destructs this object in one thread and
- * still is calling a method of it in another. */
+ /* There's no locking necessary here, because the application is
+ * broken anyway if it destructs this object in one thread and
+ * still is calling a method of it in another. */
- if (c->opened)
- ret = driver_destroy(c);
+ if (c->opened)
+ ret = driver_destroy(c);
- if (c->props)
- ca_assert_se(ca_proplist_destroy(c->props) == CA_SUCCESS);
+ if (c->props)
+ ca_assert_se(ca_proplist_destroy(c->props) == CA_SUCCESS);
- if (c->mutex)
- ca_mutex_free(c->mutex);
+ if (c->mutex)
+ ca_mutex_free(c->mutex);
- ca_free(c->driver);
- ca_free(c->device);
- ca_free(c);
+ ca_free(c->driver);
+ ca_free(c->device);
+ ca_free(c);
- return ret;
+ return ret;
}
/**
@@ -209,30 +211,30 @@ int ca_context_destroy(ca_context *c) {
* Returns: 0 on success, negative error code on error.
*/
int ca_context_set_driver(ca_context *c, const char *driver) {
- char *n;
- int ret;
-
- ca_return_val_if_fail(!ca_detect_fork(), CA_ERROR_FORKED);
- ca_return_val_if_fail(c, CA_ERROR_INVALID);
- ca_mutex_lock(c->mutex);
- ca_return_val_if_fail_unlock(!c->opened, CA_ERROR_STATE, c->mutex);
-
- if (!driver)
- n = NULL;
- else if (!(n = ca_strdup(driver))) {
- ret = CA_ERROR_OOM;
- goto fail;
- }
+ char *n;
+ int ret;
+
+ ca_return_val_if_fail(!ca_detect_fork(), CA_ERROR_FORKED);
+ ca_return_val_if_fail(c, CA_ERROR_INVALID);
+ ca_mutex_lock(c->mutex);
+ ca_return_val_if_fail_unlock(!c->opened, CA_ERROR_STATE, c->mutex);
+
+ if (!driver)
+ n = NULL;
+ else if (!(n = ca_strdup(driver))) {
+ ret = CA_ERROR_OOM;
+ goto fail;
+ }
- ca_free(c->driver);
- c->driver = n;
+ ca_free(c->driver);
+ c->driver = n;
- ret = CA_SUCCESS;
+ ret = CA_SUCCESS;
fail:
- ca_mutex_unlock(c->mutex);
+ ca_mutex_unlock(c->mutex);
- return ret;
+ return ret;
}
/**
@@ -251,47 +253,47 @@ fail:
* Returns: 0 on success, negative error code on error.
*/
int ca_context_change_device(ca_context *c, const char *device) {
- char *n;
- int ret;
-
- ca_return_val_if_fail(!ca_detect_fork(), CA_ERROR_FORKED);
- ca_return_val_if_fail(c, CA_ERROR_INVALID);
- ca_mutex_lock(c->mutex);
-
- if (!device)
- n = NULL;
- else if (!(n = ca_strdup(device))) {
- ret = CA_ERROR_OOM;
- goto fail;
- }
+ char *n;
+ int ret;
+
+ ca_return_val_if_fail(!ca_detect_fork(), CA_ERROR_FORKED);
+ ca_return_val_if_fail(c, CA_ERROR_INVALID);
+ ca_mutex_lock(c->mutex);
+
+ if (!device)
+ n = NULL;
+ else if (!(n = ca_strdup(device))) {
+ ret = CA_ERROR_OOM;
+ goto fail;
+ }
- ret = c->opened ? driver_change_device(c, n) : CA_SUCCESS;
+ ret = c->opened ? driver_change_device(c, n) : CA_SUCCESS;
- if (ret == CA_SUCCESS) {
- ca_free(c->device);
- c->device = n;
- } else
- ca_free(n);
+ if (ret == CA_SUCCESS) {
+ ca_free(c->device);
+ c->device = n;
+ } else
+ ca_free(n);
fail:
- ca_mutex_unlock(c->mutex);
+ ca_mutex_unlock(c->mutex);
- return ret;
+ return ret;
}
static int context_open_unlocked(ca_context *c) {
- int ret;
+ int ret;
- ca_return_val_if_fail(!ca_detect_fork(), CA_ERROR_FORKED);
- ca_return_val_if_fail(c, CA_ERROR_INVALID);
+ ca_return_val_if_fail(!ca_detect_fork(), CA_ERROR_FORKED);
+ ca_return_val_if_fail(c, CA_ERROR_INVALID);
- if (c->opened)
- return CA_SUCCESS;
+ if (c->opened)
+ return CA_SUCCESS;
- if ((ret = driver_open(c)) == CA_SUCCESS)
- c->opened = TRUE;
+ if ((ret = driver_open(c)) == CA_SUCCESS)
+ c->opened = TRUE;
- return ret;
+ return ret;
}
/**
@@ -306,18 +308,18 @@ static int context_open_unlocked(ca_context *c) {
* Returns: 0 on success, negative error code on error.
*/
int ca_context_open(ca_context *c) {
- int ret;
+ int ret;
- ca_return_val_if_fail(!ca_detect_fork(), CA_ERROR_FORKED);
- ca_return_val_if_fail(c, CA_ERROR_INVALID);
- ca_mutex_lock(c->mutex);
- ca_return_val_if_fail_unlock(!c->opened, CA_ERROR_STATE, c->mutex);
+ ca_return_val_if_fail(!ca_detect_fork(), CA_ERROR_FORKED);
+ ca_return_val_if_fail(c, CA_ERROR_INVALID);
+ ca_mutex_lock(c->mutex);
+ ca_return_val_if_fail_unlock(!c->opened, CA_ERROR_STATE, c->mutex);
- ret = context_open_unlocked(c);
+ ret = context_open_unlocked(c);
- ca_mutex_unlock(c->mutex);
+ ca_mutex_unlock(c->mutex);
- return ret;
+ return ret;
}
/**
@@ -339,25 +341,25 @@ int ca_context_open(ca_context *c) {
*/
int ca_context_change_props(ca_context *c, ...) {
- va_list ap;
- int ret;
- ca_proplist *p = NULL;
+ va_list ap;
+ int ret;
+ ca_proplist *p = NULL;
- ca_return_val_if_fail(!ca_detect_fork(), CA_ERROR_FORKED);
- ca_return_val_if_fail(c, CA_ERROR_INVALID);
+ ca_return_val_if_fail(!ca_detect_fork(), CA_ERROR_FORKED);
+ ca_return_val_if_fail(c, CA_ERROR_INVALID);
- va_start(ap, c);
- ret = ca_proplist_from_ap(&p, ap);
- va_end(ap);
+ va_start(ap, c);
+ ret = ca_proplist_from_ap(&p, ap);
+ va_end(ap);
- if (ret < 0)
- return ret;
+ if (ret < 0)
+ return ret;
- ret = ca_context_change_props_full(c, p);
+ ret = ca_context_change_props_full(c, p);
- ca_assert_se(ca_proplist_destroy(p) == 0);
+ ca_assert_se(ca_proplist_destroy(p) == 0);
- return ret;
+ return ret;
}
/**
@@ -373,31 +375,31 @@ int ca_context_change_props(ca_context *c, ...) {
*/
int ca_context_change_props_full(ca_context *c, ca_proplist *p) {
- int ret;
- ca_proplist *merged;
+ int ret;
+ ca_proplist *merged;
- ca_return_val_if_fail(!ca_detect_fork(), CA_ERROR_FORKED);
- ca_return_val_if_fail(c, CA_ERROR_INVALID);
- ca_return_val_if_fail(p, CA_ERROR_INVALID);
+ ca_return_val_if_fail(!ca_detect_fork(), CA_ERROR_FORKED);
+ ca_return_val_if_fail(c, CA_ERROR_INVALID);
+ ca_return_val_if_fail(p, CA_ERROR_INVALID);
- ca_mutex_lock(c->mutex);
+ ca_mutex_lock(c->mutex);
- if ((ret = ca_proplist_merge(&merged, c->props, p)) < 0)
- goto finish;
+ if ((ret = ca_proplist_merge(&merged, c->props, p)) < 0)
+ goto finish;
- ret = c->opened ? driver_change_props(c, p, merged) : CA_SUCCESS;
+ ret = c->opened ? driver_change_props(c, p, merged) : CA_SUCCESS;
- if (ret == CA_SUCCESS) {
- ca_assert_se(ca_proplist_destroy(c->props) == CA_SUCCESS);
- c->props = merged;
- } else
- ca_assert_se(ca_proplist_destroy(merged) == CA_SUCCESS);
+ if (ret == CA_SUCCESS) {
+ ca_assert_se(ca_proplist_destroy(c->props) == CA_SUCCESS);
+ c->props = merged;
+ } else
+ ca_assert_se(ca_proplist_destroy(merged) == CA_SUCCESS);
finish:
- ca_mutex_unlock(c->mutex);
+ ca_mutex_unlock(c->mutex);
- return ret;
+ return ret;
}
/**
@@ -443,25 +445,25 @@ finish:
*/
int ca_context_play(ca_context *c, uint32_t id, ...) {
- int ret;
- va_list ap;
- ca_proplist *p = NULL;
+ int ret;
+ va_list ap;
+ ca_proplist *p = NULL;
- ca_return_val_if_fail(!ca_detect_fork(), CA_ERROR_FORKED);
- ca_return_val_if_fail(c, CA_ERROR_INVALID);
+ ca_return_val_if_fail(!ca_detect_fork(), CA_ERROR_FORKED);
+ ca_return_val_if_fail(c, CA_ERROR_INVALID);
- va_start(ap, id);
- ret = ca_proplist_from_ap(&p, ap);
- va_end(ap);
+ va_start(ap, id);
+ ret = ca_proplist_from_ap(&p, ap);
+ va_end(ap);
- if (ret < 0)
- return ret;
+ if (ret < 0)
+ return ret;
- ret = ca_context_play_full(c, id, p, NULL, NULL);
+ ret = ca_context_play_full(c, id, p, NULL, NULL);
- ca_assert_se(ca_proplist_destroy(p) == 0);
+ ca_assert_se(ca_proplist_destroy(p) == 0);
- return ret;
+ return ret;
}
/**
@@ -484,46 +486,46 @@ int ca_context_play(ca_context *c, uint32_t id, ...) {
*/
int ca_context_play_full(ca_context *c, uint32_t id, ca_proplist *p, ca_finish_callback_t cb, void *userdata) {
- int ret;
- const char *t;
- ca_bool_t enabled = TRUE;
+ int ret;
+ const char *t;
+ ca_bool_t enabled = TRUE;
- ca_return_val_if_fail(!ca_detect_fork(), CA_ERROR_FORKED);
- ca_return_val_if_fail(c, CA_ERROR_INVALID);
- ca_return_val_if_fail(p, CA_ERROR_INVALID);
- ca_return_val_if_fail(!userdata || cb, CA_ERROR_INVALID);
+ ca_return_val_if_fail(!ca_detect_fork(), CA_ERROR_FORKED);
+ ca_return_val_if_fail(c, CA_ERROR_INVALID);
+ ca_return_val_if_fail(p, CA_ERROR_INVALID);
+ ca_return_val_if_fail(!userdata || cb, CA_ERROR_INVALID);
- ca_mutex_lock(c->mutex);
+ ca_mutex_lock(c->mutex);
- ca_return_val_if_fail_unlock(ca_proplist_contains(p, CA_PROP_EVENT_ID) ||
- ca_proplist_contains(c->props, CA_PROP_EVENT_ID) ||
- ca_proplist_contains(p, CA_PROP_MEDIA_FILENAME) ||
- ca_proplist_contains(c->props, CA_PROP_MEDIA_FILENAME), CA_ERROR_INVALID, c->mutex);
+ ca_return_val_if_fail_unlock(ca_proplist_contains(p, CA_PROP_EVENT_ID) ||
+ ca_proplist_contains(c->props, CA_PROP_EVENT_ID) ||
+ ca_proplist_contains(p, CA_PROP_MEDIA_FILENAME) ||
+ ca_proplist_contains(c->props, CA_PROP_MEDIA_FILENAME), CA_ERROR_INVALID, c->mutex);
- ca_mutex_lock(c->props->mutex);
- if ((t = ca_proplist_gets_unlocked(c->props, CA_PROP_CANBERRA_ENABLE)))
- enabled = !ca_streq(t, "0");
- ca_mutex_unlock(c->props->mutex);
+ ca_mutex_lock(c->props->mutex);
+ if ((t = ca_proplist_gets_unlocked(c->props, CA_PROP_CANBERRA_ENABLE)))
+ enabled = !ca_streq(t, "0");
+ ca_mutex_unlock(c->props->mutex);
- ca_mutex_lock(p->mutex);
- if ((t = ca_proplist_gets_unlocked(p, CA_PROP_CANBERRA_ENABLE)))
- enabled = !ca_streq(t, "0");
- ca_mutex_unlock(p->mutex);
+ ca_mutex_lock(p->mutex);
+ if ((t = ca_proplist_gets_unlocked(p, CA_PROP_CANBERRA_ENABLE)))
+ enabled = !ca_streq(t, "0");
+ ca_mutex_unlock(p->mutex);
- ca_return_val_if_fail_unlock(enabled, CA_ERROR_DISABLED, c->mutex);
+ ca_return_val_if_fail_unlock(enabled, CA_ERROR_DISABLED, c->mutex);
- if ((ret = context_open_unlocked(c)) < 0)
- goto finish;
+ if ((ret = context_open_unlocked(c)) < 0)
+ goto finish;
- ca_assert(c->opened);
+ ca_assert(c->opened);
- ret = driver_play(c, id, p, cb, userdata);
+ ret = driver_play(c, id, p, cb, userdata);
finish:
- ca_mutex_unlock(c->mutex);
+ ca_mutex_unlock(c->mutex);
- return ret;
+ return ret;
}
/**
@@ -541,18 +543,18 @@ finish:
* Returns: 0 on success, negative error code on error.
*/
int ca_context_cancel(ca_context *c, uint32_t id) {
- int ret;
+ int ret;
- ca_return_val_if_fail(!ca_detect_fork(), CA_ERROR_FORKED);
- ca_return_val_if_fail(c, CA_ERROR_INVALID);
- ca_mutex_lock(c->mutex);
- ca_return_val_if_fail_unlock(c->opened, CA_ERROR_STATE, c->mutex);
+ ca_return_val_if_fail(!ca_detect_fork(), CA_ERROR_FORKED);
+ ca_return_val_if_fail(c, CA_ERROR_INVALID);
+ ca_mutex_lock(c->mutex);
+ ca_return_val_if_fail_unlock(c->opened, CA_ERROR_STATE, c->mutex);
- ret = driver_cancel(c, id);
+ ret = driver_cancel(c, id);
- ca_mutex_unlock(c->mutex);
+ ca_mutex_unlock(c->mutex);
- return ret;
+ return ret;
}
/**
@@ -574,25 +576,25 @@ int ca_context_cancel(ca_context *c, uint32_t id) {
*/
int ca_context_cache(ca_context *c, ...) {
- int ret;
- va_list ap;
- ca_proplist *p = NULL;
+ int ret;
+ va_list ap;
+ ca_proplist *p = NULL;
- ca_return_val_if_fail(!ca_detect_fork(), CA_ERROR_FORKED);
- ca_return_val_if_fail(c, CA_ERROR_INVALID);
+ ca_return_val_if_fail(!ca_detect_fork(), CA_ERROR_FORKED);
+ ca_return_val_if_fail(c, CA_ERROR_INVALID);
- va_start(ap, c);
- ret = ca_proplist_from_ap(&p, ap);
- va_end(ap);
+ va_start(ap, c);
+ ret = ca_proplist_from_ap(&p, ap);
+ va_end(ap);
- if (ret < 0)
- return ret;
+ if (ret < 0)
+ return ret;
- ret = ca_context_cache_full(c, p);
+ ret = ca_context_cache_full(c, p);
- ca_assert_se(ca_proplist_destroy(p) == 0);
+ ca_assert_se(ca_proplist_destroy(p) == 0);
- return ret;
+ return ret;
}
/**
@@ -610,29 +612,29 @@ int ca_context_cache(ca_context *c, ...) {
* Returns: 0 on success, negative error code on error.
*/
int ca_context_cache_full(ca_context *c, ca_proplist *p) {
- int ret;
+ int ret;
- ca_return_val_if_fail(!ca_detect_fork(), CA_ERROR_FORKED);
- ca_return_val_if_fail(c, CA_ERROR_INVALID);
- ca_return_val_if_fail(p, CA_ERROR_INVALID);
+ ca_return_val_if_fail(!ca_detect_fork(), CA_ERROR_FORKED);
+ ca_return_val_if_fail(c, CA_ERROR_INVALID);
+ ca_return_val_if_fail(p, CA_ERROR_INVALID);
- ca_mutex_lock(c->mutex);
+ ca_mutex_lock(c->mutex);
- ca_return_val_if_fail_unlock(ca_proplist_contains(p, CA_PROP_EVENT_ID) ||
- ca_proplist_contains(c->props, CA_PROP_EVENT_ID), CA_ERROR_INVALID, c->mutex);
+ ca_return_val_if_fail_unlock(ca_proplist_contains(p, CA_PROP_EVENT_ID) ||
+ ca_proplist_contains(c->props, CA_PROP_EVENT_ID), CA_ERROR_INVALID, c->mutex);
- if ((ret = context_open_unlocked(c)) < 0)
- goto finish;
+ if ((ret = context_open_unlocked(c)) < 0)
+ goto finish;
- ca_assert(c->opened);
+ ca_assert(c->opened);
- ret = driver_cache(c, p);
+ ret = driver_cache(c, p);
finish:
- ca_mutex_unlock(c->mutex);
+ ca_mutex_unlock(c->mutex);
- return ret;
+ return ret;
}
/**
@@ -645,49 +647,49 @@ finish:
*/
const char *ca_strerror(int code) {
- const char * const error_table[-_CA_ERROR_MAX] = {
- [-CA_SUCCESS] = "Success",
- [-CA_ERROR_NOTSUPPORTED] = "Operation not supported",
- [-CA_ERROR_INVALID] = "Invalid argument",
- [-CA_ERROR_STATE] = "Invalid state",
- [-CA_ERROR_OOM] = "Out of memory",
- [-CA_ERROR_NODRIVER] = "No such driver",
- [-CA_ERROR_SYSTEM] = "System error",
- [-CA_ERROR_CORRUPT] = "File or data corrupt",
- [-CA_ERROR_TOOBIG] = "File or data too large",
- [-CA_ERROR_NOTFOUND] = "File or data not found",
- [-CA_ERROR_DESTROYED] = "Destroyed",
- [-CA_ERROR_CANCELED] = "Canceled",
- [-CA_ERROR_NOTAVAILABLE] = "Not available",
- [-CA_ERROR_ACCESS] = "Access forbidden",
- [-CA_ERROR_IO] = "IO error",
- [-CA_ERROR_INTERNAL] = "Internal error",
- [-CA_ERROR_DISABLED] = "Sound disabled",
- [-CA_ERROR_FORKED] = "Process forked",
- [-CA_ERROR_DISCONNECTED] = "Disconnected"
- };
-
- ca_return_val_if_fail(code <= 0, NULL);
- ca_return_val_if_fail(code > _CA_ERROR_MAX, NULL);
-
- return error_table[-code];
+ const char * const error_table[-_CA_ERROR_MAX] = {
+ [-CA_SUCCESS] = "Success",
+ [-CA_ERROR_NOTSUPPORTED] = "Operation not supported",
+ [-CA_ERROR_INVALID] = "Invalid argument",
+ [-CA_ERROR_STATE] = "Invalid state",
+ [-CA_ERROR_OOM] = "Out of memory",
+ [-CA_ERROR_NODRIVER] = "No such driver",
+ [-CA_ERROR_SYSTEM] = "System error",
+ [-CA_ERROR_CORRUPT] = "File or data corrupt",
+ [-CA_ERROR_TOOBIG] = "File or data too large",
+ [-CA_ERROR_NOTFOUND] = "File or data not found",
+ [-CA_ERROR_DESTROYED] = "Destroyed",
+ [-CA_ERROR_CANCELED] = "Canceled",
+ [-CA_ERROR_NOTAVAILABLE] = "Not available",
+ [-CA_ERROR_ACCESS] = "Access forbidden",
+ [-CA_ERROR_IO] = "IO error",
+ [-CA_ERROR_INTERNAL] = "Internal error",
+ [-CA_ERROR_DISABLED] = "Sound disabled",
+ [-CA_ERROR_FORKED] = "Process forked",
+ [-CA_ERROR_DISCONNECTED] = "Disconnected"
+ };
+
+ ca_return_val_if_fail(code <= 0, NULL);
+ ca_return_val_if_fail(code > _CA_ERROR_MAX, NULL);
+
+ return error_table[-code];
}
/* Not exported */
int ca_parse_cache_control(ca_cache_control_t *control, const char *c) {
- ca_return_val_if_fail(control, CA_ERROR_INVALID);
- ca_return_val_if_fail(c, CA_ERROR_INVALID);
-
- if (ca_streq(c, "never"))
- *control = CA_CACHE_CONTROL_NEVER;
- else if (ca_streq(c, "permanent"))
- *control = CA_CACHE_CONTROL_PERMANENT;
- else if (ca_streq(c, "volatile"))
- *control = CA_CACHE_CONTROL_VOLATILE;
- else
- return CA_ERROR_INVALID;
-
- return CA_SUCCESS;
+ ca_return_val_if_fail(control, CA_ERROR_INVALID);
+ ca_return_val_if_fail(c, CA_ERROR_INVALID);
+
+ if (ca_streq(c, "never"))
+ *control = CA_CACHE_CONTROL_NEVER;
+ else if (ca_streq(c, "permanent"))
+ *control = CA_CACHE_CONTROL_PERMANENT;
+ else if (ca_streq(c, "volatile"))
+ *control = CA_CACHE_CONTROL_VOLATILE;
+ else
+ return CA_ERROR_INVALID;
+
+ return CA_SUCCESS;
}
/**
@@ -704,17 +706,17 @@ int ca_parse_cache_control(ca_cache_control_t *control, const char *c) {
* Since: 0.16
*/
int ca_context_playing(ca_context *c, uint32_t id, int *playing) {
- int ret;
+ int ret;
- ca_return_val_if_fail(!ca_detect_fork(), CA_ERROR_FORKED);
- ca_return_val_if_fail(c, CA_ERROR_INVALID);
- ca_return_val_if_fail(playing, CA_ERROR_INVALID);
- ca_mutex_lock(c->mutex);
- ca_return_val_if_fail_unlock(c->opened, CA_ERROR_STATE, c->mutex);
+ ca_return_val_if_fail(!ca_detect_fork(), CA_ERROR_FORKED);
+ ca_return_val_if_fail(c, CA_ERROR_INVALID);
+ ca_return_val_if_fail(playing, CA_ERROR_INVALID);
+ ca_mutex_lock(c->mutex);
+ ca_return_val_if_fail_unlock(c->opened, CA_ERROR_STATE, c->mutex);
- ret = driver_playing(c, id, playing);
+ ret = driver_playing(c, id, playing);
- ca_mutex_unlock(c->mutex);
+ ca_mutex_unlock(c->mutex);
- return ret;
+ return ret;
}