#ifdef HAVE_IF_INDEXTONAME
# include "xstring.h"
-# define INI_PFX "if_nametoindex("
-# define INI_SFX ")"
+# define INI_PFX "if_nametoindex(\""
+# define INI_SFX "\")"
# define IFNAME_QUOTED_SZ (sizeof(IFNAMSIZ) * 4 + 3)
-static const char *
+const char *
get_ifname(const unsigned int ifindex)
{
- static char res[IFNAME_QUOTED_SZ + sizeof(INI_PFX INI_SFX)];
-
+ static char name_quoted_buf[IFNAME_QUOTED_SZ];
char name_buf[IFNAMSIZ];
- char name_quoted_buf[IFNAME_QUOTED_SZ];
- if (if_indextoname(ifindex, name_buf)) {
- if (string_quote(name_buf, name_quoted_buf, sizeof(name_buf),
- QUOTE_0_TERMINATED, NULL))
- return NULL;
+ if (!if_indextoname(ifindex, name_buf))
+ return NULL;
+
+ if (string_quote(name_buf, name_quoted_buf, sizeof(name_buf),
+ QUOTE_0_TERMINATED | QUOTE_OMIT_LEADING_TRAILING_QUOTES,
+ NULL))
+ return NULL;
+
+ return name_quoted_buf;
+}
+
+static const char *
+sprint_ifname(const unsigned int ifindex)
+{
+ static char res[IFNAME_QUOTED_SZ + sizeof(INI_PFX INI_SFX)];
+
+ const char *name_quoted = get_ifname(ifindex);
- xsprintf(res, INI_PFX "%s" INI_SFX, name_quoted_buf);
+ if (!name_quoted)
+ return NULL;
- return res;
- }
+ xsprintf(res, INI_PFX "%s" INI_SFX, name_quoted);
- return NULL;
+ return res;
}
+
+#else /* !HAVE_IF_INDEXTONAME */
+
+const char *get_ifname(const unsigned int ifindex) { return NULL; }
+
#endif /* HAVE_IF_INDEXTONAME */
void
print_ifindex(const unsigned int ifindex)
{
#ifdef HAVE_IF_INDEXTONAME
- print_xlat_ex(ifindex, get_ifname(ifindex), XLAT_STYLE_FMT_U);
+ print_xlat_ex(ifindex, sprint_ifname(ifindex), XLAT_STYLE_FMT_U);
#else
tprintf("%u", ifindex);
#endif