mirror of
https://gitlab.freedesktop.org/NetworkManager/NetworkManager.git
synced 2026-05-05 21:38:06 +02:00
keyfile: rework error reporting from read/write handler
Setting the error on the callback does not work well from bindings. Instead, let bindings call a (future) nm_keyfile_handler_data_fail_with_error() function on the handler_data to indicate failure.
This commit is contained in:
parent
e3d7ba89e5
commit
ab7d0c62f9
4 changed files with 36 additions and 25 deletions
|
|
@ -52,8 +52,7 @@ typedef gboolean (*NMKeyfileReadHandler) (GKeyFile *keyfile,
|
|||
NMConnection *connection,
|
||||
NMKeyfileHandlerType handler_type,
|
||||
NMKeyfileHandlerData *handler_data,
|
||||
void *user_data,
|
||||
GError **error);
|
||||
void *user_data);
|
||||
|
||||
typedef enum {
|
||||
NM_KEYFILE_WARN_SEVERITY_DEBUG = 1000,
|
||||
|
|
@ -103,8 +102,7 @@ typedef gboolean (*NMKeyfileWriteHandler) (NMConnection *connection,
|
|||
GKeyFile *keyfile,
|
||||
NMKeyfileHandlerType handler_type,
|
||||
NMKeyfileHandlerData *handler_data,
|
||||
void *user_data,
|
||||
GError **error);
|
||||
void *user_data);
|
||||
|
||||
GKeyFile *nm_keyfile_write (NMConnection *connection,
|
||||
NMKeyfileWriteHandler handler,
|
||||
|
|
@ -146,6 +144,7 @@ typedef struct {
|
|||
|
||||
struct _NMKeyfileHandlerData {
|
||||
NMKeyfileHandlerType type;
|
||||
GError **p_error;
|
||||
union {
|
||||
NMKeyfileHandlerDataWarn warn;
|
||||
NMKeyfileHandlerDataWriteCert write_cert;
|
||||
|
|
|
|||
|
|
@ -49,16 +49,30 @@ typedef struct {
|
|||
|
||||
/*****************************************************************************/
|
||||
|
||||
static void
|
||||
_key_file_handler_data_init (NMKeyfileHandlerData *handler_data,
|
||||
NMKeyfileHandlerType handler_type,
|
||||
GError **p_error)
|
||||
{
|
||||
nm_assert (handler_data);
|
||||
nm_assert (p_error && !*p_error);
|
||||
|
||||
handler_data->type = handler_type;
|
||||
handler_data->p_error = p_error;
|
||||
}
|
||||
|
||||
static void
|
||||
_handle_warn (KeyfileReaderInfo *info,
|
||||
const char *property_name,
|
||||
NMKeyfileWarnSeverity severity,
|
||||
char *message)
|
||||
{
|
||||
NMKeyfileHandlerData type_data;
|
||||
NMKeyfileHandlerData handler_data;
|
||||
|
||||
type_data.type = NM_KEYFILE_HANDLER_TYPE_WARN;
|
||||
type_data.warn = (NMKeyfileHandlerDataWarn) {
|
||||
_key_file_handler_data_init (&handler_data,
|
||||
NM_KEYFILE_HANDLER_TYPE_WARN,
|
||||
&info->error);
|
||||
handler_data.warn = (NMKeyfileHandlerDataWarn) {
|
||||
.group = info->group,
|
||||
.setting = info->setting,
|
||||
.property_name = property_name,
|
||||
|
|
@ -69,9 +83,8 @@ _handle_warn (KeyfileReaderInfo *info,
|
|||
info->read_handler (info->keyfile,
|
||||
info->connection,
|
||||
NM_KEYFILE_HANDLER_TYPE_WARN,
|
||||
&type_data,
|
||||
info->user_data,
|
||||
&info->error);
|
||||
&handler_data,
|
||||
info->user_data);
|
||||
g_free (message);
|
||||
}
|
||||
#define handle_warn(arg_info, arg_property_name, arg_severity, ...) \
|
||||
|
|
@ -2420,7 +2433,7 @@ cert_writer (KeyfileWriterInfo *info,
|
|||
const GValue *value)
|
||||
{
|
||||
const NMSetting8021xSchemeVtable *vtable = NULL;
|
||||
NMKeyfileHandlerData type_data;
|
||||
NMKeyfileHandlerData handler_data;
|
||||
guint i;
|
||||
|
||||
for (i = 0; nm_setting_8021x_scheme_vtable[i].setting_key; i++) {
|
||||
|
|
@ -2432,19 +2445,20 @@ cert_writer (KeyfileWriterInfo *info,
|
|||
if (!vtable)
|
||||
g_return_if_reached ();
|
||||
|
||||
type_data.type = NM_KEYFILE_HANDLER_TYPE_WRITE_CERT;
|
||||
type_data.write_cert = (NMKeyfileHandlerDataWriteCert) {
|
||||
.setting = NM_SETTING_802_1X (setting),
|
||||
.vtable = vtable,
|
||||
};
|
||||
|
||||
if (info->write_handler) {
|
||||
_key_file_handler_data_init (&handler_data,
|
||||
NM_KEYFILE_HANDLER_TYPE_WRITE_CERT,
|
||||
&info->error);
|
||||
handler_data.write_cert = (NMKeyfileHandlerDataWriteCert) {
|
||||
.setting = NM_SETTING_802_1X (setting),
|
||||
.vtable = vtable,
|
||||
};
|
||||
|
||||
if (info->write_handler (info->connection,
|
||||
info->keyfile,
|
||||
NM_KEYFILE_HANDLER_TYPE_WRITE_CERT,
|
||||
&type_data,
|
||||
info->user_data,
|
||||
&info->error))
|
||||
&handler_data,
|
||||
info->user_data))
|
||||
return;
|
||||
if (info->error)
|
||||
return;
|
||||
|
|
|
|||
|
|
@ -50,8 +50,7 @@ _handler_read (GKeyFile *keyfile,
|
|||
NMConnection *connection,
|
||||
NMKeyfileHandlerType type,
|
||||
NMKeyfileHandlerData *type_data,
|
||||
void *user_data,
|
||||
GError **error)
|
||||
void *user_data)
|
||||
{
|
||||
const HandlerReadData *handler_data = user_data;
|
||||
|
||||
|
|
|
|||
|
|
@ -148,14 +148,13 @@ _handler_write (NMConnection *connection,
|
|||
GKeyFile *keyfile,
|
||||
NMKeyfileHandlerType type,
|
||||
NMKeyfileHandlerData *type_data,
|
||||
void *user_data,
|
||||
GError **error)
|
||||
void *user_data)
|
||||
{
|
||||
if (type == NM_KEYFILE_HANDLER_TYPE_WRITE_CERT) {
|
||||
cert_writer (connection, keyfile,
|
||||
&type_data->write_cert,
|
||||
user_data,
|
||||
error);
|
||||
type_data->p_error);
|
||||
return TRUE;
|
||||
}
|
||||
return FALSE;
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue