summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorThomas Haller <thaller@redhat.com>2020-05-24 22:39:39 +0200
committerThomas Haller <thaller@redhat.com>2020-06-05 09:17:18 +0200
commitab7d0c62f914da4b7030f657b48cad60d0298c38 (patch)
tree3ad4c4345fe80d64c4f903d6301c7f6da26b8313
parente3d7ba89e5c032be5b3f121a4af11b8667da7862 (diff)
downloadNetworkManager-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.h7
-rw-r--r--shared/nm-keyfile/nm-keyfile.c46
-rw-r--r--src/settings/plugins/keyfile/nms-keyfile-reader.c3
-rw-r--r--src/settings/plugins/keyfile/nms-keyfile-writer.c5
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;