diff mbox series

[2/3] connection: Change the function signature of 'add_gateway'.

Message ID 20231129045321.1263302-3-gerickson@nuovations.com (mailing list archive)
State Not Applicable, archived
Headers show
Series connection: Refactor 'add_gateway' | expand

Commit Message

Grant Erickson Nov. 29, 2023, 4:53 a.m. UTC
This changes the function signature of 'add_gateway' by migrating the
return type to a double-pointer parameter and changing the return type
to an 'int' for error status.

This allows passing the full range of failure errors to the caller and
allows the caller to pass those errors directly along as their own
return status.
---
 src/connection.c | 30 ++++++++++++++++++------------
 1 file changed, 18 insertions(+), 12 deletions(-)
diff mbox series

Patch

diff --git a/src/connection.c b/src/connection.c
index c51eecde1f97..f137c1b037d0 100644
--- a/src/connection.c
+++ b/src/connection.c
@@ -645,34 +645,36 @@  static int disable_gateway(struct gateway_data *data,
 	return 0;
 }
 
-static struct gateway_data *add_gateway(struct connman_service *service,
+static int add_gateway(struct connman_service *service,
 					int index, const char *gateway,
-					enum connman_ipconfig_type type)
+					enum connman_ipconfig_type type,
+					struct gateway_data **data)
 {
 	g_autofree struct gateway_data *temp_data = NULL;
 	struct gateway_config *config = NULL;
 	struct gateway_data *old;
+	int err = 0;
 
-	if (!service || index < 0 || !gateway || strlen(gateway) == 0)
-		return NULL;
+	if (!service || index < 0 || !gateway || strlen(gateway) == 0 || !data)
+		return -EINVAL;
 
 	switch (type) {
 	case CONNMAN_IPCONFIG_TYPE_IPV4:
 	case CONNMAN_IPCONFIG_TYPE_IPV6:
 		break;
 	default:
-		return NULL;
+		return -EINVAL;
 	}
 
 	temp_data = g_try_new0(struct gateway_data, 1);
 	if (!temp_data)
-		return NULL;
+		return -ENOMEM;
 
 	temp_data->index = index;
 
 	config = g_try_new0(struct gateway_config, 1);
 	if (!config)
-		return NULL;
+		return -ENOMEM;
 
 	config->gateway = g_strdup(gateway);
 	config->vpn_ip = NULL;
@@ -711,7 +713,9 @@  static struct gateway_data *add_gateway(struct connman_service *service,
 	connman_service_ref(temp_data->service);
 	g_hash_table_replace(gateway_hash, service, temp_data);
 
-	return g_steal_pointer(&temp_data);
+	*data = g_steal_pointer(&temp_data);
+
+	return err;
 }
 
 static void set_default_gateway(struct gateway_data *data,
@@ -1204,6 +1208,7 @@  int __connman_connection_gateway_add(struct connman_service *service,
 					connman_service_get_type(service);
 	int index;
 	g_autofree char *interface = NULL;
+	int err = 0;
 
 	DBG("service %p (%s) gateway %p (%s) type %d (%s) peer %p (%s)",
 		service, maybe_null(connman_service_get_identifier(service)),
@@ -1231,9 +1236,9 @@  int __connman_connection_gateway_add(struct connman_service *service,
 	DBG("service %p index %d gateway %s vpn ip %s type %d",
 		service, index, gateway, peer, type);
 
-	new_gateway = add_gateway(service, index, gateway, type);
-	if (!new_gateway)
-		return -EINVAL;
+	err = add_gateway(service, index, gateway, type, &new_gateway);
+	if (err < 0)
+		return err;
 
 	GATEWAY_DATA_DBG("new_gateway", new_gateway);
 
@@ -1308,7 +1313,8 @@  done:
 		__connman_service_ipconfig_indicate_state(service,
 						CONNMAN_SERVICE_STATE_READY,
 						CONNMAN_IPCONFIG_TYPE_IPV6);
-	return 0;
+
+	return err;
 }
 
 /**