sd-dhcp-client: use free_and_strdup
authorZbigniew Jędrzejewski-Szmek <zbyszek@in.waw.pl>
Sat, 19 Nov 2016 17:53:29 +0000 (12:53 -0500)
committerLennart Poettering <lennart@poettering.net>
Mon, 21 Nov 2016 22:01:02 +0000 (23:01 +0100)
This changes the return value a bit: 1 will be returned if the value is
changed. But the return value was not documented, and the change should
be for the good anyway. Current callers don't care.

src/libsystemd-network/sd-dhcp-client.c

index 9716168..1423264 100644 (file)
@@ -386,49 +386,23 @@ int sd_dhcp_client_set_hostname(
                 sd_dhcp_client *client,
                 const char *hostname) {
 
-        char *new_hostname = NULL;
-
         assert_return(client, -EINVAL);
 
-        if (!hostname) {
-                client->hostname = mfree(client->hostname);
-                return 0;
-        }
-
         /* Refuse hostnames that neither qualify as DNS nor as Linux hosntames */
-        if (!hostname_is_valid(hostname, false) && !dns_name_is_valid(hostname))
+        if (hostname &&
+            !(hostname_is_valid(hostname, false) || dns_name_is_valid(hostname) > 0))
                 return -EINVAL;
 
-        if (streq_ptr(client->hostname, hostname))
-                return 0;
-
-        new_hostname = strdup(hostname);
-        if (!new_hostname)
-                return -ENOMEM;
-
-        free(client->hostname);
-        client->hostname = new_hostname;
-
-        return 0;
+        return free_and_strdup(&client->hostname, hostname);
 }
 
 int sd_dhcp_client_set_vendor_class_identifier(
                 sd_dhcp_client *client,
                 const char *vci) {
 
-        char *new_vci = NULL;
-
         assert_return(client, -EINVAL);
 
-        new_vci = strdup(vci);
-        if (!new_vci)
-                return -ENOMEM;
-
-        free(client->vendor_class_identifier);
-
-        client->vendor_class_identifier = new_vci;
-
-        return 0;
+        return free_and_strdup(&client->vendor_class_identifier, vci);
 }
 
 int sd_dhcp_client_set_client_port(