diff options
Diffstat (limited to 'src/core/settings/nm-settings-utils.h')
-rw-r--r-- | src/core/settings/nm-settings-utils.h | 91 |
1 files changed, 91 insertions, 0 deletions
diff --git a/src/core/settings/nm-settings-utils.h b/src/core/settings/nm-settings-utils.h new file mode 100644 index 0000000000..d3f50ddf79 --- /dev/null +++ b/src/core/settings/nm-settings-utils.h @@ -0,0 +1,91 @@ +/* SPDX-License-Identifier: LGPL-2.1-or-later */ +/* + * Copyright (C) 2019 Red Hat, Inc. + */ + +#ifndef __NM_SETTINGS_UTILS_H__ +#define __NM_SETTINGS_UTILS_H__ + +#include "nm-settings-storage.h" + +/*****************************************************************************/ + +struct timespec; + +const struct timespec * +nm_sett_util_stat_mtime(const char *filename, gboolean do_lstat, struct timespec *out_val); + +/*****************************************************************************/ + +typedef struct { + const char *uuid; + + CList _storage_by_uuid_lst_head; + + char uuid_data[]; +} NMSettUtilStorageByUuidHead; + +typedef struct { + CList _storage_lst_head; + GHashTable *idx_by_filename; + GHashTable *idx_by_uuid; +} NMSettUtilStorages; + +void nm_sett_util_storage_by_uuid_head_destroy(NMSettUtilStorageByUuidHead *sbuh); + +#define NM_SETT_UTIL_STORAGES_INIT(storages, storage_destroy_fcn) \ + { \ + ._storage_lst_head = C_LIST_INIT(((storages)._storage_lst_head)), \ + .idx_by_filename = g_hash_table_new_full(nm_str_hash, \ + g_str_equal, \ + NULL, \ + (GDestroyNotify) storage_destroy_fcn), \ + .idx_by_uuid = \ + g_hash_table_new_full(nm_pstr_hash, \ + nm_pstr_equal, \ + NULL, \ + (GDestroyNotify) nm_sett_util_storage_by_uuid_head_destroy), \ + } + +void nm_sett_util_storages_clear(NMSettUtilStorages *storages); + +#define nm_auto_clear_sett_util_storages nm_auto(nm_sett_util_storages_clear) + +void nm_sett_util_storages_add_take(NMSettUtilStorages *storages, gpointer storage_take_p); + +gpointer nm_sett_util_storages_steal(NMSettUtilStorages *storages, gpointer storage_p); + +/*****************************************************************************/ + +static inline gpointer /* NMSettingsStorage * */ +nm_sett_util_storages_lookup_by_filename(NMSettUtilStorages *storages, const char *filename) +{ + nm_assert(filename); + + return g_hash_table_lookup(storages->idx_by_filename, filename); +} + +static inline NMSettUtilStorageByUuidHead * +nm_sett_util_storages_lookup_by_uuid(NMSettUtilStorages *storages, const char *uuid) +{ + nm_assert(uuid); + + return g_hash_table_lookup(storages->idx_by_uuid, &uuid); +} + +/*****************************************************************************/ + +typedef struct { + GHashTable *idx_by_filename; + const char *allowed_filename; +} NMSettUtilAllowFilenameData; + +#define NM_SETT_UTIL_ALLOW_FILENAME_DATA(_storages, _allowed_filename) \ + (&((NMSettUtilAllowFilenameData){ \ + .idx_by_filename = (_storages)->idx_by_filename, \ + .allowed_filename = (_allowed_filename), \ + })) + +gboolean nm_sett_util_allow_filename_cb(const char *filename, gpointer user_data); + +#endif /* __NM_SETTINGS_UTILS_H__ */ |