This way we don't have to pull in net/if.h into format-util.h.
This is supposed to address https://github.com/systemd/systemd/pull/32212#discussion_r1755639881
No actual code changes, just a .c/.h file split-up.
--- /dev/null
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
+
+#include "format-ifname.h"
+#include "string-util.h"
+
+assert_cc(STRLEN("%") + DECIMAL_STR_MAX(int) <= IF_NAMESIZE);
+
+int format_ifname_full(int ifindex, FormatIfnameFlag flag, char buf[static IF_NAMESIZE]) {
+ if (ifindex <= 0)
+ return -EINVAL;
+
+ if (if_indextoname(ifindex, buf))
+ return 0;
+
+ if (!FLAGS_SET(flag, FORMAT_IFNAME_IFINDEX))
+ return -errno;
+
+ if (FLAGS_SET(flag, FORMAT_IFNAME_IFINDEX_WITH_PERCENT))
+ assert_se(snprintf_ok(buf, IF_NAMESIZE, "%%%d", ifindex));
+ else
+ assert_se(snprintf_ok(buf, IF_NAMESIZE, "%d", ifindex));
+
+ return 0;
+}
+
+int format_ifname_full_alloc(int ifindex, FormatIfnameFlag flag, char **ret) {
+ char buf[IF_NAMESIZE];
+ int r;
+
+ assert(ret);
+
+ r = format_ifname_full(ifindex, flag, buf);
+ if (r < 0)
+ return r;
+
+ return strdup_to(ret, buf);
+}
--- /dev/null
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
+#pragma once
+
+#include <net/if.h>
+
+typedef enum {
+ FORMAT_IFNAME_IFINDEX = 1 << 0,
+ FORMAT_IFNAME_IFINDEX_WITH_PERCENT = (1 << 1) | FORMAT_IFNAME_IFINDEX,
+} FormatIfnameFlag;
+
+int format_ifname_full(int ifindex, FormatIfnameFlag flag, char buf[static IF_NAMESIZE]);
+int format_ifname_full_alloc(int ifindex, FormatIfnameFlag flag, char **ret);
+
+static inline int format_ifname(int ifindex, char buf[static IF_NAMESIZE]) {
+ return format_ifname_full(ifindex, 0, buf);
+}
+static inline int format_ifname_alloc(int ifindex, char **ret) {
+ return format_ifname_full_alloc(ifindex, 0, ret);
+}
+
+static inline char* _format_ifname_full(int ifindex, FormatIfnameFlag flag, char buf[static IF_NAMESIZE]) {
+ (void) format_ifname_full(ifindex, flag, buf);
+ return buf;
+}
+
+#define FORMAT_IFNAME_FULL(index, flag) _format_ifname_full(index, flag, (char[IF_NAMESIZE]){})
+#define FORMAT_IFNAME(index) _format_ifname_full(index, 0, (char[IF_NAMESIZE]){})
#include "stdio-util.h"
#include "strxcpyx.h"
-assert_cc(STRLEN("%") + DECIMAL_STR_MAX(int) <= IF_NAMESIZE);
-int format_ifname_full(int ifindex, FormatIfnameFlag flag, char buf[static IF_NAMESIZE]) {
- if (ifindex <= 0)
- return -EINVAL;
-
- if (if_indextoname(ifindex, buf))
- return 0;
-
- if (!FLAGS_SET(flag, FORMAT_IFNAME_IFINDEX))
- return -errno;
-
- if (FLAGS_SET(flag, FORMAT_IFNAME_IFINDEX_WITH_PERCENT))
- assert(snprintf_ok(buf, IF_NAMESIZE, "%%%d", ifindex));
- else
- assert(snprintf_ok(buf, IF_NAMESIZE, "%d", ifindex));
-
- return 0;
-}
-
-int format_ifname_full_alloc(int ifindex, FormatIfnameFlag flag, char **ret) {
- char buf[IF_NAMESIZE];
- int r;
-
- assert(ret);
-
- r = format_ifname_full(ifindex, flag, buf);
- if (r < 0)
- return r;
-
- return strdup_to(ret, buf);
-}
-
char* format_bytes_full(char *buf, size_t l, uint64_t t, FormatBytesFlag flag) {
typedef struct {
const char *suffix;
#pragma once
#include <inttypes.h>
-#include <net/if.h>
#include <stdbool.h>
#include "cgroup-util.h"
# error Unknown ino_t size
#endif
-typedef enum {
- FORMAT_IFNAME_IFINDEX = 1 << 0,
- FORMAT_IFNAME_IFINDEX_WITH_PERCENT = (1 << 1) | FORMAT_IFNAME_IFINDEX,
-} FormatIfnameFlag;
-
-int format_ifname_full(int ifindex, FormatIfnameFlag flag, char buf[static IF_NAMESIZE]);
-int format_ifname_full_alloc(int ifindex, FormatIfnameFlag flag, char **ret);
-
-static inline int format_ifname(int ifindex, char buf[static IF_NAMESIZE]) {
- return format_ifname_full(ifindex, 0, buf);
-}
-static inline int format_ifname_alloc(int ifindex, char **ret) {
- return format_ifname_full_alloc(ifindex, 0, ret);
-}
-
-static inline char* _format_ifname_full(int ifindex, FormatIfnameFlag flag, char buf[static IF_NAMESIZE]) {
- (void) format_ifname_full(ifindex, flag, buf);
- return buf;
-}
-
-#define FORMAT_IFNAME_FULL(index, flag) _format_ifname_full(index, flag, (char[IF_NAMESIZE]){})
-#define FORMAT_IFNAME(index) _format_ifname_full(index, 0, (char[IF_NAMESIZE]){})
-
typedef enum {
FORMAT_BYTES_USE_IEC = 1 << 0,
FORMAT_BYTES_BELOW_POINT = 1 << 1,
'fd-util.c',
'fileio.c',
'filesystems.c',
+ 'format-ifname.c',
'format-util.c',
'fs-util.c',
'gcrypt-util.c',
#include "escape.h"
#include "fd-util.h"
#include "fileio.h"
-#include "format-util.h"
+#include "format-ifname.h"
#include "io-util.h"
#include "log.h"
#include "memory-util.h"
/* SPDX-License-Identifier: LGPL-2.1-or-later */
#include "env-util.h"
-#include "format-util.h"
+#include "format-ifname.h"
#include "network-common.h"
#include "socket-util.h"
#include "unaligned.h"
#include "edit-util.h"
#include "env-util.h"
#include "fd-util.h"
+#include "format-ifname.h"
#include "format-table.h"
#include "hostname-util.h"
#include "import-util.h"
/* SPDX-License-Identifier: LGPL-2.1-or-later */
-#include "format-util.h"
+#include "format-ifname.h"
#include "in-addr-util.h"
#include "local-addresses.h"
#include "networkctl-dump-util.h"
#include "bus-error.h"
#include "bus-locator.h"
#include "fd-util.h"
-#include "format-util.h"
+#include "format-ifname.h"
#include "netlink-util.h"
#include "networkctl.h"
#include "networkctl-misc.h"
#include "event-util.h"
#include "fd-util.h"
#include "fileio.h"
-#include "format-util.h"
+#include "format-ifname.h"
#include "fs-util.h"
#include "glyph-util.h"
#include "logarithm.h"
#include "sd-network.h"
#include "alloc-util.h"
-#include "format-util.h"
+#include "format-ifname.h"
#include "hashmap.h"
#include "link.h"
#include "manager.h"
#include <fcntl.h>
#include <linux/nsfs.h>
#include <linux/veth.h>
+#include <net/if.h>
#include <sys/eventfd.h>
#include <sys/stat.h>
#include <sys/wait.h>
#include "dns-domain.h"
#include "errno-list.h"
#include "escape.h"
+#include "format-ifname.h"
#include "format-table.h"
-#include "format-util.h"
#include "gcrypt-util.h"
#include "hostname-util.h"
#include "json-util.h"
#include "af-list.h"
#include "alloc-util.h"
#include "dns-domain.h"
-#include "format-util.h"
+#include "format-ifname.h"
#include "resolved-dns-answer.h"
#include "resolved-dns-cache.h"
#include "resolved-dns-packet.h"
#include "devnum-util.h"
#include "fd-util.h"
#include "fileio.h"
+#include "format-ifname.h"
#include "format-table.h"
#include "format-util.h"
#include "fs-util.h"
#include "dlfcn-util.h"
#include "env-util.h"
#include "errno-list.h"
-#include "format-util.h"
+#include "format-ifname.h"
#include "hexdecoct.h"
#include "hostname-util.h"
#include "in-addr-util.h"