From fcbf63e62c627deae76c1b8cb8c0876c536ed811 Mon Sep 17 00:00:00 2001 From: Jari Vetoniemi Date: Mon, 16 Mar 2020 18:49:26 +0900 Subject: Fresh start --- jni/ruby/ext/-test-/file/Makefile | 305 ++++++++++++++++++++++++++++++++++++ jni/ruby/ext/-test-/file/depend | 36 +++++ jni/ruby/ext/-test-/file/extconf.h | 11 ++ jni/ruby/ext/-test-/file/extconf.rb | 21 +++ jni/ruby/ext/-test-/file/fs.c | 74 +++++++++ jni/ruby/ext/-test-/file/init.c | 11 ++ jni/ruby/ext/-test-/file/stat.c | 27 ++++ 7 files changed, 485 insertions(+) create mode 100644 jni/ruby/ext/-test-/file/Makefile create mode 100644 jni/ruby/ext/-test-/file/depend create mode 100644 jni/ruby/ext/-test-/file/extconf.h create mode 100644 jni/ruby/ext/-test-/file/extconf.rb create mode 100644 jni/ruby/ext/-test-/file/fs.c create mode 100644 jni/ruby/ext/-test-/file/init.c create mode 100644 jni/ruby/ext/-test-/file/stat.c (limited to 'jni/ruby/ext/-test-/file') diff --git a/jni/ruby/ext/-test-/file/Makefile b/jni/ruby/ext/-test-/file/Makefile new file mode 100644 index 0000000..99ca123 --- /dev/null +++ b/jni/ruby/ext/-test-/file/Makefile @@ -0,0 +1,305 @@ + +SHELL = /bin/sh + +# V=0 quiet, V=1 verbose. other values don't work. +V = 0 +Q1 = $(V:1=) +Q = $(Q1:0=@) +ECHO1 = $(V:1=@:) +ECHO = $(ECHO1:0=@echo) +NULLCMD = : + +#### Start of system configuration section. #### +top_srcdir = $(topdir)/. +srcdir = $(top_srcdir)/ext/-test-/file +topdir = ../../.. +hdrdir = $(top_srcdir)/include +arch_hdrdir = $(extout)/include/$(arch) +PATH_SEPARATOR = : +VPATH = $(srcdir):$(arch_hdrdir)/ruby:$(hdrdir)/ruby +RUBYLIB = +RUBYOPT = - +prefix = $(DESTDIR)/usr/local +rubysitearchprefix = $(rubylibprefix)/$(sitearch) +rubyarchprefix = $(rubylibprefix)/$(arch) +rubylibprefix = $(libdir)/$(RUBY_BASE_NAME) +exec_prefix = $(prefix) +vendorarchhdrdir = $(vendorhdrdir)/$(sitearch) +sitearchhdrdir = $(sitehdrdir)/$(sitearch) +rubyarchhdrdir = $(rubyhdrdir)/$(arch) +vendorhdrdir = $(rubyhdrdir)/vendor_ruby +sitehdrdir = $(rubyhdrdir)/site_ruby +rubyhdrdir = $(includedir)/$(RUBY_VERSION_NAME) +vendorarchdir = $(vendorlibdir)/$(sitearch) +vendorlibdir = $(vendordir)/$(ruby_version) +vendordir = $(rubylibprefix)/vendor_ruby +sitearchdir = $(sitelibdir)/$(sitearch) +sitelibdir = $(sitedir)/$(ruby_version) +sitedir = $(rubylibprefix)/site_ruby +rubyarchdir = $(rubylibdir)/$(arch) +rubylibdir = $(rubylibprefix)/$(ruby_version) +sitearchincludedir = $(includedir)/$(sitearch) +archincludedir = $(includedir)/$(arch) +sitearchlibdir = $(libdir)/$(sitearch) +archlibdir = $(libdir)/$(arch) +ridir = $(datarootdir)/$(RI_BASE_NAME) +mandir = $(datarootdir)/man +localedir = $(datarootdir)/locale +libdir = $(exec_prefix)/lib +psdir = $(docdir) +pdfdir = $(docdir) +dvidir = $(docdir) +htmldir = $(docdir) +infodir = $(datarootdir)/info +docdir = $(datarootdir)/doc/$(PACKAGE) +oldincludedir = $(DESTDIR)/usr/include +includedir = $(prefix)/include +localstatedir = $(prefix)/var +sharedstatedir = $(prefix)/com +sysconfdir = $(prefix)/etc +datadir = $(datarootdir) +datarootdir = $(prefix)/share +libexecdir = $(exec_prefix)/libexec +sbindir = $(exec_prefix)/sbin +bindir = $(exec_prefix)/bin +archdir = $(rubyarchdir) + + +CC = gcc +CXX = g++ +LIBRUBY = $(LIBRUBY_SO) +LIBRUBY_A = lib$(RUBY_SO_NAME)-static.a +LIBRUBYARG_SHARED = -Wl,-R$(libdir) -L$(libdir) -l$(RUBY_SO_NAME) +LIBRUBYARG_STATIC = -Wl,-R$(libdir) -L$(libdir) -l$(RUBY_SO_NAME)-static +empty = +OUTFLAG = -o $(empty) +COUTFLAG = -o $(empty) + +RUBY_EXTCONF_H = extconf.h +cflags = $(optflags) $(debugflags) $(warnflags) +optflags = -O3 -fno-fast-math +debugflags = -ggdb3 +warnflags = -Wall -Wextra -Wno-unused-parameter -Wno-parentheses -Wno-long-long -Wno-missing-field-initializers -Wunused-variable -Wpointer-arith -Wwrite-strings -Wdeclaration-after-statement -Wimplicit-function-declaration -Wdeprecated-declarations -Wno-packed-bitfield-compat +CCDLFLAGS = -fPIC +CFLAGS = $(CCDLFLAGS) $(cflags) -fPIC $(ARCH_FLAG) +INCFLAGS = -I. -I$(arch_hdrdir) -I$(hdrdir) -I$(srcdir) -I$(topdir) -I$(top_srcdir) +DEFS = +CPPFLAGS = -DRUBY_EXTCONF_H=\"$(RUBY_EXTCONF_H)\" $(DEFS) $(cppflags) +CXXFLAGS = $(CCDLFLAGS) $(cxxflags) $(ARCH_FLAG) +ldflags = -L. -fstack-protector -rdynamic -Wl,-export-dynamic +dldflags = +ARCH_FLAG = +DLDFLAGS = $(ldflags) $(dldflags) $(ARCH_FLAG) +LDSHARED = $(CC) -shared +LDSHAREDXX = $(CXX) -shared +AR = ar +EXEEXT = + +RUBY_INSTALL_NAME = $(RUBY_BASE_NAME) +RUBY_SO_NAME = ruby +RUBYW_INSTALL_NAME = +RUBY_VERSION_NAME = $(RUBY_BASE_NAME)-$(ruby_version) +RUBYW_BASE_NAME = rubyw +RUBY_BASE_NAME = ruby + +arch = x86_64-linux +sitearch = $(arch) +ruby_version = 2.2.0 +ruby = $(topdir)/miniruby -I'$(topdir)' -I'$(top_srcdir)/lib' -I'$(extout)/$(arch)' -I'$(extout)/common' +RUBY = $(ruby) +ruby_headers = $(hdrdir)/ruby.h $(hdrdir)/ruby/ruby.h $(hdrdir)/ruby/defines.h $(hdrdir)/ruby/missing.h $(hdrdir)/ruby/intern.h $(hdrdir)/ruby/st.h $(hdrdir)/ruby/subst.h $(arch_hdrdir)/ruby/config.h $(RUBY_EXTCONF_H) + +RM = rm -f +RM_RF = $(RUBY) -run -e rm -- -rf +RMDIRS = rmdir --ignore-fail-on-non-empty -p +MAKEDIRS = /bin/mkdir -p +INSTALL = /usr/bin/install -c +INSTALL_PROG = $(INSTALL) -m 0755 +INSTALL_DATA = $(INSTALL) -m 644 +COPY = cp +TOUCH = exit > + +#### End of system configuration section. #### + +preload = + +libpath = . $(topdir) +LIBPATH = -L. -L$(topdir) +DEFFILE = + +CLEANFILES = mkmf.log +DISTCLEANFILES = +DISTCLEANDIRS = + +extout = $(topdir)/.ext +extout_prefix = $(extout)$(target_prefix)/ +target_prefix = /-test- +LOCAL_LIBS = +LIBS = $(LIBRUBYARG_SHARED) -lpthread -lgmp -ldl -lcrypt -lm -lc +ORIG_SRCS = fs.c stat.c init.c +SRCS = $(ORIG_SRCS) +OBJS = fs.o stat.o init.o +HDRS = $(srcdir)/extconf.h +TARGET = file +TARGET_NAME = file +TARGET_ENTRY = Init_$(TARGET_NAME) +DLLIB = $(TARGET).so +EXTSTATIC = +STATIC_LIB = $(TARGET).a + +TIMESTAMP_DIR = $(extout)/.timestamp +BINDIR = $(extout)/bin +RUBYCOMMONDIR = $(extout)/common +RUBYLIBDIR = $(RUBYCOMMONDIR)$(target_prefix) +RUBYARCHDIR = $(extout)/$(arch)$(target_prefix) +HDRDIR = $(extout)/include/ruby$(target_prefix) +ARCHHDRDIR = $(extout)/include/$(arch)/ruby$(target_prefix) + +TARGET_SO = $(RUBYARCHDIR)/$(DLLIB) +CLEANLIBS = $(RUBYARCHDIR)/$(TARGET).so +CLEANOBJS = *.o *.bak + +all: install +static: all +.PHONY: all install static install-so install-rb +.PHONY: clean clean-so clean-static clean-rb + +clean-static:: +clean-rb-default:: +clean-rb:: +clean-so:: +clean: clean-so clean-static clean-rb-default clean-rb + -$(Q)$(RM) $(CLEANLIBS) $(CLEANOBJS) $(CLEANFILES) .*.time + +distclean-rb-default:: +distclean-rb:: +distclean-so:: +distclean-static:: +distclean: clean distclean-so distclean-static distclean-rb-default distclean-rb + -$(Q)$(RM) Makefile $(RUBY_EXTCONF_H) conftest.* mkmf.log + -$(Q)$(RM) core ruby$(EXEEXT) *~ $(DISTCLEANFILES) + -$(Q)$(RMDIRS) $(DISTCLEANDIRS) 2> /dev/null || true + +realclean: distclean +install: install-so install-rb + +install-so: $(RUBYARCHDIR)/$(DLLIB) +clean-so:: + -$(Q)$(RM) $(RUBYARCHDIR)/$(DLLIB) + -$(Q)$(RMDIRS) $(RUBYARCHDIR) 2> /dev/null || true +clean-static:: + -$(Q)$(RM) $(STATIC_LIB) +install-rb: pre-install-rb install-rb-default +install-rb-default: pre-install-rb-default +pre-install-rb: Makefile +pre-install-rb-default: Makefile +pre-install-rb-default: + @$(NULLCMD) +$(TIMESTAMP_DIR)/.RUBYARCHDIR.-.-test-.time: + $(Q) $(MAKEDIRS) $(@D) $(RUBYARCHDIR) + $(Q) $(TOUCH) $@ + +site-install: site-install-so site-install-rb +site-install-so: install-so +site-install-rb: install-rb + +.SUFFIXES: .c .m .cc .mm .cxx .cpp .o .S + +.cc.o: + $(ECHO) compiling $(<) + $(Q) $(CXX) $(INCFLAGS) $(CPPFLAGS) $(CXXFLAGS) $(COUTFLAG)$@ -c $< + +.cc.S: + $(ECHO) translating $(<) + $(Q) $(CXX) $(INCFLAGS) $(CPPFLAGS) $(CXXFLAGS) $(COUTFLAG)$@ -S $< + +.mm.o: + $(ECHO) compiling $(<) + $(Q) $(CXX) $(INCFLAGS) $(CPPFLAGS) $(CXXFLAGS) $(COUTFLAG)$@ -c $< + +.mm.S: + $(ECHO) translating $(<) + $(Q) $(CXX) $(INCFLAGS) $(CPPFLAGS) $(CXXFLAGS) $(COUTFLAG)$@ -S $< + +.cxx.o: + $(ECHO) compiling $(<) + $(Q) $(CXX) $(INCFLAGS) $(CPPFLAGS) $(CXXFLAGS) $(COUTFLAG)$@ -c $< + +.cxx.S: + $(ECHO) translating $(<) + $(Q) $(CXX) $(INCFLAGS) $(CPPFLAGS) $(CXXFLAGS) $(COUTFLAG)$@ -S $< + +.cpp.o: + $(ECHO) compiling $(<) + $(Q) $(CXX) $(INCFLAGS) $(CPPFLAGS) $(CXXFLAGS) $(COUTFLAG)$@ -c $< + +.cpp.S: + $(ECHO) translating $(<) + $(Q) $(CXX) $(INCFLAGS) $(CPPFLAGS) $(CXXFLAGS) $(COUTFLAG)$@ -S $< + +.c.o: + $(ECHO) compiling $(<) + $(Q) $(CC) $(INCFLAGS) $(CPPFLAGS) $(CFLAGS) $(COUTFLAG)$@ -c $< + +.c.S: + $(ECHO) translating $(<) + $(Q) $(CC) $(INCFLAGS) $(CPPFLAGS) $(CFLAGS) $(COUTFLAG)$@ -S $< + +.m.o: + $(ECHO) compiling $(<) + $(Q) $(CC) $(INCFLAGS) $(CPPFLAGS) $(CFLAGS) $(COUTFLAG)$@ -c $< + +.m.S: + $(ECHO) translating $(<) + $(Q) $(CC) $(INCFLAGS) $(CPPFLAGS) $(CFLAGS) $(COUTFLAG)$@ -S $< + +$(RUBYARCHDIR)/$(DLLIB): $(OBJS) Makefile $(TIMESTAMP_DIR)/.RUBYARCHDIR.-.-test-.time + $(ECHO) linking shared-object -test-/$(DLLIB) + -$(Q)$(RM) $(@) + $(Q) $(LDSHARED) -o $@ $(OBJS) $(LIBPATH) $(DLDFLAGS) $(LOCAL_LIBS) $(LIBS) + +$(STATIC_LIB): $(OBJS) + -$(Q)$(RM) $(@) + $(ECHO) linking static-library $(@) + $(Q) $(AR) cru $@ $(OBJS) + -$(Q)ranlib $(@) 2> /dev/null || true + +### +$(OBJS): $(RUBY_EXTCONF_H) + +# AUTOGENERATED DEPENDENCIES START +fs.o: $(RUBY_EXTCONF_H) +fs.o: $(arch_hdrdir)/ruby/config.h +fs.o: $(hdrdir)/ruby/defines.h +fs.o: $(hdrdir)/ruby/encoding.h +fs.o: $(hdrdir)/ruby/intern.h +fs.o: $(hdrdir)/ruby/io.h +fs.o: $(hdrdir)/ruby/missing.h +fs.o: $(hdrdir)/ruby/oniguruma.h +fs.o: $(hdrdir)/ruby/ruby.h +fs.o: $(hdrdir)/ruby/st.h +fs.o: $(hdrdir)/ruby/subst.h +fs.o: fs.c +init.o: $(RUBY_EXTCONF_H) +init.o: $(arch_hdrdir)/ruby/config.h +init.o: $(hdrdir)/ruby/defines.h +init.o: $(hdrdir)/ruby/intern.h +init.o: $(hdrdir)/ruby/missing.h +init.o: $(hdrdir)/ruby/ruby.h +init.o: $(hdrdir)/ruby/st.h +init.o: $(hdrdir)/ruby/subst.h +init.o: $(top_srcdir)/include/ruby.h +init.o: init.c +stat.o: $(RUBY_EXTCONF_H) +stat.o: $(arch_hdrdir)/ruby/config.h +stat.o: $(hdrdir)/ruby/defines.h +stat.o: $(hdrdir)/ruby/encoding.h +stat.o: $(hdrdir)/ruby/intern.h +stat.o: $(hdrdir)/ruby/io.h +stat.o: $(hdrdir)/ruby/missing.h +stat.o: $(hdrdir)/ruby/oniguruma.h +stat.o: $(hdrdir)/ruby/ruby.h +stat.o: $(hdrdir)/ruby/st.h +stat.o: $(hdrdir)/ruby/subst.h +stat.o: stat.c +# AUTOGENERATED DEPENDENCIES END diff --git a/jni/ruby/ext/-test-/file/depend b/jni/ruby/ext/-test-/file/depend new file mode 100644 index 0000000..a43b427 --- /dev/null +++ b/jni/ruby/ext/-test-/file/depend @@ -0,0 +1,36 @@ +# AUTOGENERATED DEPENDENCIES START +fs.o: $(RUBY_EXTCONF_H) +fs.o: $(arch_hdrdir)/ruby/config.h +fs.o: $(hdrdir)/ruby/defines.h +fs.o: $(hdrdir)/ruby/encoding.h +fs.o: $(hdrdir)/ruby/intern.h +fs.o: $(hdrdir)/ruby/io.h +fs.o: $(hdrdir)/ruby/missing.h +fs.o: $(hdrdir)/ruby/oniguruma.h +fs.o: $(hdrdir)/ruby/ruby.h +fs.o: $(hdrdir)/ruby/st.h +fs.o: $(hdrdir)/ruby/subst.h +fs.o: fs.c +init.o: $(RUBY_EXTCONF_H) +init.o: $(arch_hdrdir)/ruby/config.h +init.o: $(hdrdir)/ruby/defines.h +init.o: $(hdrdir)/ruby/intern.h +init.o: $(hdrdir)/ruby/missing.h +init.o: $(hdrdir)/ruby/ruby.h +init.o: $(hdrdir)/ruby/st.h +init.o: $(hdrdir)/ruby/subst.h +init.o: $(top_srcdir)/include/ruby.h +init.o: init.c +stat.o: $(RUBY_EXTCONF_H) +stat.o: $(arch_hdrdir)/ruby/config.h +stat.o: $(hdrdir)/ruby/defines.h +stat.o: $(hdrdir)/ruby/encoding.h +stat.o: $(hdrdir)/ruby/intern.h +stat.o: $(hdrdir)/ruby/io.h +stat.o: $(hdrdir)/ruby/missing.h +stat.o: $(hdrdir)/ruby/oniguruma.h +stat.o: $(hdrdir)/ruby/ruby.h +stat.o: $(hdrdir)/ruby/st.h +stat.o: $(hdrdir)/ruby/subst.h +stat.o: stat.c +# AUTOGENERATED DEPENDENCIES END diff --git a/jni/ruby/ext/-test-/file/extconf.h b/jni/ruby/ext/-test-/file/extconf.h new file mode 100644 index 0000000..49c2892 --- /dev/null +++ b/jni/ruby/ext/-test-/file/extconf.h @@ -0,0 +1,11 @@ +#ifndef EXTCONF_H +#define EXTCONF_H +#define HAVE_SYS_PARAM_H 1 +#define HAVE_SYS_MOUNT_H 1 +#define HAVE_SYS_VFS_H 1 +#define HAVE_TYPE_STRUCT_STATFS 1 +#define HAVE_STRUCT_STATFS_F_TYPE 1 +#define HAVE_ST_F_TYPE 1 +#define HAVE_TYPE_STRUCT_STATVFS 1 +#define TEST_INIT_FUNCS(X) X(fs) X(stat) +#endif diff --git a/jni/ruby/ext/-test-/file/extconf.rb b/jni/ruby/ext/-test-/file/extconf.rb new file mode 100644 index 0000000..be4a2fb --- /dev/null +++ b/jni/ruby/ext/-test-/file/extconf.rb @@ -0,0 +1,21 @@ +$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") +inits.map! {|s|"X(#{s})"} +$defs << "-DTEST_INIT_FUNCS(X)=\"#{inits.join(' ')}\"" +create_makefile("-test-/file") diff --git a/jni/ruby/ext/-test-/file/fs.c b/jni/ruby/ext/-test-/file/fs.c new file mode 100644 index 0000000..1ab067e --- /dev/null +++ b/jni/ruby/ext/-test-/file/fs.c @@ -0,0 +1,74 @@ +#include "ruby/ruby.h" +#include "ruby/io.h" + +#ifdef HAVE_SYS_MOUNT_H +#include +#endif +#ifdef HAVE_SYS_VFS_H +#include +#endif + +#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 +# if defined HAVE_STRUCT_STATFS_F_TYPE +# define HAVE_STRUCT_STATFS_T_F_TYPE 1 +# endif +#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 +# if defined HAVE_STRUCT_STATVFS_F_TYPE +# define HAVE_STRUCT_STATFS_T_F_TYPE 1 +# endif +#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 +# if defined HAVE_STRUCT_STATVFS_F_TYPE +# define HAVE_STRUCT_STATFS_T_F_TYPE 1 +# endif +#endif + +VALUE +get_fsname(VALUE self, VALUE str) +{ +#ifdef STATFS + statfs_t st; +# define CSTR(s) rb_str_new_cstr(s) + + FilePathValue(str); + 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 +# ifdef HAVE_STRUCT_STATFS_T_F_TYPE + 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"); + } +# endif +#endif + return Qnil; +} + +void +Init_fs(VALUE module) +{ + VALUE fs = rb_define_module_under(module, "Fs"); + rb_define_module_function(fs, "fsname", get_fsname, 1); +} diff --git a/jni/ruby/ext/-test-/file/init.c b/jni/ruby/ext/-test-/file/init.c new file mode 100644 index 0000000..1117993 --- /dev/null +++ b/jni/ruby/ext/-test-/file/init.c @@ -0,0 +1,11 @@ +#include "ruby.h" + +#define init(n) {void Init_##n(VALUE klass); Init_##n(module);} + +void +Init_file(void) +{ + VALUE mBug = rb_define_module("Bug"); + VALUE module = rb_define_module_under(mBug, "File"); + TEST_INIT_FUNCS(init); +} diff --git a/jni/ruby/ext/-test-/file/stat.c b/jni/ruby/ext/-test-/file/stat.c new file mode 100644 index 0000000..fed5d38 --- /dev/null +++ b/jni/ruby/ext/-test-/file/stat.c @@ -0,0 +1,27 @@ +#include "ruby/ruby.h" +#include "ruby/io.h" + +static VALUE +stat_for_fd(VALUE self, VALUE fileno) +{ + struct stat st; + if (fstat(NUM2INT(fileno), &st)) rb_sys_fail(0); + return rb_stat_new(&st); +} + +static VALUE +stat_for_path(VALUE self, VALUE path) +{ + struct stat st; + FilePathValue(path); + if (stat(RSTRING_PTR(path), &st)) rb_sys_fail(0); + return rb_stat_new(&st); +} + +void +Init_stat(VALUE module) +{ + VALUE st = rb_define_module_under(module, "Stat"); + rb_define_module_function(st, "for_fd", stat_for_fd, 1); + rb_define_module_function(st, "for_path", stat_for_path, 1); +} -- cgit v1.2.3