]> git.ipfire.org Git - thirdparty/dbus.git/commitdiff
Add and use _dbus_list_clear_full
authorSimon McVittie <smcv@collabora.com>
Mon, 23 Jul 2018 16:33:24 +0000 (17:33 +0100)
committerSimon McVittie <smcv@collabora.com>
Thu, 2 Aug 2018 14:26:27 +0000 (15:26 +0100)
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>
bus/activation.c
bus/config-parser-trivial.c
bus/config-parser.c
dbus/dbus-connection.c
dbus/dbus-list.c
dbus/dbus-list.h
dbus/dbus-message.c
dbus/dbus-shell.c
dbus/dbus-sysdeps.c
dbus/dbus-timeout.c
dbus/dbus-watch.c

index 6205885179969485af7b92c0c52e18003436dda3..8f17711ee616fcbd6388f6f8d82b05cb87d8cd8c 100644 (file)
@@ -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);
index 0351d20ac2e9da49ce4047268ad652a6b71b6d1a..796c25e5b302a1383ad848929d6e82202e095df3 100644 (file)
@@ -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);
 }
 
index f49ab1dca4f04e1d703da36ff08e432c6217e274..4343b5123b97598555f874cb4b3600ecfad983a0 100644 (file)
@@ -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;
         }
 
index b097cc6e07348f1396bbc81141f6e544f2f7fdff..8a5829a85d426663882040a97df100d91138a7a4 100644 (file)
@@ -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)
index aa556040f840d6226709e4572f953136d1fd0f7b..8104aa5e93dfa31a729784377906b122e0bfca55 100644 (file)
@@ -557,6 +557,33 @@ _dbus_list_clear (DBusList **list)
   *list = NULL;
 }
 
+/**
+ * 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.
index 9350a0daf628f8233451d342bf5a3226e62ef3e4..57a72eb8e47b54c930e67ab0a2fc6250cb683fd9 100644 (file)
@@ -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);
index d9e5bb905d49767a561015709a0066cd22641b53..e43c4b3a5f6b15035fe7ca513c2a91218002b6a7 100644 (file)
@@ -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);
     }
index 44cbbcf37893db44ce152adf1af42ac7a1341423..fb00523f9c6d3480d772a4fed28e8001798629bc 100644 (file)
@@ -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;
 
index d9fd13a90cbe29aa50711e31e0a736b6c9f63cf3..72496e050ec035d49ac65a391e27227d3c10531e 100644 (file)
@@ -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;
 }
 
index 23ca6e44b46bffea32b27cb453682b2f947ff429..4c6584649c1eb2ecdef22251e3d58fbd1a18f848 100644 (file)
@@ -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);
 }
index 9842296812a654dbe97d38b773bd64b7585d7c1d..78376efcc31d6dedc38bf7488675aa6ab5b3633e 100644 (file)
@@ -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);
 }