[PATCH v2] cinterion: check error returned by g_task_propagate_error instead
Aleksander Morgado
aleksander at aleksander.es
Fri Jul 7 08:15:52 UTC 2017
On 07/07/17 00:18, Ben Chan wrote:
> 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.
> ---
>
> Thanks Dan!
>
>
Pushed to git master, thanks!
> plugins/cinterion/mm-broadband-bearer-cinterion.c | 9 +++++++--
> plugins/cinterion/mm-broadband-modem-cinterion.c | 6 +++++-
> 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..0768fac7 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;
> }
>
>
--
Aleksander
https://aleksander.es
More information about the ModemManager-devel
mailing list