[glib: 1/2] gfile: Document TOCTTOU avoidance using g_file_delete()
- From: Sebastian Dröge <sdroege src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [glib: 1/2] gfile: Document TOCTTOU avoidance using g_file_delete()
- Date: Wed, 12 Aug 2020 10:00:24 +0000 (UTC)
commit 373c54a52ce82c4cb5536926686e12adfce37d1c
Author: Philip Withnall <withnall endlessm com>
Date: Mon Aug 10 16:21:53 2020 +0100
gfile: Document TOCTTOU avoidance using g_file_delete()
Don’t call `g_file_query_exists()` followed by `g_file_delete()`. Just
call `g_file_delete()` and check the error.
Signed-off-by: Philip Withnall <withnall endlessm com>
gio/gfile.c | 15 +++++++++++++++
1 file changed, 15 insertions(+)
---
diff --git a/gio/gfile.c b/gio/gfile.c
index a8d12aa2c..533efa7df 100644
--- a/gio/gfile.c
+++ b/gio/gfile.c
@@ -4027,6 +4027,21 @@ g_file_make_symbolic_link (GFile *file,
* Deletes a file. If the @file is a directory, it will only be
* deleted if it is empty. This has the same semantics as g_unlink().
*
+ * If @file doesn’t exist, %G_IO_ERROR_NOT_FOUND will be returned. This allows
+ * for deletion to be implemented avoiding
+ * [time-of-check to time-of-use races](https://en.wikipedia.org/wiki/Time-of-check_to_time-of-use):
+ * |[
+ * g_autoptr(GError) local_error = NULL;
+ * if (!g_file_delete (my_file, my_cancellable, &local_error) &&
+ * !g_error_matches (local_error, G_IO_ERROR, G_IO_ERROR_NOT_FOUND))
+ * {
+ * // deletion failed for some reason other than the file not existing:
+ * // so report the error
+ * g_warning ("Failed to delete %s: %s",
+ * g_file_peek_path (my_file), local_error->message);
+ * }
+ * ]|
+ *
* If @cancellable is not %NULL, then the operation can be cancelled by
* triggering the cancellable object from another thread. If the operation
* was cancelled, the error %G_IO_ERROR_CANCELLED will be returned.
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]