}
}
+static int serialize_config_files(FILE *f, const char *prefix, const char *main_config, char * const *dropins) {
+ assert(f);
+ assert(prefix);
+ assert(main_config);
+
+ fprintf(f, "%s_FILE=%s\n", prefix, main_config);
+
+ bool space = false;
+
+ fprintf(f, "%s_FILE_DROPINS=\"", prefix);
+ STRV_FOREACH(d, dropins) {
+ _cleanup_free_ char *escaped = NULL;
+
+ escaped = xescape(*d, ":");
+ if (!escaped)
+ return -ENOMEM;
+
+ fputs_with_separator(f, escaped, ":", &space);
+ }
+ fputs("\"\n", f);
+
+ return 0;
+}
+
static int link_save(Link *link) {
const char *admin_state, *oper_state, *carrier_state, *address_state, *ipv4_address_state, *ipv6_address_state;
_cleanup_(unlink_and_freep) char *temp_path = NULL;
fprintf(f, "ACTIVATION_POLICY=%s\n",
activation_policy_to_string(link->network->activation_policy));
- fprintf(f, "NETWORK_FILE=%s\n", link->network->filename);
-
- fputs("NETWORK_FILE_DROPINS=\"", f);
- STRV_FOREACH(d, link->network->dropins) {
- _cleanup_free_ char *escaped = NULL;
-
- escaped = xescape(*d, ":");
- if (!escaped)
- return -ENOMEM;
+ r = serialize_config_files(f, "NETWORK", link->network->filename, link->network->dropins);
+ if (r < 0)
+ return r;
- fputs_with_separator(f, escaped, ":", &space);
+ if (link->netdev) {
+ r = serialize_config_files(f, "NETDEV", link->netdev->filename, link->netdev->dropins);
+ if (r < 0)
+ return r;
}
- fputs("\"\n", f);
/************************************************************/
if (!set_isempty(nta_anchors)) {
const char *n;
- fputs("DNSSEC_NTA=", f);
space = false;
+
+ fputs("DNSSEC_NTA=", f);
SET_FOREACH(n, nta_anchors)
fputs_with_separator(f, n, NULL, &space);
fputc('\n', f);
if (r < 0)
return r;
- fprintf(f,
- "DHCP_LEASE=%s\n",
- link->lease_file);
+ fprintf(f, "DHCP_LEASE=%s\n", link->lease_file);
} else
(void) unlink(link->lease_file);