summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPhilip Withnall <pwithnall@endlessos.org>2023-05-15 16:22:35 +0100
committerPhilip Withnall <pwithnall@endlessos.org>2023-05-15 16:22:35 +0100
commite02fa2ec9072132e13afab4441366d3580b5e6f9 (patch)
treef04a4fe443c63f2122a9daa95aa4aeb45dfd753f
parentfde068300efe442822fbbd56dc8ecc1caf4b83a7 (diff)
downloadglib-e02fa2ec9072132e13afab4441366d3580b5e6f9.tar.gz
gfile: Ensure loff_t is defined on FreeBSD
When `copy_file_range()` support was added, I used the definition of `copy_file_range()` from Linux, which uses `loff_t` to abstract the different `off*_t` types. `loff_t` doesn’t exist on FreeBSD, so this doesn’t compile, and was caught in subsequent asynchronous CI. Define `loff_t` with a fallback value if it’s not defined, which should fix this and other uses of `loff_t` in `gfile.c` (for example, if FreeBSD ever starts declaring `splice()`). Fixes this CI failure: https://gitlab.gnome.org/GNOME/glib/-/jobs/2812302 Signed-off-by: Philip Withnall <pwithnall@endlessos.org>
-rw-r--r--gio/gfile.c7
-rw-r--r--meson.build4
2 files changed, 11 insertions, 0 deletions
diff --git a/gio/gfile.c b/gio/gfile.c
index 31da0b05e..a78737773 100644
--- a/gio/gfile.c
+++ b/gio/gfile.c
@@ -77,6 +77,13 @@
#include "gioerror.h"
#include "glibintl.h"
+/* Linux defines loff_t as a way to simplify the offset types for calls like
+ * splice() and copy_file_range(). BSD has copy_file_range() but doesn’t define
+ * loff_t. Abstract that. */
+#ifndef HAVE_LOFF_T
+typedef off_t loff_t;
+#endif
+
/**
* SECTION:gfile
diff --git a/meson.build b/meson.build
index 44284fc10..1d3754abb 100644
--- a/meson.build
+++ b/meson.build
@@ -828,6 +828,10 @@ if cc.has_header_symbol('dlfcn.h', 'RTLD_NEXT', args: '-D_GNU_SOURCE')
glib_conf.set('HAVE_RTLD_NEXT', 1)
endif
+if cc.has_type('loff_t', prefix: '#include <sys/types.h>')
+ glib_conf.set('HAVE_LOFF_T', 1)
+endif
+
# Check whether to use statfs or statvfs
# Some systems have both statfs and statvfs, pick the most "native" for these
if have_func_statfs and have_func_statvfs