From 08017c0d6cb4f6dcaa0a5f9e12240cbe9762879b Mon Sep 17 00:00:00 2001 From: Ignacio Casal Quinteiro Date: Thu, 20 Jan 2022 11:07:20 +0100 Subject: [PATCH 1/2] giowin32: use gint64 and _lseeki64 off_t on windows is 32bit which means that it will not be able to handle big offsets --- glib/giowin32.c | 14 ++------------ 1 file changed, 2 insertions(+), 12 deletions(-) diff --git a/glib/giowin32.c b/glib/giowin32.c index 6afd48e618..72cd9220ca 100644 --- a/glib/giowin32.c +++ b/glib/giowin32.c @@ -1291,8 +1291,7 @@ g_io_win32_fd_seek (GIOChannel *channel, { GIOWin32Channel *win32_channel = (GIOWin32Channel *)channel; int whence, errsv; - off_t tmp_offset; - off_t result; + gint64 result; switch (type) { @@ -1311,16 +1310,7 @@ g_io_win32_fd_seek (GIOChannel *channel, g_abort (); } - tmp_offset = offset; - if (tmp_offset != offset) - { - g_set_error_literal (err, G_IO_CHANNEL_ERROR, - g_io_channel_error_from_errno (EINVAL), - g_strerror (EINVAL)); - return G_IO_STATUS_ERROR; - } - - result = lseek (win32_channel->fd, tmp_offset, whence); + result = _lseeki64 (win32_channel->fd, offset, whence); errsv = errno; if (result < 0) -- GitLab From 1a349882968763c4b523e20230788f8ca987b5c9 Mon Sep 17 00:00:00 2001 From: Ignacio Casal Quinteiro Date: Thu, 20 Jan 2022 11:40:06 +0100 Subject: [PATCH 2/2] _g_stat_size: return goffset Otherwise on windows we would be capped at 32bit off_t. --- gio/glocalfileinfo.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gio/glocalfileinfo.h b/gio/glocalfileinfo.h index e04e921f2c..5ca0d9be34 100644 --- a/gio/glocalfileinfo.h +++ b/gio/glocalfileinfo.h @@ -297,7 +297,7 @@ inline static guint32 _g_stat_nlink (const GLocalFileStat *buf) { return b #endif inline static dev_t _g_stat_dev (const GLocalFileStat *buf) { return buf->st_dev; } inline static ino_t _g_stat_ino (const GLocalFileStat *buf) { return buf->st_ino; } -inline static off_t _g_stat_size (const GLocalFileStat *buf) { return buf->st_size; } +inline static goffset _g_stat_size (const GLocalFileStat *buf) { return buf->st_size; } #ifndef G_OS_WIN32 inline static uid_t _g_stat_uid (const GLocalFileStat *buf) { return buf->st_uid; } -- GitLab