summaryrefslogtreecommitdiff
path: root/src/resolve/resolved-util.c
blob: 2f18f8c19d682c6062bb24e2c77807cae67a03b6 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
/* SPDX-License-Identifier: LGPL-2.1+ */

#include "alloc-util.h"
#include "in-addr-util.h"
#include "macro.h"
#include "resolved-util.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;
}