cli: fix signature of NMMetaAbstractType:get_fcn()

Depending on the get_type argument, we don't only want
to return strings, but arbitrary pointers.

The out_to_free argument still makes sense, but depending on
the get-type you must know how to free the pointer.
This commit is contained in:
Thomas Haller
2017-04-04 15:07:06 +02:00
parent d5bcc5826e
commit e3a07633dc
4 changed files with 25 additions and 20 deletions

View File

@@ -64,14 +64,14 @@ _meta_type_nmc_generic_info_get_nested (const NMMetaAbstractInfo *abstract_info,
return (const NMMetaAbstractInfo *const*) info->nested;
}
static const char *
static gconstpointer
_meta_type_nmc_generic_info_get_fcn (const NMMetaEnvironment *environment,
gpointer environment_user_data,
const NMMetaAbstractInfo *abstract_info,
gpointer target,
NMMetaAccessorGetType get_type,
NMMetaAccessorGetFlags get_flags,
char **out_to_free)
gpointer *out_to_free)
{
const NmcMetaGenericInfo *info = (const NmcMetaGenericInfo *) abstract_info;

View File

@@ -104,13 +104,13 @@ struct _NmcMetaGenericInfo {
const NMMetaType *meta_type;
const char *name;
const NmcMetaGenericInfo *const*nested;
const char *(*get_fcn) (const NMMetaEnvironment *environment,
gconstpointer (*get_fcn) (const NMMetaEnvironment *environment,
gpointer environment_user_data,
const NmcMetaGenericInfo *info,
gpointer target,
NMMetaAccessorGetType get_type,
NMMetaAccessorGetFlags get_flags,
char **out_to_free);
gpointer *out_to_free);
};
#define NMC_META_GENERIC(n, ...) \

View File

@@ -6632,32 +6632,37 @@ _meta_type_property_info_get_name (const NMMetaAbstractInfo *abstract_info)
return ((const NMMetaPropertyInfo *) abstract_info)->property_name;
}
static const char *
static gconstpointer
_meta_type_setting_info_editor_get_fcn (const NMMetaEnvironment *environment,
gpointer environment_user_data,
const NMMetaAbstractInfo *abstract_info,
gpointer target,
NMMetaAccessorGetType get_type,
NMMetaAccessorGetFlags get_flags,
char **out_to_free)
gpointer *out_to_free)
{
nm_assert (out_to_free && !out_to_free);
g_return_val_if_reached (NULL);
}
static const char *
static gconstpointer
_meta_type_property_info_get_fcn (const NMMetaEnvironment *environment,
gpointer environment_user_data,
const NMMetaAbstractInfo *abstract_info,
gpointer target,
NMMetaAccessorGetType get_type,
NMMetaAccessorGetFlags get_flags,
char **out_to_free)
gpointer *out_to_free)
{
const NMMetaPropertyInfo *info = (const NMMetaPropertyInfo *) abstract_info;
nm_assert (out_to_free && !out_to_free);
if (!NM_IN_SET (get_type,
NM_META_ACCESSOR_GET_TYPE_PARSABLE,
NM_META_ACCESSOR_GET_TYPE_PRETTY))
return NULL;
return (*out_to_free = info->property_type->get_fcn (environment, environment_user_data,
info, target,
get_type, get_flags));

View File

@@ -149,13 +149,13 @@ struct _NMMetaType {
const NMMetaAbstractInfo *const*(*get_nested) (const NMMetaAbstractInfo *abstract_info,
guint *out_len,
gpointer *out_to_free);
const char *(*get_fcn) (const NMMetaEnvironment *environment,
gconstpointer (*get_fcn) (const NMMetaEnvironment *environment,
gpointer environment_user_data,
const NMMetaAbstractInfo *info,
gpointer target,
NMMetaAccessorGetType get_type,
NMMetaAccessorGetFlags get_flags,
char **out_to_free);
gpointer *out_to_free);
};
struct _NMMetaAbstractInfo {