[glib/glib-2-56] gio: fix compilation without F_{S,G}ETPIPE_SZ



commit 1d2e685d90cbebdfcc0b2b2caf6e665c7e93d31d
Author: Fabrice Fontaine <fontaine fabrice gmail com>
Date:   Tue Apr 10 18:55:11 2018 +0200

    gio: fix compilation without F_{S,G}ETPIPE_SZ
    
    Commit a5778ef7c51044147fe470ea1707dd297f44f880 broke compilation on
    architectures without F_SETPIPE_SZ and F_GETPIPE_SZ such as or1k.
    If those variables are undefined, put back previous behavior, buffer
    size set to 1024 * 64
    
    Fixes:
     - http://autobuild.buildroot.net/results/398490e07343a931b25ca6ab5c90a75d7a073e9f
    
    (Modified by Philip Withnall <withnall endlessm com> to add an
    explanatory comment.)
    
    Signed-off-by: Fabrice Fontaine <fontaine fabrice gmail com>
    
    https://bugzilla.gnome.org/show_bug.cgi?id=795133

 gio/gfile.c | 8 ++++++++
 1 file changed, 8 insertions(+)
---
diff --git a/gio/gfile.c b/gio/gfile.c
index 334ad8ec3..a67aad383 100644
--- a/gio/gfile.c
+++ b/gio/gfile.c
@@ -3012,6 +3012,7 @@ splice_stream_with_progress (GInputStream           *in,
   if (!g_unix_open_pipe (buffer, FD_CLOEXEC, error))
     return FALSE;
 
+#if defined(F_SETPIPE_SZ) && defined(F_GETPIPE_SZ)
   /* Try a 1MiB buffer for improved throughput. If that fails, use the default
    * pipe size. See: https://bugzilla.gnome.org/791457 */
   buffer_size = fcntl (buffer[1], F_SETPIPE_SZ, 1024 * 1024);
@@ -3029,6 +3030,13 @@ splice_stream_with_progress (GInputStream           *in,
           goto out;
         }
     }
+#else
+  /* If #F_GETPIPE_SZ isn’t available, assume we’re on Linux < 2.6.35,
+   * but ≥ 2.6.11, meaning the pipe capacity is 64KiB. Ignore the possibility of
+   * running on Linux < 2.6.11 (where the capacity was the system page size,
+   * typically 4KiB) because it’s ancient. See pipe(7). */
+  buffer_size = 1024 * 64;
+#endif
 
   g_assert (buffer_size > 0);
 


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]