exported-object: make export_path D-Bus counter 64 bit

An overflow of the 32 bit guint is possible and rather ugly
because the D-Bus path should be unique and not repeat.
Avoid that by extending the counter to 64 bit.
This commit is contained in:
Thomas Haller
2017-01-03 15:28:22 +01:00
parent 32dd257d31
commit 8006045d0d
2 changed files with 8 additions and 6 deletions

View File

@@ -564,7 +564,7 @@ _create_export_path (NMExportedObjectClass *klass)
{
const char *class_export_path, *p;
static GHashTable *prefix_counters;
guint *counter;
guint64 *counter;
class_export_path = klass->export_path;
@@ -575,17 +575,19 @@ _create_export_path (NMExportedObjectClass *klass)
if (G_UNLIKELY (!prefix_counters))
prefix_counters = g_hash_table_new (g_str_hash, g_str_equal);
g_assert (p[1] == 'u');
g_assert (strchr (p + 1, '%') == NULL);
nm_assert (p[1] == 'l');
nm_assert (p[2] == 'l');
nm_assert (p[3] == 'u');
nm_assert (p[4] == '\0');
counter = g_hash_table_lookup (prefix_counters, class_export_path);
if (!counter) {
counter = g_slice_new0 (guint);
counter = g_slice_new0 (guint64);
g_hash_table_insert (prefix_counters, g_strdup (class_export_path), counter);
}
NM_PRAGMA_WARNING_DISABLE("-Wformat-nonliteral")
return g_strdup_printf (class_export_path, (*counter)++);
return g_strdup_printf (class_export_path, (long long unsigned) (*counter)++);
NM_PRAGMA_WARNING_REENABLE
}

View File

@@ -23,7 +23,7 @@
/*****************************************************************************/
#define NM_EXPORT_PATH_NUMBERED(basepath) ""basepath"/%u"
#define NM_EXPORT_PATH_NUMBERED(basepath) ""basepath"/%llu"
char *nm_exported_object_skeletonify_method_name (const char *dbus_method_name);