mirror of
https://gitlab.gnome.org/GNOME/glib.git
synced 2024-11-09 19:06:15 +01:00
Merge branch 'wip/oholy/btrfs-copy-fix' into 'main'
gfile: Fix file size detection when copying on btrfs See merge request GNOME/glib!3309
This commit is contained in:
commit
7187243b8e
16
gio/gfile.c
16
gio/gfile.c
@ -3158,15 +3158,25 @@ btrfs_reflink_with_progress (GInputStream *in,
|
||||
gpointer progress_callback_data,
|
||||
GError **error)
|
||||
{
|
||||
goffset source_size;
|
||||
goffset total_size;
|
||||
int fd_in, fd_out;
|
||||
int ret, errsv;
|
||||
|
||||
fd_in = g_file_descriptor_based_get_fd (G_FILE_DESCRIPTOR_BASED (in));
|
||||
fd_out = g_file_descriptor_based_get_fd (G_FILE_DESCRIPTOR_BASED (out));
|
||||
|
||||
total_size = -1;
|
||||
/* avoid performance impact of querying total size when it's not needed */
|
||||
if (progress_callback)
|
||||
source_size = g_file_info_get_size (info);
|
||||
{
|
||||
struct stat sbuf;
|
||||
|
||||
if (fstat (fd_in, &sbuf) == 0)
|
||||
total_size = sbuf.st_size;
|
||||
}
|
||||
|
||||
if (total_size == -1)
|
||||
total_size = 0;
|
||||
|
||||
/* Btrfs clone ioctl properties:
|
||||
* - Works at the inode level
|
||||
@ -3201,7 +3211,7 @@ btrfs_reflink_with_progress (GInputStream *in,
|
||||
|
||||
/* Make sure we send full copied size */
|
||||
if (progress_callback)
|
||||
progress_callback (source_size, source_size, progress_callback_data);
|
||||
progress_callback (total_size, total_size, progress_callback_data);
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user