diff options
author | Ben Chan <benchan@chromium.org> | 2017-07-06 15:18:18 -0700 |
---|---|---|
committer | Aleksander Morgado <aleksander@aleksander.es> | 2017-07-07 10:15:07 +0200 |
commit | 344d96af44f0c2aa4b31e39fb29c3e76d17b4e4b (patch) | |
tree | 5bfd00cf95399d432e41461d8ddbf74ae11fb404 | |
parent | b44f1b6da07580ec1c9704125b00d7711b4dea5e (diff) |
cinterion: check error returned by g_task_propagate_error instead
When returning an enum value via g_task_return_int, some code assumes
the enum value is always non-negative and thus considers that a negative
value implies an error. This assumption could be invalidated if a
negative value is later added to the enum. To make it less error prone
to future changes, this patch modifies the code to check if the GError
argument to g_task_propagate_error is populated instead.
-rw-r--r-- | plugins/cinterion/mm-broadband-bearer-cinterion.c | 9 | ||||
-rw-r--r-- | plugins/cinterion/mm-broadband-modem-cinterion.c | 6 | ||||
-rw-r--r-- | plugins/cinterion/mm-common-cinterion.c | 7 |
3 files changed, 17 insertions, 5 deletions
diff --git a/plugins/cinterion/mm-broadband-bearer-cinterion.c b/plugins/cinterion/mm-broadband-bearer-cinterion.c index a1c699e9..438fb599 100644 --- a/plugins/cinterion/mm-broadband-bearer-cinterion.c +++ b/plugins/cinterion/mm-broadband-bearer-cinterion.c @@ -85,10 +85,15 @@ load_connection_status_finish (MMBaseBearer *bearer, GAsyncResult *res, GError **error) { + GError *inner_error = NULL; gssize aux; - aux = g_task_propagate_int (G_TASK (res), error); - return (aux < 0 ? MM_BEARER_CONNECTION_STATUS_UNKNOWN : (MMBearerConnectionStatus) aux); + aux = g_task_propagate_int (G_TASK (res), &inner_error); + if (inner_error) { + g_propagate_error (error, inner_error); + return MM_BEARER_CONNECTION_STATUS_UNKNOWN; + } + return (MMBearerConnectionStatus) aux; } static void diff --git a/plugins/cinterion/mm-broadband-modem-cinterion.c b/plugins/cinterion/mm-broadband-modem-cinterion.c index c147c2f6..5f6b20f8 100644 --- a/plugins/cinterion/mm-broadband-modem-cinterion.c +++ b/plugins/cinterion/mm-broadband-modem-cinterion.c @@ -582,10 +582,14 @@ load_access_technologies_finish (MMIfaceModem *self, guint *mask, GError **error) { + GError *inner_error = NULL; gssize val; - if ((val = g_task_propagate_int (G_TASK (res), error)) < 0) + val = g_task_propagate_int (G_TASK (res), &inner_error); + if (inner_error) { + g_propagate_error (error, inner_error); return FALSE; + } *access_technologies = (MMModemAccessTechnology) val; *mask = MM_MODEM_ACCESS_TECHNOLOGY_ANY; diff --git a/plugins/cinterion/mm-common-cinterion.c b/plugins/cinterion/mm-common-cinterion.c index 3f2b3994..67bc5b3b 100644 --- a/plugins/cinterion/mm-common-cinterion.c +++ b/plugins/cinterion/mm-common-cinterion.c @@ -122,11 +122,14 @@ mm_common_cinterion_location_load_capabilities_finish (MMIfaceModemLocation *se GAsyncResult *res, GError **error) { + GError *inner_error = NULL; gssize aux; - if ((aux = g_task_propagate_int (G_TASK (res), error)) < 0) + aux = g_task_propagate_int (G_TASK (res), &inner_error); + if (inner_error) { + g_propagate_error (error, inner_error); return MM_MODEM_LOCATION_SOURCE_NONE; - + } return (MMModemLocationSource) aux; } |