From 9a132938180a7a5a87a39db7e665c7253c461bf6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marco=20Trevisan=20=28Trevi=C3=B1o=29?= Date: Thu, 28 Jan 2021 18:19:56 +0100 Subject: [PATCH] utils/enroll: Terminate with EXIT_FAILURE when enrollment failed --- utils/enroll.c | 32 +++++++++++++++++++++++--------- 1 file changed, 23 insertions(+), 9 deletions(-) diff --git a/utils/enroll.c b/utils/enroll.c index c52cbce..aa68da7 100644 --- a/utils/enroll.c +++ b/utils/enroll.c @@ -33,6 +33,12 @@ static GDBusConnection *connection = NULL; static char *finger_name = NULL; static char **usernames = NULL; +typedef enum { + ENROLL_INCOMPLETE, + ENROLL_COMPLETED, + ENROLL_FAILED, +} FprintEnrollStatus; + static void create_manager (void) { @@ -95,11 +101,16 @@ open_device (const char *username) static void enroll_result (GObject *object, const char *result, gboolean done, void *user_data) { - gboolean *enroll_completed = user_data; + FprintEnrollStatus *enroll_status = user_data; g_print ("Enroll result: %s\n", result); if (done != FALSE) - *enroll_completed = TRUE; + { + if (g_str_equal (result, "enroll-completed")) + *enroll_status = ENROLL_COMPLETED; + else + *enroll_status = ENROLL_FAILED; + } } static void @@ -119,16 +130,16 @@ proxy_signal_cb (GDBusProxy *proxy, } } -static void +static FprintEnrollStatus do_enroll (FprintDBusDevice *dev) { g_autoptr(GError) error = NULL; - gboolean enroll_completed = FALSE; + FprintEnrollStatus enroll_status = ENROLL_INCOMPLETE; gboolean found; guint i; g_signal_connect (dev, "g-signal", G_CALLBACK (proxy_signal_cb), - &enroll_completed); + &enroll_status); found = FALSE; for (i = 0; fingers[i].dbus_name != NULL; i++) @@ -163,16 +174,18 @@ do_enroll (FprintDBusDevice *dev) exit (1); } - while (!enroll_completed) + while (enroll_status == ENROLL_INCOMPLETE) g_main_context_iteration (NULL, TRUE); - g_signal_handlers_disconnect_by_func (dev, proxy_signal_cb, &enroll_result); + g_signal_handlers_disconnect_by_func (dev, proxy_signal_cb, &enroll_status); if (!fprint_dbus_device_call_enroll_stop_sync (dev, NULL, &error)) { g_print ("EnrollStop failed: %s\n", error->message); exit (1); } + + return enroll_status; } static void @@ -197,6 +210,7 @@ main (int argc, char **argv) { g_autoptr(FprintDBusDevice) dev = NULL; GOptionContext *context; + FprintEnrollStatus status; g_autoptr(GError) err = NULL; @@ -217,9 +231,9 @@ main (int argc, char **argv) create_manager (); dev = open_device (usernames ? usernames[0] : ""); - do_enroll (dev); + status = do_enroll (dev); release_device (dev); g_free (finger_name); g_strfreev (usernames); - return 0; + return status == ENROLL_COMPLETED ? EXIT_SUCCESS : EXIT_FAILURE; }