Apply upstream fix to TestIO#test_seek tests.
This commit is contained in:
parent
a0a4c7571b
commit
b9da2e689a
158
ruby-2.2.1-use-statfs.patch
Normal file
158
ruby-2.2.1-use-statfs.patch
Normal file
@ -0,0 +1,158 @@
|
||||
From acae106c7c8feab92a52982976b147f1100207a5 Mon Sep 17 00:00:00 2001
|
||||
From: nobu <nobu@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@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@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
|
@ -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
|
||||
|
Loading…
Reference in New Issue
Block a user