diff options
author | Thomas Haller <thaller@redhat.com> | 2020-05-24 22:39:39 +0200 |
---|---|---|
committer | Thomas Haller <thaller@redhat.com> | 2020-06-05 09:17:18 +0200 |
commit | ab7d0c62f914da4b7030f657b48cad60d0298c38 (patch) | |
tree | 3ad4c4345fe80d64c4f903d6301c7f6da26b8313 | |
parent | e3d7ba89e5c032be5b3f121a4af11b8667da7862 (diff) | |
download | NetworkManager-ab7d0c62f914da4b7030f657b48cad60d0298c38.tar.gz |
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.
-rw-r--r-- | shared/nm-keyfile/nm-keyfile-internal.h | 7 | ||||
-rw-r--r-- | shared/nm-keyfile/nm-keyfile.c | 46 | ||||
-rw-r--r-- | src/settings/plugins/keyfile/nms-keyfile-reader.c | 3 | ||||
-rw-r--r-- | src/settings/plugins/keyfile/nms-keyfile-writer.c | 5 |
4 files changed, 36 insertions, 25 deletions
diff --git a/shared/nm-keyfile/nm-keyfile-internal.h b/shared/nm-keyfile/nm-keyfile-internal.h index 029e6b7701..236ddcae4c 100644 --- a/shared/nm-keyfile/nm-keyfile-internal.h +++ b/shared/nm-keyfile/nm-keyfile-internal.h @@ -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; diff --git a/shared/nm-keyfile/nm-keyfile.c b/shared/nm-keyfile/nm-keyfile.c index fc2077dc65..b889fe2d05 100644 --- a/shared/nm-keyfile/nm-keyfile.c +++ b/shared/nm-keyfile/nm-keyfile.c @@ -50,15 +50,29 @@ 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; diff --git a/src/settings/plugins/keyfile/nms-keyfile-reader.c b/src/settings/plugins/keyfile/nms-keyfile-reader.c index 53de6f06ea..460f740646 100644 --- a/src/settings/plugins/keyfile/nms-keyfile-reader.c +++ b/src/settings/plugins/keyfile/nms-keyfile-reader.c @@ -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; diff --git a/src/settings/plugins/keyfile/nms-keyfile-writer.c b/src/settings/plugins/keyfile/nms-keyfile-writer.c index 2ded867ca3..efe5a9b16f 100644 --- a/src/settings/plugins/keyfile/nms-keyfile-writer.c +++ b/src/settings/plugins/keyfile/nms-keyfile-writer.c @@ -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; |