diff --git a/configure.ac b/configure.ac index 6fd16bd36..51be1ff7b 100644 --- a/configure.ac +++ b/configure.ac @@ -992,7 +992,7 @@ AC_MSG_RESULT(unsigned $glib_size_type) # Check for some functions AC_CHECK_FUNCS(lstat strerror strsignal memmove vsnprintf stpcpy strcasecmp strncasecmp poll getcwd vasprintf setenv unsetenv getc_unlocked readlink symlink fdwalk memmem) AC_CHECK_FUNCS(chown lchmod lchown fchmod fchown link utimes getgrgid getpwuid getresuid) -AC_CHECK_FUNCS(getmntent_r setmntent endmntent hasmntopt getfsstat getvfsstat) +AC_CHECK_FUNCS(getmntent_r setmntent endmntent hasmntopt getfsstat getvfsstat posix_fallocate) # Check for high-resolution sleep functions AC_CHECK_FUNCS(splice) AC_CHECK_FUNCS(prlimit) diff --git a/glib/gfileutils.c b/glib/gfileutils.c index 3c1b135ef..235064391 100644 --- a/glib/gfileutils.c +++ b/glib/gfileutils.c @@ -1059,6 +1059,13 @@ write_to_temp_file (const gchar *contents, if (length > 0) { gsize n_written; + +#ifdef HAVE_POSIX_FALLOCATE + /* We do this on a 'best effort' basis... It may not be supported + * on the underlying filesystem. + */ + (void) posix_fallocate (fd, 0, length); +#endif errno = 0;