mirror of
				https://gitlab.gnome.org/GNOME/glib.git
				synced 2025-11-04 01:58:54 +01:00 
			
		
		
		
	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>
This commit is contained in:
		
							
								
								
									
										15
									
								
								gio/gfile.c
									
									
									
									
									
								
							
							
						
						
									
										15
									
								
								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.
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user