summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSimon McVittie <smcv@collabora.com>2018-07-23 17:33:24 +0100
committerSimon McVittie <smcv@collabora.com>2018-08-02 15:26:27 +0100
commit46cdc12830c413a80ca13b1fae0a7dc1f8ced263 (patch)
tree8afa4c3641894b9c6aeaaf49ed60684b0c4f2fc2
parent7efc06293ab8a6bf4aba50dac0da55e4a583360a (diff)
downloaddbus-46cdc12830c413a80ca13b1fae0a7dc1f8ced263.tar.gz
Add and use _dbus_list_clear_full
In gcc 8, -Wall -Wextra includes -Wcast-function-type, which warns about passing an extra (unwanted) parameter to callbacks. Instead of using _dbus_list_foreach(), add a function to do what we actually wanted here. Signed-off-by: Simon McVittie <smcv@collabora.com> Bug: https://bugs.freedesktop.org/show_bug.cgi?id=107349 Reviewed-by: Thiago Macieira <thiago@kde.org>
-rw-r--r--bus/activation.c10
-rw-r--r--bus/config-parser-trivial.c8
-rw-r--r--bus/config-parser.c40
-rw-r--r--dbus/dbus-connection.c18
-rw-r--r--dbus/dbus-list.c27
-rw-r--r--dbus/dbus-list.h3
-rw-r--r--dbus/dbus-message.c6
-rw-r--r--dbus/dbus-shell.c15
-rw-r--r--dbus/dbus-sysdeps.c3
-rw-r--r--dbus/dbus-timeout.c6
-rw-r--r--dbus/dbus-watch.c7
11 files changed, 62 insertions, 81 deletions
diff --git a/bus/activation.c b/bus/activation.c
index 62058851..8f17711e 100644
--- a/bus/activation.c
+++ b/bus/activation.c
@@ -914,9 +914,8 @@ bus_activation_reload (BusActivation *activation,
goto failed;
}
- _dbus_list_foreach (&activation->directories,
- (DBusForeachFunction) bus_service_directory_unref, NULL);
- _dbus_list_clear (&activation->directories);
+ _dbus_list_clear_full (&activation->directories,
+ (DBusFreeFunction) bus_service_directory_unref);
link = _dbus_list_get_first_link (directories);
while (link != NULL)
@@ -1063,9 +1062,8 @@ bus_activation_unref (BusActivation *activation)
if (activation->pending_activations)
_dbus_hash_table_unref (activation->pending_activations);
- _dbus_list_foreach (&activation->directories,
- (DBusForeachFunction) bus_service_directory_unref, NULL);
- _dbus_list_clear (&activation->directories);
+ _dbus_list_clear_full (&activation->directories,
+ (DBusFreeFunction) bus_service_directory_unref);
if (activation->environment)
_dbus_hash_table_unref (activation->environment);
diff --git a/bus/config-parser-trivial.c b/bus/config-parser-trivial.c
index 0351d20a..796c25e5 100644
--- a/bus/config-parser-trivial.c
+++ b/bus/config-parser-trivial.c
@@ -122,13 +122,7 @@ bus_config_parser_unref (BusConfigParser *parser)
_dbus_string_free (&parser->user);
_dbus_string_free (&parser->service_helper);
_dbus_string_free (&parser->bus_type);
-
- _dbus_list_foreach (&parser->service_dirs,
- (DBusForeachFunction) dbus_free,
- NULL);
-
- _dbus_list_clear (&parser->service_dirs);
-
+ _dbus_list_clear_full (&parser->service_dirs, dbus_free);
dbus_free (parser);
}
diff --git a/bus/config-parser.c b/bus/config-parser.c
index f49ab1dc..4343b512 100644
--- a/bus/config-parser.c
+++ b/bus/config-parser.c
@@ -585,31 +585,13 @@ bus_config_parser_unref (BusConfigParser *parser)
dbus_free (parser->servicehelper);
dbus_free (parser->bus_type);
dbus_free (parser->pidfile);
-
- _dbus_list_foreach (&parser->listen_on,
- (DBusForeachFunction) dbus_free,
- NULL);
-
- _dbus_list_clear (&parser->listen_on);
-
- _dbus_list_foreach (&parser->service_dirs,
- (DBusForeachFunction) bus_config_service_dir_free,
- NULL);
-
- _dbus_list_clear (&parser->service_dirs);
- _dbus_list_foreach (&parser->conf_dirs,
- (DBusForeachFunction) dbus_free,
- NULL);
+ _dbus_list_clear_full (&parser->listen_on, dbus_free);
+ _dbus_list_clear_full (&parser->service_dirs,
+ (DBusFreeFunction) bus_config_service_dir_free);
+ _dbus_list_clear_full (&parser->conf_dirs, dbus_free);
+ _dbus_list_clear_full (&parser->mechanisms, dbus_free);
- _dbus_list_clear (&parser->conf_dirs);
-
- _dbus_list_foreach (&parser->mechanisms,
- (DBusForeachFunction) dbus_free,
- NULL);
-
- _dbus_list_clear (&parser->mechanisms);
-
_dbus_string_free (&parser->basedir);
if (parser->policy)
@@ -929,9 +911,7 @@ start_busconfig_child (BusConfigParser *parser,
BUS_SERVICE_DIR_FLAGS_STRICT_NAMING))
{
BUS_SET_OOM (error);
- _dbus_list_foreach (&dirs, (DBusForeachFunction) dbus_free,
- NULL);
- _dbus_list_clear (&dirs);
+ _dbus_list_clear_full (&dirs, dbus_free);
return FALSE;
}
}
@@ -958,9 +938,7 @@ start_busconfig_child (BusConfigParser *parser,
BUS_SERVICE_DIR_FLAGS_NONE))
{
BUS_SET_OOM (error);
- _dbus_list_foreach (&dirs, (DBusForeachFunction) dbus_free,
- NULL);
- _dbus_list_clear (&dirs);
+ _dbus_list_clear_full (&dirs, dbus_free);
return FALSE;
}
@@ -996,9 +974,7 @@ start_busconfig_child (BusConfigParser *parser,
BUS_SERVICE_DIR_FLAGS_NONE))
{
BUS_SET_OOM (error);
- _dbus_list_foreach (&dirs, (DBusForeachFunction) dbus_free,
- NULL);
- _dbus_list_clear (&dirs);
+ _dbus_list_clear_full (&dirs, dbus_free);
return FALSE;
}
diff --git a/dbus/dbus-connection.c b/dbus/dbus-connection.c
index b097cc6e..8a5829a8 100644
--- a/dbus/dbus-connection.c
+++ b/dbus/dbus-connection.c
@@ -2760,16 +2760,14 @@ _dbus_connection_last_unref (DBusConnection *connection)
_dbus_hash_table_unref (connection->pending_replies);
connection->pending_replies = NULL;
-
+
_dbus_list_foreach (&connection->outgoing_messages,
free_outgoing_message,
connection);
_dbus_list_clear (&connection->outgoing_messages);
-
- _dbus_list_foreach (&connection->incoming_messages,
- (DBusForeachFunction) dbus_message_unref,
- NULL);
- _dbus_list_clear (&connection->incoming_messages);
+
+ _dbus_list_clear_full (&connection->incoming_messages,
+ (DBusFreeFunction) dbus_message_unref);
_dbus_counter_unref (connection->outgoing_counter);
@@ -4709,11 +4707,9 @@ dbus_connection_dispatch (DBusConnection *connection)
link = next;
}
- _dbus_list_foreach (&filter_list_copy,
- (DBusForeachFunction)_dbus_message_filter_unref,
- NULL);
- _dbus_list_clear (&filter_list_copy);
-
+ _dbus_list_clear_full (&filter_list_copy,
+ (DBusFreeFunction) _dbus_message_filter_unref);
+
CONNECTION_LOCK (connection);
if (result == DBUS_HANDLER_RESULT_NEED_MEMORY)
diff --git a/dbus/dbus-list.c b/dbus/dbus-list.c
index aa556040..8104aa5e 100644
--- a/dbus/dbus-list.c
+++ b/dbus/dbus-list.c
@@ -558,6 +558,33 @@ _dbus_list_clear (DBusList **list)
}
/**
+ * Free every link and every element in the list.
+ *
+ * @param list address of the head of the list.
+ * @param function free-function to call for each element.
+ *
+ */
+void
+_dbus_list_clear_full (DBusList **list,
+ DBusFreeFunction function)
+{
+ DBusList *link;
+
+ link = *list;
+ while (link != NULL)
+ {
+ DBusList *next = _dbus_list_get_next_link (list, link);
+
+ function (link->data);
+ free_link (link);
+
+ link = next;
+ }
+
+ *list = NULL;
+}
+
+/**
* Gets the first link in the list.
* This is a constant-time operation.
*
diff --git a/dbus/dbus-list.h b/dbus/dbus-list.h
index 9350a0da..57a72eb8 100644
--- a/dbus/dbus-list.h
+++ b/dbus/dbus-list.h
@@ -73,6 +73,9 @@ DBusList* _dbus_list_find_last (DBusList **list,
DBUS_PRIVATE_EXPORT
void _dbus_list_clear (DBusList **list);
DBUS_PRIVATE_EXPORT
+void _dbus_list_clear_full (DBusList **list,
+ DBusFreeFunction function);
+DBUS_PRIVATE_EXPORT
DBusList* _dbus_list_get_first_link (DBusList **list);
DBUS_PRIVATE_EXPORT
DBusList* _dbus_list_get_last_link (DBusList **list);
diff --git a/dbus/dbus-message.c b/dbus/dbus-message.c
index d9e5bb90..e43c4b3a 100644
--- a/dbus/dbus-message.c
+++ b/dbus/dbus-message.c
@@ -4218,10 +4218,8 @@ _dbus_message_loader_unref (DBusMessageLoader *loader)
close_unix_fds(loader->unix_fds, &loader->n_unix_fds);
dbus_free(loader->unix_fds);
#endif
- _dbus_list_foreach (&loader->messages,
- (DBusForeachFunction) dbus_message_unref,
- NULL);
- _dbus_list_clear (&loader->messages);
+ _dbus_list_clear_full (&loader->messages,
+ (DBusFreeFunction) dbus_message_unref);
_dbus_string_free (&loader->data);
dbus_free (loader);
}
diff --git a/dbus/dbus-shell.c b/dbus/dbus-shell.c
index 44cbbcf3..fb00523f 100644
--- a/dbus/dbus-shell.c
+++ b/dbus/dbus-shell.c
@@ -523,12 +523,7 @@ tokenize_command_line (const char *command_line, DBusError *error)
_dbus_string_free (&current_token);
init_error:
- if (retval)
- {
- _dbus_list_foreach (&retval, (DBusForeachFunction) dbus_free, NULL);
- _dbus_list_clear (&retval);
- }
-
+ _dbus_list_clear_full (&retval, dbus_free);
return NULL;
}
@@ -618,9 +613,8 @@ _dbus_shell_parse_argv (const char *command_line,
++i;
}
argv[argc] = NULL;
-
- _dbus_list_foreach (&tokens, (DBusForeachFunction) dbus_free, NULL);
- _dbus_list_clear (&tokens);
+
+ _dbus_list_clear_full (&tokens, dbus_free);
if (argcp)
*argcp = argc;
@@ -633,8 +627,7 @@ _dbus_shell_parse_argv (const char *command_line,
return TRUE;
error:
- _dbus_list_foreach (&tokens, (DBusForeachFunction) dbus_free, NULL);
- _dbus_list_clear (&tokens);
+ _dbus_list_clear_full (&tokens, dbus_free);
return FALSE;
diff --git a/dbus/dbus-sysdeps.c b/dbus/dbus-sysdeps.c
index d9fd13a9..72496e05 100644
--- a/dbus/dbus-sysdeps.c
+++ b/dbus/dbus-sysdeps.c
@@ -341,8 +341,7 @@ _dbus_split_paths_and_append (DBusString *dirs,
return TRUE;
oom:
- _dbus_list_foreach (dir_list, (DBusForeachFunction)dbus_free, NULL);
- _dbus_list_clear (dir_list);
+ _dbus_list_clear_full (dir_list, dbus_free);
return FALSE;
}
diff --git a/dbus/dbus-timeout.c b/dbus/dbus-timeout.c
index 23ca6e44..4c658464 100644
--- a/dbus/dbus-timeout.c
+++ b/dbus/dbus-timeout.c
@@ -218,10 +218,8 @@ _dbus_timeout_list_free (DBusTimeoutList *timeout_list)
_dbus_timeout_list_set_functions (timeout_list,
NULL, NULL, NULL, NULL, NULL);
- _dbus_list_foreach (&timeout_list->timeouts,
- (DBusForeachFunction) _dbus_timeout_unref,
- NULL);
- _dbus_list_clear (&timeout_list->timeouts);
+ _dbus_list_clear_full (&timeout_list->timeouts,
+ (DBusFreeFunction) _dbus_timeout_unref);
dbus_free (timeout_list);
}
diff --git a/dbus/dbus-watch.c b/dbus/dbus-watch.c
index 98422968..78376efc 100644
--- a/dbus/dbus-watch.c
+++ b/dbus/dbus-watch.c
@@ -251,10 +251,9 @@ _dbus_watch_list_free (DBusWatchList *watch_list)
/* free watch_data and removes watches as a side effect */
_dbus_watch_list_set_functions (watch_list,
NULL, NULL, NULL, NULL, NULL);
- _dbus_list_foreach (&watch_list->watches,
- (DBusForeachFunction) _dbus_watch_unref,
- NULL);
- _dbus_list_clear (&watch_list->watches);
+
+ _dbus_list_clear_full (&watch_list->watches,
+ (DBusFreeFunction) _dbus_watch_unref);
dbus_free (watch_list);
}