| /* SPDX-License-Identifier: LGPL-2.1+ */ |
| |
| #include "alloc-util.h" |
| #include "macro.h" |
| #include "resolved-util.h" |
| #include "socket-netlink.h" |
| |
| int in_addr_ifindex_name_from_string_auto(const char *s, int *family, union in_addr_union *ret, int *ifindex, char **server_name) { |
| _cleanup_free_ char *buf = NULL, *name = NULL; |
| const char *m; |
| int r; |
| |
| assert(s); |
| |
| m = strchr(s, '#'); |
| if (m) { |
| name = strdup(m+1); |
| if (!name) |
| return -ENOMEM; |
| |
| buf = strndup(s, m - s); |
| if (!buf) |
| return -ENOMEM; |
| |
| s = buf; |
| } |
| |
| r = in_addr_ifindex_from_string_auto(s, family, ret, ifindex); |
| if (r < 0) |
| return r; |
| |
| if (server_name) |
| *server_name = TAKE_PTR(name); |
| |
| return r; |
| } |