utils/enroll: Terminate with EXIT_FAILURE when enrollment failed

This commit is contained in:
Marco Trevisan (Treviño)
2021-01-28 18:19:56 +01:00
parent c66d5d0fa6
commit 9a13293818

View File

@ -33,6 +33,12 @@ static GDBusConnection *connection = NULL;
static char *finger_name = NULL; static char *finger_name = NULL;
static char **usernames = NULL; static char **usernames = NULL;
typedef enum {
ENROLL_INCOMPLETE,
ENROLL_COMPLETED,
ENROLL_FAILED,
} FprintEnrollStatus;
static void static void
create_manager (void) create_manager (void)
{ {
@ -95,11 +101,16 @@ open_device (const char *username)
static void static void
enroll_result (GObject *object, const char *result, gboolean done, void *user_data) 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); g_print ("Enroll result: %s\n", result);
if (done != FALSE) if (done != FALSE)
*enroll_completed = TRUE; {
if (g_str_equal (result, "enroll-completed"))
*enroll_status = ENROLL_COMPLETED;
else
*enroll_status = ENROLL_FAILED;
}
} }
static void static void
@ -119,16 +130,16 @@ proxy_signal_cb (GDBusProxy *proxy,
} }
} }
static void static FprintEnrollStatus
do_enroll (FprintDBusDevice *dev) do_enroll (FprintDBusDevice *dev)
{ {
g_autoptr(GError) error = NULL; g_autoptr(GError) error = NULL;
gboolean enroll_completed = FALSE; FprintEnrollStatus enroll_status = ENROLL_INCOMPLETE;
gboolean found; gboolean found;
guint i; guint i;
g_signal_connect (dev, "g-signal", G_CALLBACK (proxy_signal_cb), g_signal_connect (dev, "g-signal", G_CALLBACK (proxy_signal_cb),
&enroll_completed); &enroll_status);
found = FALSE; found = FALSE;
for (i = 0; fingers[i].dbus_name != NULL; i++) for (i = 0; fingers[i].dbus_name != NULL; i++)
@ -163,16 +174,18 @@ do_enroll (FprintDBusDevice *dev)
exit (1); exit (1);
} }
while (!enroll_completed) while (enroll_status == ENROLL_INCOMPLETE)
g_main_context_iteration (NULL, TRUE); 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)) if (!fprint_dbus_device_call_enroll_stop_sync (dev, NULL, &error))
{ {
g_print ("EnrollStop failed: %s\n", error->message); g_print ("EnrollStop failed: %s\n", error->message);
exit (1); exit (1);
} }
return enroll_status;
} }
static void static void
@ -197,6 +210,7 @@ main (int argc, char **argv)
{ {
g_autoptr(FprintDBusDevice) dev = NULL; g_autoptr(FprintDBusDevice) dev = NULL;
GOptionContext *context; GOptionContext *context;
FprintEnrollStatus status;
g_autoptr(GError) err = NULL; g_autoptr(GError) err = NULL;
@ -217,9 +231,9 @@ main (int argc, char **argv)
create_manager (); create_manager ();
dev = open_device (usernames ? usernames[0] : ""); dev = open_device (usernames ? usernames[0] : "");
do_enroll (dev); status = do_enroll (dev);
release_device (dev); release_device (dev);
g_free (finger_name); g_free (finger_name);
g_strfreev (usernames); g_strfreev (usernames);
return 0; return status == ENROLL_COMPLETED ? EXIT_SUCCESS : EXIT_FAILURE;
} }