#include "hostname-util.h"
#include "log.h"
#include "macro.h"
+#include "memstream-util.h"
#include "netif-naming-scheme.h"
#include "network-generator.h"
#include "parse-util.h"
}
int parse_cmdline_item(const char *key, const char *value, void *data) {
- Context *context = data;
+ Context *context = ASSERT_PTR(data);
assert(key);
- assert(data);
if (streq(key, "ip"))
return parse_cmdline_ip(context, key, value);
}
static int address_dump(Address *address, FILE *f) {
- _cleanup_free_ char *addr = NULL, *peer = NULL;
- int r;
-
- r = in_addr_prefix_to_string(address->family, &address->address, address->prefixlen, &addr);
- if (r < 0)
- return r;
-
- if (in_addr_is_set(address->family, &address->peer)) {
- r = in_addr_to_string(address->family, &address->peer, &peer);
- if (r < 0)
- return r;
- }
-
fprintf(f,
"\n[Address]\n"
"Address=%s\n",
- addr);
-
- if (peer)
- fprintf(f, "Peer=%s\n", peer);
-
+ IN_ADDR_PREFIX_TO_STRING(address->family, &address->address, address->prefixlen));
+ if (in_addr_is_set(address->family, &address->peer))
+ fprintf(f, "Peer=%s\n",
+ IN_ADDR_TO_STRING(address->family, &address->peer));
return 0;
}
static int route_dump(Route *route, FILE *f) {
- _cleanup_free_ char *dest = NULL, *gateway = NULL;
- int r;
-
- if (in_addr_is_set(route->family, &route->dest)) {
- r = in_addr_prefix_to_string(route->family, &route->dest, route->prefixlen, &dest);
- if (r < 0)
- return r;
- }
-
- r = in_addr_to_string(route->family, &route->gateway, &gateway);
- if (r < 0)
- return r;
-
fputs("\n[Route]\n", f);
- if (dest)
- fprintf(f, "Destination=%s\n", dest);
- fprintf(f, "Gateway=%s\n", gateway);
+ if (in_addr_is_set(route->family, &route->dest))
+ fprintf(f, "Destination=%s\n",
+ IN_ADDR_PREFIX_TO_STRING(route->family, &route->dest, route->prefixlen));
+ fprintf(f, "Gateway=%s\n",
+ IN_ADDR_TO_STRING(route->family, &route->gateway));
return 0;
}
}
int network_format(Network *network, char **ret) {
- _cleanup_free_ char *s = NULL;
- size_t sz = 0;
- int r;
+ _cleanup_(memstream_done) MemStream m = {};
+ FILE *f;
assert(network);
assert(ret);
- {
- _cleanup_fclose_ FILE *f = NULL;
-
- f = open_memstream_unlocked(&s, &sz);
- if (!f)
- return -ENOMEM;
-
- network_dump(network, f);
-
- /* Add terminating 0, so that the output buffer is a valid string. */
- fputc('\0', f);
+ f = memstream_init(&m);
+ if (!f)
+ return -ENOMEM;
- r = fflush_and_check(f);
- }
- if (r < 0)
- return r;
+ network_dump(network, f);
- assert(s);
- *ret = TAKE_PTR(s);
- assert(sz > 0);
- return (int) sz - 1;
+ return memstream_finalize(&m, ret, NULL);
}
int netdev_format(NetDev *netdev, char **ret) {
- _cleanup_free_ char *s = NULL;
- size_t sz = 0;
- int r;
+ _cleanup_(memstream_done) MemStream m = {};
+ FILE *f;
assert(netdev);
assert(ret);
- {
- _cleanup_fclose_ FILE *f = NULL;
-
- f = open_memstream_unlocked(&s, &sz);
- if (!f)
- return -ENOMEM;
-
- netdev_dump(netdev, f);
+ f = memstream_init(&m);
+ if (!f)
+ return -ENOMEM;
- /* Add terminating 0, so that the output buffer is a valid string. */
- fputc('\0', f);
+ netdev_dump(netdev, f);
- r = fflush_and_check(f);
- }
- if (r < 0)
- return r;
-
- assert(s);
- *ret = TAKE_PTR(s);
- assert(sz > 0);
- return (int) sz - 1;
+ return memstream_finalize(&m, ret, NULL);
}
int link_format(Link *link, char **ret) {
- _cleanup_free_ char *s = NULL;
- size_t sz = 0;
- int r;
+ _cleanup_(memstream_done) MemStream m = {};
+ FILE *f;
assert(link);
assert(ret);
- {
- _cleanup_fclose_ FILE *f = NULL;
-
- f = open_memstream_unlocked(&s, &sz);
- if (!f)
- return -ENOMEM;
-
- link_dump(link, f);
-
- /* Add terminating 0, so that the output buffer is a valid string. */
- fputc('\0', f);
+ f = memstream_init(&m);
+ if (!f)
+ return -ENOMEM;
- r = fflush_and_check(f);
- }
- if (r < 0)
- return r;
+ link_dump(link, f);
- assert(s);
- *ret = TAKE_PTR(s);
- assert(sz > 0);
- return (int) sz - 1;
+ return memstream_finalize(&m, ret, NULL);
}