/* SPDX-License-Identifier: LGPL-2.1+ */ /* * Copyright (C) 2018 Red Hat, Inc. */ #ifndef __NM_SETTINGS_STORAGE_H__ #define __NM_SETTINGS_STORAGE_H__ /*****************************************************************************/ #include "c-list/src/c-list.h" #define NM_TYPE_SETTINGS_STORAGE (nm_settings_storage_get_type()) #define NM_SETTINGS_STORAGE(obj) \ (G_TYPE_CHECK_INSTANCE_CAST((obj), NM_TYPE_SETTINGS_STORAGE, NMSettingsStorage)) #define NM_SETTINGS_STORAGE_CLASS(klass) \ (G_TYPE_CHECK_CLASS_CAST((klass), NM_TYPE_SETTINGS_STORAGE, NMSettingsStorageClass)) #define NM_IS_SETTINGS_STORAGE(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj), NM_TYPE_SETTINGS_STORAGE)) #define NM_IS_SETTINGS_STORAGE_CLASS(klass) \ (G_TYPE_CHECK_CLASS_TYPE((klass), NM_TYPE_SETTINGS_STORAGE)) #define NM_SETTINGS_STORAGE_GET_CLASS(obj) \ (G_TYPE_INSTANCE_GET_CLASS((obj), NM_TYPE_SETTINGS_STORAGE, NMSettingsStorageClass)) #define NM_SETTINGS_STORAGE_PLUGIN "plugin" #define NM_SETTINGS_STORAGE_UUID "uuid" #define NM_SETTINGS_STORAGE_FILENAME "filename" struct _NMSettingsPlugin; typedef struct NMSettingsStorage { GObject parent; struct _NMSettingsPlugin *_plugin; char * _uuid; char * _filename; CList _storage_lst; CList _storage_by_uuid_lst; } NMSettingsStorage; typedef struct { GObjectClass parent; int (*cmp_fcn)(NMSettingsStorage *a, NMSettingsStorage *b); } NMSettingsStorageClass; GType nm_settings_storage_get_type(void); NMSettingsStorage * nm_settings_storage_new(struct _NMSettingsPlugin *plugin, const char *uuid, const char *filename); static inline struct _NMSettingsPlugin * nm_settings_storage_get_plugin(const NMSettingsStorage *self) { GType nm_settings_plugin_get_type(void); g_return_val_if_fail(NM_IS_SETTINGS_STORAGE(self), NULL); nm_assert(G_TYPE_CHECK_INSTANCE_TYPE(self->_plugin, nm_settings_plugin_get_type())); return self->_plugin; } static inline const char * nm_settings_storage_get_uuid(const NMSettingsStorage *self) { gboolean nm_utils_is_uuid(const char *str); g_return_val_if_fail(NM_IS_SETTINGS_STORAGE(self), NULL); nm_assert(nm_utils_is_uuid(self->_uuid)); return self->_uuid; } static inline const char * nm_settings_storage_get_uuid_opt(const NMSettingsStorage *self) { gboolean nm_utils_is_uuid(const char *str); g_return_val_if_fail(NM_IS_SETTINGS_STORAGE(self), NULL); nm_assert(!self->_uuid || nm_utils_is_uuid(self->_uuid)); return self->_uuid; } static inline const char * nm_settings_storage_get_filename(const NMSettingsStorage *self) { g_return_val_if_fail(NM_IS_SETTINGS_STORAGE(self), NULL); return self->_filename; } /*****************************************************************************/ #define nm_assert_valid_settings_storage(plugin, storage) \ G_STMT_START \ { \ NMSettingsPlugin *const _plugin = (plugin); \ NMSettingsStorage *const _storage = (storage); \ \ nm_assert(!_plugin || NM_IS_SETTINGS_PLUGIN(_plugin)); \ nm_assert(NM_IS_SETTINGS_STORAGE(_storage)); \ nm_assert(!_plugin || nm_settings_storage_get_plugin(_storage) == _plugin); \ } \ G_STMT_END /*****************************************************************************/ int nm_settings_storage_cmp(NMSettingsStorage *sd_a, NMSettingsStorage *sd_b, const GSList * plugin_list); #endif /* __NM_SETTINGS_STORAGE_H__ */