core: add nm_utils_enum2str()
This commit is contained in:
@@ -1880,6 +1880,45 @@ nm_utils_flags2str (const NMUtilsFlags2StrDesc *descs,
|
|||||||
|
|
||||||
/*****************************************************************************/
|
/*****************************************************************************/
|
||||||
|
|
||||||
|
const char *
|
||||||
|
nm_utils_enum2str (const NMUtilsEnum2StrDesc *descs,
|
||||||
|
gsize n_descs,
|
||||||
|
int val,
|
||||||
|
char *buf,
|
||||||
|
gsize len)
|
||||||
|
{
|
||||||
|
gsize i;
|
||||||
|
|
||||||
|
#if NM_MORE_ASSERTS > 10
|
||||||
|
nm_assert (descs);
|
||||||
|
nm_assert (n_descs > 0);
|
||||||
|
for (i = 0; i < n_descs; i++) {
|
||||||
|
gsize j;
|
||||||
|
|
||||||
|
nm_assert (descs[i].name && descs[i].name[0]);
|
||||||
|
for (j = 0; j < i; j++)
|
||||||
|
nm_assert (descs[j].value != descs[i].value);
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
nm_utils_to_string_buffer_init (&buf, &len);
|
||||||
|
|
||||||
|
if (!len)
|
||||||
|
return buf;
|
||||||
|
|
||||||
|
for (i = 0; i < n_descs; i++) {
|
||||||
|
if (val == descs[i].value) {
|
||||||
|
g_strlcpy (buf, descs[i].name, len);
|
||||||
|
return buf;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
g_snprintf (buf, len, "(%d)", val);
|
||||||
|
return buf;
|
||||||
|
};
|
||||||
|
|
||||||
|
/*****************************************************************************/
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* nm_utils_get_shared_wifi_permission:
|
* nm_utils_get_shared_wifi_permission:
|
||||||
* @connection: the NMConnection to lookup the permission.
|
* @connection: the NMConnection to lookup the permission.
|
||||||
|
@@ -229,6 +229,37 @@ const char *nm_utils_flags2str (const NMUtilsFlags2StrDesc *descs,
|
|||||||
|
|
||||||
/*****************************************************************************/
|
/*****************************************************************************/
|
||||||
|
|
||||||
|
typedef struct {
|
||||||
|
int value;
|
||||||
|
const char *name;
|
||||||
|
} NMUtilsEnum2StrDesc;
|
||||||
|
|
||||||
|
#define NM_UTILS_ENUM2STR(v, n) { .value = v, .name = ""n, }
|
||||||
|
|
||||||
|
#define _NM_UTILS_ENUM2STR_DEFINE(scope, fcn_name, enum_type, ...) \
|
||||||
|
scope const char * \
|
||||||
|
fcn_name (enum_type val, char *buf, gsize len) \
|
||||||
|
{ \
|
||||||
|
static const NMUtilsEnum2StrDesc descs[] = { \
|
||||||
|
__VA_ARGS__ \
|
||||||
|
}; \
|
||||||
|
G_STATIC_ASSERT (sizeof (enum_type) <= sizeof (int)); \
|
||||||
|
return nm_utils_enum2str (descs, G_N_ELEMENTS (descs), val, buf, len); \
|
||||||
|
}
|
||||||
|
|
||||||
|
#define NM_UTILS_ENUM2STR_DEFINE(fcn_name, enum_type, ...) \
|
||||||
|
_NM_UTILS_ENUM2STR_DEFINE (, fcn_name, enum_type, __VA_ARGS__)
|
||||||
|
#define NM_UTILS_ENUM2STR_DEFINE_STATIC(fcn_name, enum_type, ...) \
|
||||||
|
_NM_UTILS_ENUM2STR_DEFINE (static, fcn_name, enum_type, __VA_ARGS__)
|
||||||
|
|
||||||
|
const char *nm_utils_enum2str (const NMUtilsEnum2StrDesc *descs,
|
||||||
|
gsize n_descs,
|
||||||
|
int val,
|
||||||
|
char *buf,
|
||||||
|
gsize len);
|
||||||
|
|
||||||
|
/*****************************************************************************/
|
||||||
|
|
||||||
#define _NM_UTILS_STRING_LOOKUP_TABLE_DEFINE(scope, fcn_name, lookup_type, unknown_val, ...) \
|
#define _NM_UTILS_STRING_LOOKUP_TABLE_DEFINE(scope, fcn_name, lookup_type, unknown_val, ...) \
|
||||||
scope const char * \
|
scope const char * \
|
||||||
fcn_name (lookup_type idx) \
|
fcn_name (lookup_type idx) \
|
||||||
|
Reference in New Issue
Block a user