From 5dde80c1365f692dd9100dbcc11624c0bdcfba10 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marco=20Trevisan=20=28Trevi=C3=B1o=29?= Date: Thu, 17 Dec 2020 00:10:02 +0100 Subject: [PATCH] device: Expose an error if we are not able to remove a print from storage This is case we should notify, as in such case the print will still usable. --- src/device.c | 36 +++++++++++++++++++++++++++++++++--- 1 file changed, 33 insertions(+), 3 deletions(-) diff --git a/src/device.c b/src/device.c index 651f56f..91857ac 100644 --- a/src/device.c +++ b/src/device.c @@ -1865,6 +1865,7 @@ delete_enrolled_fingers (FprintDevice *rdev, { FprintDevicePrivate *priv = fprint_device_get_instance_private (rdev); guint i; + int r; if (finger != FP_FINGER_UNKNOWN) g_debug ("Deleting enrolled finger %s for user %s", @@ -1915,10 +1916,39 @@ delete_enrolled_fingers (FprintDevice *rdev, } if (finger != FP_FINGER_UNKNOWN) - store.print_data_delete (priv->dev, finger, user); + { + if ((r = store.print_data_delete (priv->dev, finger, user)) != 0) + { + g_set_error (error, FPRINT_ERROR, FPRINT_ERROR_INTERNAL, + "Impossible to delete fingerprint reference " + "got error: %d", r); + return FALSE; + } + } else - for (i = FP_FINGER_FIRST; i <= FP_FINGER_LAST; i++) - store.print_data_delete (priv->dev, i, user); + { + g_autoptr(GError) local_error = NULL; + + for (i = FP_FINGER_FIRST; i <= FP_FINGER_LAST; i++) + { + if ((r = store.print_data_delete (priv->dev, i, user)) != 0) + { + if (local_error) + continue; + + g_set_error (&local_error, FPRINT_ERROR, FPRINT_ERROR_INTERNAL, + "Impossible to delete fingerprint reference " + "got error: %d", r); + /* Do not return yet, at least try to remove the remaining prints */ + } + } + + if (local_error) + { + g_propagate_error (error, g_steal_pointer (&local_error)); + return FALSE; + } + } return TRUE; }