tree-wide: refactor active feature checks to use _test_active_features()

Similar to 5fc7e68d10, it's wrong to test
multiple flags with a simple & operation. In some cases we had this wrong.
This commit is contained in:
George Kiagiadakis 2023-11-08 12:23:00 +02:00
parent 44a157b506
commit 83e47ab7c2
9 changed files with 30 additions and 32 deletions

View file

@ -270,8 +270,8 @@ WpLinkState
wp_link_get_state (WpLink * self, const gchar ** error)
{
g_return_val_if_fail (WP_IS_LINK (self), WP_LINK_STATE_ERROR);
g_return_val_if_fail (wp_object_get_active_features (WP_OBJECT (self)) &
WP_PIPEWIRE_OBJECT_FEATURE_INFO, WP_LINK_STATE_ERROR);
g_return_val_if_fail (wp_object_test_active_features (WP_OBJECT (self),
WP_PIPEWIRE_OBJECT_FEATURE_INFO), WP_LINK_STATE_ERROR);
WpPwObjectMixinData *d = wp_pw_object_mixin_get_data (self);
const struct pw_link_info *info = d->info;

View file

@ -607,7 +607,7 @@ wp_log_fields_format_message (WpLogFields *lf)
spa_dbg_str = NULL;
}
else if (lf->object && g_type_is_a (lf->object_type, WP_TYPE_PROXY) &&
(wp_object_get_active_features ((WpObject *) lf->object) & WP_PROXY_FEATURE_BOUND)) {
(wp_object_test_active_features ((WpObject *) lf->object, WP_PROXY_FEATURE_BOUND))) {
extra_object = g_strdup_printf (":%u:",
wp_proxy_get_bound_id ((WpProxy *) lf->object));
}

View file

@ -407,8 +407,8 @@ WpNodeState
wp_node_get_state (WpNode * self, const gchar ** error)
{
g_return_val_if_fail (WP_IS_NODE (self), WP_NODE_STATE_ERROR);
g_return_val_if_fail (wp_object_get_active_features (WP_OBJECT (self)) &
WP_PIPEWIRE_OBJECT_FEATURE_INFO, WP_NODE_STATE_ERROR);
g_return_val_if_fail (wp_object_test_active_features (WP_OBJECT (self),
WP_PIPEWIRE_OBJECT_FEATURE_INFO), WP_NODE_STATE_ERROR);
WpPwObjectMixinData *d = wp_pw_object_mixin_get_data (self);
const struct pw_node_info *info = d->info;
@ -432,8 +432,8 @@ guint
wp_node_get_n_input_ports (WpNode * self, guint * max)
{
g_return_val_if_fail (WP_IS_NODE (self), 0);
g_return_val_if_fail (wp_object_get_active_features (WP_OBJECT (self)) &
WP_PIPEWIRE_OBJECT_FEATURE_INFO, 0);
g_return_val_if_fail (wp_object_test_active_features (WP_OBJECT (self),
WP_PIPEWIRE_OBJECT_FEATURE_INFO), 0);
WpPwObjectMixinData *d = wp_pw_object_mixin_get_data (self);
const struct pw_node_info *info = d->info;
@ -457,8 +457,8 @@ guint
wp_node_get_n_output_ports (WpNode * self, guint * max)
{
g_return_val_if_fail (WP_IS_NODE (self), 0);
g_return_val_if_fail (wp_object_get_active_features (WP_OBJECT (self)) &
WP_PIPEWIRE_OBJECT_FEATURE_INFO, 0);
g_return_val_if_fail (wp_object_test_active_features (WP_OBJECT (self),
WP_PIPEWIRE_OBJECT_FEATURE_INFO), 0);
WpPwObjectMixinData *d = wp_pw_object_mixin_get_data (self);
const struct pw_node_info *info = d->info;
@ -487,8 +487,8 @@ guint
wp_node_get_n_ports (WpNode * self)
{
g_return_val_if_fail (WP_IS_NODE (self), 0);
g_return_val_if_fail (wp_object_get_active_features (WP_OBJECT (self)) &
WP_NODE_FEATURE_PORTS, 0);
g_return_val_if_fail (wp_object_test_active_features (WP_OBJECT (self),
WP_NODE_FEATURE_PORTS), 0);
return wp_object_manager_get_n_objects (self->ports_om);
}
@ -507,8 +507,8 @@ WpIterator *
wp_node_new_ports_iterator (WpNode * self)
{
g_return_val_if_fail (WP_IS_NODE (self), NULL);
g_return_val_if_fail (wp_object_get_active_features (WP_OBJECT (self)) &
WP_NODE_FEATURE_PORTS, NULL);
g_return_val_if_fail (wp_object_test_active_features (WP_OBJECT (self),
WP_NODE_FEATURE_PORTS), NULL);
return wp_object_manager_new_iterator (self->ports_om);
}
@ -554,8 +554,8 @@ wp_node_new_ports_filtered_iterator_full (WpNode * self,
WpObjectInterest * interest)
{
g_return_val_if_fail (WP_IS_NODE (self), NULL);
g_return_val_if_fail (wp_object_get_active_features (WP_OBJECT (self)) &
WP_NODE_FEATURE_PORTS, NULL);
g_return_val_if_fail (wp_object_test_active_features (WP_OBJECT (self),
WP_NODE_FEATURE_PORTS), NULL);
return wp_object_manager_new_filtered_iterator_full (self->ports_om,
interest);
@ -601,8 +601,8 @@ WpPort *
wp_node_lookup_port_full (WpNode * self, WpObjectInterest * interest)
{
g_return_val_if_fail (WP_IS_NODE (self), NULL);
g_return_val_if_fail (wp_object_get_active_features (WP_OBJECT (self)) &
WP_NODE_FEATURE_PORTS, NULL);
g_return_val_if_fail (wp_object_test_active_features (WP_OBJECT (self),
WP_NODE_FEATURE_PORTS), NULL);
return (WpPort *)
wp_object_manager_lookup_full (self->ports_om, interest);
@ -626,8 +626,8 @@ wp_node_send_command (WpNode * self, const gchar * command)
g_return_if_fail (WP_IS_NODE (self));
g_return_if_fail (command_value != NULL);
g_return_if_fail (wp_object_get_active_features (WP_OBJECT (self)) &
WP_PROXY_FEATURE_BOUND);
g_return_if_fail (wp_object_test_active_features (WP_OBJECT (self),
WP_PROXY_FEATURE_BOUND));
struct spa_command cmd =
SPA_NODE_COMMAND_INIT(wp_spa_id_value_number (command_value));

View file

@ -763,7 +763,7 @@ wp_object_interest_matches_full (WpObjectInterest * self,
WpObject *oo = (WpObject *) object;
WpPipewireObject *pwo = (WpPipewireObject *) object;
if (wp_object_get_active_features (oo) & WP_PIPEWIRE_OBJECT_FEATURE_INFO)
if (wp_object_test_active_features (oo, WP_PIPEWIRE_OBJECT_FEATURE_INFO))
pw_props = props = wp_pipewire_object_get_properties (pwo);
}

View file

@ -146,8 +146,8 @@ WpDirection
wp_port_get_direction (WpPort * self)
{
g_return_val_if_fail (WP_IS_PORT (self), 0);
g_return_val_if_fail (wp_object_get_active_features (WP_OBJECT (self)) &
WP_PIPEWIRE_OBJECT_FEATURE_INFO, 0);
g_return_val_if_fail (wp_object_test_active_features (WP_OBJECT (self),
WP_PIPEWIRE_OBJECT_FEATURE_INFO), 0);
WpPwObjectMixinData *d = wp_pw_object_mixin_get_data (self);
const struct pw_port_info *info = d->info;

View file

@ -167,7 +167,7 @@ proxy_event_error (void *data, int seq, int res, const char *message)
/* we destroy the proxy on error if feature bound is still not enabled */
if (priv->pw_proxy &&
!(wp_object_get_active_features (WP_OBJECT (self)) & WP_PROXY_FEATURE_BOUND))
!(wp_object_test_active_features (WP_OBJECT (self), WP_PROXY_FEATURE_BOUND)))
pw_proxy_destroy (priv->pw_proxy);
wp_object_abort_activation (WP_OBJECT (self), message);

View file

@ -159,8 +159,7 @@ wp_settings_get (WpSettings *self, const gchar *setting)
g_return_val_if_fail (WP_IS_SETTINGS (self), NULL);
g_return_val_if_fail (setting, NULL);
if (!(wp_object_get_active_features (WP_OBJECT (self)) &
WP_OBJECT_FEATURES_ALL))
if (!(wp_object_test_active_features (WP_OBJECT (self), WP_SETTINGS_LOADED)))
return NULL;
value = wp_properties_get (self->settings, setting);

View file

@ -553,8 +553,8 @@ si_audio_adapter_enable_active (WpSessionItem *si, WpTransition *transition)
return;
}
if (!(wp_object_get_active_features (WP_OBJECT (self->node))
& WP_PIPEWIRE_OBJECT_FEATURES_MINIMAL)) {
if (!(wp_object_test_active_features (WP_OBJECT (self->node),
WP_PIPEWIRE_OBJECT_FEATURES_MINIMAL))) {
wp_transition_return_error (transition,
g_error_new (WP_DOMAIN_LIBRARY, WP_LIBRARY_ERROR_INVARIANT,
"si-audio-adapter: node minimal feature not enabled"));
@ -634,7 +634,6 @@ si_audio_adapter_set_ports_format (WpSiAdapter * item, WpSpaPod *f,
WpSiAudioAdapter *self = WP_SI_AUDIO_ADAPTER (item);
g_autoptr (WpSpaPod) format = f;
g_autoptr (GTask) task = g_task_new (self, NULL, callback, data);
guint32 active = 0;
/* cancel previous task if any */
if (self->format_task) {
@ -655,8 +654,8 @@ si_audio_adapter_set_ports_format (WpSiAdapter * item, WpSpaPod *f,
}
/* make sure the node has WP_NODE_FEATURE_PORTS */
active = wp_object_get_active_features (WP_OBJECT (self->node));
if (G_UNLIKELY (!(active & WP_NODE_FEATURE_PORTS))) {
if (G_UNLIKELY (!(wp_object_test_active_features (WP_OBJECT (self->node),
WP_NODE_FEATURE_PORTS)))) {
g_task_return_new_error (task, WP_DOMAIN_LIBRARY,
WP_LIBRARY_ERROR_OPERATION_FAILED,
"node feature ports is not enabled, aborting set format operation");

View file

@ -84,8 +84,8 @@ get_and_validate_item (WpProperties * props, const gchar *key)
str = wp_properties_get (props, key);
if (!str || sscanf(str, "%p", &res) != 1 || !WP_IS_SI_LINKABLE (res) ||
!(wp_object_get_active_features (WP_OBJECT (res)) &
WP_SESSION_ITEM_FEATURE_ACTIVE))
!(wp_object_test_active_features (WP_OBJECT (res),
WP_SESSION_ITEM_FEATURE_ACTIVE)))
return NULL;
return res;