[ruby/f22] Apply upstream fix to TestIO#test_seek tests.
Vít Ondruch
vondruch at fedoraproject.org
Tue Mar 24 13:27:38 UTC 2015
commit bedc1b6cdd5b47272b20cce9e26102fed1eaeed1
Author: Vít Ondruch <vondruch at redhat.com>
Date: Tue Mar 24 14:26:56 2015 +0100
Apply upstream fix to TestIO#test_seek tests.
ruby-2.2.1-use-statfs.patch | 158 ++++++++++++++++++++++++++++++++++++++++++++
ruby.spec | 8 +--
2 files changed, 162 insertions(+), 4 deletions(-)
---
diff --git a/ruby-2.2.1-use-statfs.patch b/ruby-2.2.1-use-statfs.patch
new file mode 100644
index 0000000..842eb0e
--- /dev/null
+++ b/ruby-2.2.1-use-statfs.patch
@@ -0,0 +1,158 @@
+From acae106c7c8feab92a52982976b147f1100207a5 Mon Sep 17 00:00:00 2001
+From: nobu <nobu at b2dd03c8-39d4-4d8f-98ff-823fe69b080e>
+Date: Tue, 24 Mar 2015 08:30:15 +0000
+Subject: [PATCH] fs.c: use statfs/statvfs
+
+* ext/-test-/file/fs.c (get_fsname): return filesystem name by
+ statfs/statvfs. [ruby-core:68624] [Bug #10998]
+
+git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@50071 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
+---
+ ChangeLog | 5 +++
+ ext/-test-/file/extconf.rb | 14 ++++++++
+ ext/-test-/file/fs.c | 85 +++++++++++++++++++++++++---------------------
+ 3 files changed, 66 insertions(+), 38 deletions(-)
+
+diff --git a/ChangeLog b/ChangeLog
+index a2f2f97..d7e11af 100644
+--- a/ChangeLog
++++ b/ChangeLog
+@@ -1,3 +1,8 @@
++Tue Mar 24 17:30:12 2015 Nobuyoshi Nakada <nobu at ruby-lang.org>
++
++ * ext/-test-/file/fs.c (get_fsname): return filesystem name by
++ statfs/statvfs. [ruby-core:68624] [Bug #10998]
++
+ Thu Feb 26 15:48:41 2015 NAKAMURA Usaku <usa at ruby-lang.org>
+
+ * ext/win32/Win32API.rb (initialize): accept both a string and an array
+diff --git a/ext/-test-/file/extconf.rb b/ext/-test-/file/extconf.rb
+index 4e134dd..be4a2fb 100644
+--- a/ext/-test-/file/extconf.rb
++++ b/ext/-test-/file/extconf.rb
+@@ -1,4 +1,18 @@
+ $INCFLAGS << " -I$(topdir) -I$(top_srcdir)"
++
++headers = %w[sys/param.h sys/mount.h sys/vfs.h].select {|h| have_header(h)}
++if have_type("struct statfs", headers)
++ have_struct_member("struct statfs", "f_fstypename", headers)
++ have_struct_member("struct statfs", "f_type", headers)
++end
++
++headers = %w[sys/statvfs.h]
++if have_type("struct statvfs", headers)
++ have_struct_member("struct statvfs", "f_fstypename", headers)
++ have_struct_member("struct statvfs", "f_basetype", headers)
++ have_struct_member("struct statvfs", "f_type", headers)
++end
++
+ $srcs = Dir[File.join($srcdir, "*.{#{SRC_EXT.join(%q{,})}}")]
+ inits = $srcs.map {|s| File.basename(s, ".*")}
+ inits.delete("init")
+diff --git a/ext/-test-/file/fs.c b/ext/-test-/file/fs.c
+index 4a41bf3..94d96d3 100644
+--- a/ext/-test-/file/fs.c
++++ b/ext/-test-/file/fs.c
+@@ -1,55 +1,64 @@
+ #include "ruby/ruby.h"
+ #include "ruby/io.h"
+
+-#ifdef __linux__
+-# define HAVE_GETMNTENT
++#ifdef HAVE_SYS_MOUNT_H
++#include <sys/mount.h>
++#endif
++#ifdef HAVE_SYS_VFS_H
++#include <sys/vfs.h>
+ #endif
+
+-#ifdef HAVE_GETMNTENT
+-# include <stdio.h>
+-# include <mntent.h>
++#if defined HAVE_STRUCT_STATFS_F_FSTYPENAME
++typedef struct statfs statfs_t;
++# define STATFS(f, s) statfs((f), (s))
++# define HAVE_STRUCT_STATFS_T_F_FSTYPENAME 1
++#elif defined(HAVE_STRUCT_STATVFS_F_FSTYPENAME) /* NetBSD */
++typedef struct statvfs statfs_t;
++# define STATFS(f, s) statvfs((f), (s))
++# define HAVE_STRUCT_STATFS_T_F_FSTYPENAME 1
++#elif defined(HAVE_STRUCT_STATVFS_F_BASETYPE) /* AIX, HP-UX, Solaris */
++typedef struct statvfs statfs_t;
++# define STATFS(f, s) statvfs((f), (s))
++# define HAVE_STRUCT_STATFS_T_F_FSTYPENAME 1
++# define f_fstypename f_basetype
++#elif defined HAVE_STRUCT_STATFS_F_TYPE
++typedef struct statfs statfs_t;
++# define STATFS(f, s) statfs((f), (s))
++#elif defined HAVE_STRUCT_STATVFS_F_TYPE
++typedef struct statvfs statfs_t;
++# define STATFS(f, s) statvfs((f), (s))
+ #endif
+
+ VALUE
+ get_fsname(VALUE self, VALUE str)
+ {
+-#ifdef HAVE_GETMNTENT
+- const char *path;
+- struct mntent mntbuf;
+- static const int buflen = 4096;
+- char *buf = alloca(buflen);
+- int len = 0;
+- FILE *fp;
+-#define FSNAME_LEN 100
+- char name[FSNAME_LEN] = "";
++#ifdef STATFS
++ statfs_t st;
++# define CSTR(s) rb_str_new_cstr(s)
+
+ FilePathValue(str);
+- path = RSTRING_PTR(str);
+- fp = setmntent("/etc/mtab", "r");
+- if (!fp) rb_sys_fail("setmntent(/etb/mtab)");;
+-
+- while (getmntent_r(fp, &mntbuf, buf, buflen)) {
+- int i;
+- char *mnt_dir = mntbuf.mnt_dir;
+- for (i=0; mnt_dir[i]; i++) {
+- if (mnt_dir[i] != path[i]) {
+- goto next_entry;
+- }
+- }
+- if (i >= len) {
+- len = i;
+- strlcpy(name, mntbuf.mnt_type, FSNAME_LEN);
+- }
+-next_entry:
+- ;
++ str = rb_str_encode_ospath(str);
++ if (STATFS(StringValueCStr(str), &st) == -1) {
++ rb_sys_fail_str(str);
++ }
++# ifdef HAVE_STRUCT_STATFS_T_F_FSTYPENAME
++ if (st.f_fstypename[0])
++ return CSTR(st.f_fstypename);
++# endif
++ switch (st.f_type) {
++ case 0x9123683E: /* BTRFS_SUPER_MAGIC */
++ return CSTR("btrfs");
++ case 0x7461636f: /* OCFS2_SUPER_MAGIC */
++ return CSTR("ocfs");
++ case 0xEF53: /* EXT2_SUPER_MAGIC EXT3_SUPER_MAGIC EXT4_SUPER_MAGIC */
++ return CSTR("ext4");
++ case 0x58465342: /* XFS_SUPER_MAGIC */
++ return CSTR("xfs");
++ case 0x01021994: /* TMPFS_MAGIC */
++ return CSTR("tmpfs");
+ }
+- endmntent(fp);
+-
+- if (!len) rb_sys_fail("no matching entry");;
+- return rb_str_new_cstr(name);
+-#else
+- return Qnil;
+ #endif
++ return Qnil;
+ }
+
+ void
diff --git a/ruby.spec b/ruby.spec
index dfb9532..dcf1f5c 100644
--- a/ruby.spec
+++ b/ruby.spec
@@ -110,6 +110,9 @@ Patch5: ruby-1.9.3-mkmf-verbose.patch
# in support for ABRT.
# http://bugs.ruby-lang.org/issues/8566
Patch6: ruby-2.1.0-Allow-to-specify-additional-preludes-by-configuratio.patch
+# can_seek_data does not work correctly in chroot for Kernel 3.19+.
+# https://bugs.ruby-lang.org/issues/10998
+Patch7: ruby-2.2.1-use-statfs.patch
Requires: %{name}-libs%{?_isa} = %{version}-%{release}
Requires: ruby(rubygems) >= %{rubygems_version}
@@ -410,6 +413,7 @@ rm -rf ext/fiddle/libffi*
%patch4 -p1
%patch5 -p1
%patch6 -p1
+%patch7 -p1
# Provide an example of usage of the tapset:
cp -a %{SOURCE3} .
@@ -599,10 +603,6 @@ touch abrt.rb
sed -i '/def test_ctx_client_session_cb$/,/^ end$/ s/^/#/' test/openssl/test_ssl_session.rb
sed -i '/def test_ctx_server_session_cb$/,/^ end$/ s/^/#/' test/openssl/test_ssl_session.rb
-# can_seek_data does not work correctly in chroot for Kernel 3.19+.
-# https://bugs.ruby-lang.org/issues/10998
-sed -i '/break unless can_seek_data(f)/ s/^/#/' test/ruby/test_io.rb
-
make check TESTS="-v $DISABLE_TESTS"
%post libs -p /sbin/ldconfig
More information about the scm-commits
mailing list