diff options
Diffstat (limited to 'ext/fcntl')
| -rw-r--r-- | ext/fcntl/depend | 149 | ||||
| -rw-r--r-- | ext/fcntl/fcntl.c | 161 | ||||
| -rw-r--r-- | ext/fcntl/fcntl.gemspec | 21 |
3 files changed, 271 insertions, 60 deletions
diff --git a/ext/fcntl/depend b/ext/fcntl/depend index 60d6be6b89..57ea0f2106 100644 --- a/ext/fcntl/depend +++ b/ext/fcntl/depend @@ -4,8 +4,157 @@ fcntl.o: $(arch_hdrdir)/ruby/config.h fcntl.o: $(hdrdir)/ruby.h fcntl.o: $(hdrdir)/ruby/assert.h fcntl.o: $(hdrdir)/ruby/backward.h +fcntl.o: $(hdrdir)/ruby/backward/2/assume.h +fcntl.o: $(hdrdir)/ruby/backward/2/attributes.h +fcntl.o: $(hdrdir)/ruby/backward/2/bool.h +fcntl.o: $(hdrdir)/ruby/backward/2/inttypes.h +fcntl.o: $(hdrdir)/ruby/backward/2/limits.h +fcntl.o: $(hdrdir)/ruby/backward/2/long_long.h +fcntl.o: $(hdrdir)/ruby/backward/2/stdalign.h +fcntl.o: $(hdrdir)/ruby/backward/2/stdarg.h fcntl.o: $(hdrdir)/ruby/defines.h fcntl.o: $(hdrdir)/ruby/intern.h +fcntl.o: $(hdrdir)/ruby/internal/abi.h +fcntl.o: $(hdrdir)/ruby/internal/anyargs.h +fcntl.o: $(hdrdir)/ruby/internal/arithmetic.h +fcntl.o: $(hdrdir)/ruby/internal/arithmetic/char.h +fcntl.o: $(hdrdir)/ruby/internal/arithmetic/double.h +fcntl.o: $(hdrdir)/ruby/internal/arithmetic/fixnum.h +fcntl.o: $(hdrdir)/ruby/internal/arithmetic/gid_t.h +fcntl.o: $(hdrdir)/ruby/internal/arithmetic/int.h +fcntl.o: $(hdrdir)/ruby/internal/arithmetic/intptr_t.h +fcntl.o: $(hdrdir)/ruby/internal/arithmetic/long.h +fcntl.o: $(hdrdir)/ruby/internal/arithmetic/long_long.h +fcntl.o: $(hdrdir)/ruby/internal/arithmetic/mode_t.h +fcntl.o: $(hdrdir)/ruby/internal/arithmetic/off_t.h +fcntl.o: $(hdrdir)/ruby/internal/arithmetic/pid_t.h +fcntl.o: $(hdrdir)/ruby/internal/arithmetic/short.h +fcntl.o: $(hdrdir)/ruby/internal/arithmetic/size_t.h +fcntl.o: $(hdrdir)/ruby/internal/arithmetic/st_data_t.h +fcntl.o: $(hdrdir)/ruby/internal/arithmetic/uid_t.h +fcntl.o: $(hdrdir)/ruby/internal/assume.h +fcntl.o: $(hdrdir)/ruby/internal/attr/alloc_size.h +fcntl.o: $(hdrdir)/ruby/internal/attr/artificial.h +fcntl.o: $(hdrdir)/ruby/internal/attr/cold.h +fcntl.o: $(hdrdir)/ruby/internal/attr/const.h +fcntl.o: $(hdrdir)/ruby/internal/attr/constexpr.h +fcntl.o: $(hdrdir)/ruby/internal/attr/deprecated.h +fcntl.o: $(hdrdir)/ruby/internal/attr/diagnose_if.h +fcntl.o: $(hdrdir)/ruby/internal/attr/enum_extensibility.h +fcntl.o: $(hdrdir)/ruby/internal/attr/error.h +fcntl.o: $(hdrdir)/ruby/internal/attr/flag_enum.h +fcntl.o: $(hdrdir)/ruby/internal/attr/forceinline.h +fcntl.o: $(hdrdir)/ruby/internal/attr/format.h +fcntl.o: $(hdrdir)/ruby/internal/attr/maybe_unused.h +fcntl.o: $(hdrdir)/ruby/internal/attr/noalias.h +fcntl.o: $(hdrdir)/ruby/internal/attr/nodiscard.h +fcntl.o: $(hdrdir)/ruby/internal/attr/noexcept.h +fcntl.o: $(hdrdir)/ruby/internal/attr/noinline.h +fcntl.o: $(hdrdir)/ruby/internal/attr/nonnull.h +fcntl.o: $(hdrdir)/ruby/internal/attr/noreturn.h +fcntl.o: $(hdrdir)/ruby/internal/attr/packed_struct.h +fcntl.o: $(hdrdir)/ruby/internal/attr/pure.h +fcntl.o: $(hdrdir)/ruby/internal/attr/restrict.h +fcntl.o: $(hdrdir)/ruby/internal/attr/returns_nonnull.h +fcntl.o: $(hdrdir)/ruby/internal/attr/warning.h +fcntl.o: $(hdrdir)/ruby/internal/attr/weakref.h +fcntl.o: $(hdrdir)/ruby/internal/cast.h +fcntl.o: $(hdrdir)/ruby/internal/compiler_is.h +fcntl.o: $(hdrdir)/ruby/internal/compiler_is/apple.h +fcntl.o: $(hdrdir)/ruby/internal/compiler_is/clang.h +fcntl.o: $(hdrdir)/ruby/internal/compiler_is/gcc.h +fcntl.o: $(hdrdir)/ruby/internal/compiler_is/intel.h +fcntl.o: $(hdrdir)/ruby/internal/compiler_is/msvc.h +fcntl.o: $(hdrdir)/ruby/internal/compiler_is/sunpro.h +fcntl.o: $(hdrdir)/ruby/internal/compiler_since.h +fcntl.o: $(hdrdir)/ruby/internal/config.h +fcntl.o: $(hdrdir)/ruby/internal/constant_p.h +fcntl.o: $(hdrdir)/ruby/internal/core.h +fcntl.o: $(hdrdir)/ruby/internal/core/rarray.h +fcntl.o: $(hdrdir)/ruby/internal/core/rbasic.h +fcntl.o: $(hdrdir)/ruby/internal/core/rbignum.h +fcntl.o: $(hdrdir)/ruby/internal/core/rclass.h +fcntl.o: $(hdrdir)/ruby/internal/core/rdata.h +fcntl.o: $(hdrdir)/ruby/internal/core/rfile.h +fcntl.o: $(hdrdir)/ruby/internal/core/rhash.h +fcntl.o: $(hdrdir)/ruby/internal/core/robject.h +fcntl.o: $(hdrdir)/ruby/internal/core/rregexp.h +fcntl.o: $(hdrdir)/ruby/internal/core/rstring.h +fcntl.o: $(hdrdir)/ruby/internal/core/rstruct.h +fcntl.o: $(hdrdir)/ruby/internal/core/rtypeddata.h +fcntl.o: $(hdrdir)/ruby/internal/ctype.h +fcntl.o: $(hdrdir)/ruby/internal/dllexport.h +fcntl.o: $(hdrdir)/ruby/internal/dosish.h +fcntl.o: $(hdrdir)/ruby/internal/error.h +fcntl.o: $(hdrdir)/ruby/internal/eval.h +fcntl.o: $(hdrdir)/ruby/internal/event.h +fcntl.o: $(hdrdir)/ruby/internal/fl_type.h +fcntl.o: $(hdrdir)/ruby/internal/gc.h +fcntl.o: $(hdrdir)/ruby/internal/glob.h +fcntl.o: $(hdrdir)/ruby/internal/globals.h +fcntl.o: $(hdrdir)/ruby/internal/has/attribute.h +fcntl.o: $(hdrdir)/ruby/internal/has/builtin.h +fcntl.o: $(hdrdir)/ruby/internal/has/c_attribute.h +fcntl.o: $(hdrdir)/ruby/internal/has/cpp_attribute.h +fcntl.o: $(hdrdir)/ruby/internal/has/declspec_attribute.h +fcntl.o: $(hdrdir)/ruby/internal/has/extension.h +fcntl.o: $(hdrdir)/ruby/internal/has/feature.h +fcntl.o: $(hdrdir)/ruby/internal/has/warning.h +fcntl.o: $(hdrdir)/ruby/internal/intern/array.h +fcntl.o: $(hdrdir)/ruby/internal/intern/bignum.h +fcntl.o: $(hdrdir)/ruby/internal/intern/class.h +fcntl.o: $(hdrdir)/ruby/internal/intern/compar.h +fcntl.o: $(hdrdir)/ruby/internal/intern/complex.h +fcntl.o: $(hdrdir)/ruby/internal/intern/cont.h +fcntl.o: $(hdrdir)/ruby/internal/intern/dir.h +fcntl.o: $(hdrdir)/ruby/internal/intern/enum.h +fcntl.o: $(hdrdir)/ruby/internal/intern/enumerator.h +fcntl.o: $(hdrdir)/ruby/internal/intern/error.h +fcntl.o: $(hdrdir)/ruby/internal/intern/eval.h +fcntl.o: $(hdrdir)/ruby/internal/intern/file.h +fcntl.o: $(hdrdir)/ruby/internal/intern/hash.h +fcntl.o: $(hdrdir)/ruby/internal/intern/io.h +fcntl.o: $(hdrdir)/ruby/internal/intern/load.h +fcntl.o: $(hdrdir)/ruby/internal/intern/marshal.h +fcntl.o: $(hdrdir)/ruby/internal/intern/numeric.h +fcntl.o: $(hdrdir)/ruby/internal/intern/object.h +fcntl.o: $(hdrdir)/ruby/internal/intern/parse.h +fcntl.o: $(hdrdir)/ruby/internal/intern/proc.h +fcntl.o: $(hdrdir)/ruby/internal/intern/process.h +fcntl.o: $(hdrdir)/ruby/internal/intern/random.h +fcntl.o: $(hdrdir)/ruby/internal/intern/range.h +fcntl.o: $(hdrdir)/ruby/internal/intern/rational.h +fcntl.o: $(hdrdir)/ruby/internal/intern/re.h +fcntl.o: $(hdrdir)/ruby/internal/intern/ruby.h +fcntl.o: $(hdrdir)/ruby/internal/intern/select.h +fcntl.o: $(hdrdir)/ruby/internal/intern/select/largesize.h +fcntl.o: $(hdrdir)/ruby/internal/intern/set.h +fcntl.o: $(hdrdir)/ruby/internal/intern/signal.h +fcntl.o: $(hdrdir)/ruby/internal/intern/sprintf.h +fcntl.o: $(hdrdir)/ruby/internal/intern/string.h +fcntl.o: $(hdrdir)/ruby/internal/intern/struct.h +fcntl.o: $(hdrdir)/ruby/internal/intern/thread.h +fcntl.o: $(hdrdir)/ruby/internal/intern/time.h +fcntl.o: $(hdrdir)/ruby/internal/intern/variable.h +fcntl.o: $(hdrdir)/ruby/internal/intern/vm.h +fcntl.o: $(hdrdir)/ruby/internal/interpreter.h +fcntl.o: $(hdrdir)/ruby/internal/iterator.h +fcntl.o: $(hdrdir)/ruby/internal/memory.h +fcntl.o: $(hdrdir)/ruby/internal/method.h +fcntl.o: $(hdrdir)/ruby/internal/module.h +fcntl.o: $(hdrdir)/ruby/internal/newobj.h +fcntl.o: $(hdrdir)/ruby/internal/scan_args.h +fcntl.o: $(hdrdir)/ruby/internal/special_consts.h +fcntl.o: $(hdrdir)/ruby/internal/static_assert.h +fcntl.o: $(hdrdir)/ruby/internal/stdalign.h +fcntl.o: $(hdrdir)/ruby/internal/stdbool.h +fcntl.o: $(hdrdir)/ruby/internal/stdckdint.h +fcntl.o: $(hdrdir)/ruby/internal/symbol.h +fcntl.o: $(hdrdir)/ruby/internal/value.h +fcntl.o: $(hdrdir)/ruby/internal/value_type.h +fcntl.o: $(hdrdir)/ruby/internal/variable.h +fcntl.o: $(hdrdir)/ruby/internal/warning_push.h +fcntl.o: $(hdrdir)/ruby/internal/xmalloc.h fcntl.o: $(hdrdir)/ruby/missing.h fcntl.o: $(hdrdir)/ruby/ruby.h fcntl.o: $(hdrdir)/ruby/st.h diff --git a/ext/fcntl/fcntl.c b/ext/fcntl/fcntl.c index c93694c431..b987e237dd 100644 --- a/ext/fcntl/fcntl.c +++ b/ext/fcntl/fcntl.c @@ -28,7 +28,10 @@ pack up your own arguments to pass as args for locking functions, etc. #include "ruby.h" #include <fcntl.h> -/* Fcntl loads the constants defined in the system's <fcntl.h> C header +/* + * Document-module: Fcntl + * + * Fcntl loads the constants defined in the system's <fcntl.h> C header * file, and used with both the fcntl(2) and open(2) POSIX system calls. * * To perform a fcntl(2) operation, use IO::fcntl. @@ -61,13 +64,19 @@ pack up your own arguments to pass as args for locking functions, etc. * f.fcntl(Fcntl::F_SETFL, Fcntl::O_NONBLOCK|m) * */ + +#define FCNTL_VERSION "1.3.0" + void Init_fcntl(void) { VALUE mFcntl = rb_define_module("Fcntl"); + + /* The version string. */ + rb_define_const(mFcntl, "VERSION", rb_str_new_cstr(FCNTL_VERSION)); + #ifdef F_DUPFD - /* Document-const: F_DUPFD - * + /* * Duplicate a file descriptor to the minimum unused file descriptor * greater than or equal to the argument. * @@ -78,168 +87,214 @@ Init_fcntl(void) rb_define_const(mFcntl, "F_DUPFD", INT2NUM(F_DUPFD)); #endif #ifdef F_GETFD - /* Document-const: F_GETFD - * + /* * Read the close-on-exec flag of a file descriptor. */ rb_define_const(mFcntl, "F_GETFD", INT2NUM(F_GETFD)); #endif #ifdef F_GETLK - /* Document-const: F_GETLK - * + /* * Determine whether a given region of a file is locked. This uses one of * the F_*LK flags. */ rb_define_const(mFcntl, "F_GETLK", INT2NUM(F_GETLK)); #endif #ifdef F_SETFD - /* Document-const: F_SETFD - * + /* * Set the close-on-exec flag of a file descriptor. */ rb_define_const(mFcntl, "F_SETFD", INT2NUM(F_SETFD)); #endif #ifdef F_GETFL - /* Document-const: F_GETFL - * + /* * Get the file descriptor flags. This will be one or more of the O_* * flags. */ rb_define_const(mFcntl, "F_GETFL", INT2NUM(F_GETFL)); #endif #ifdef F_SETFL - /* Document-const: F_SETFL - * + /* * Set the file descriptor flags. This will be one or more of the O_* * flags. */ rb_define_const(mFcntl, "F_SETFL", INT2NUM(F_SETFL)); #endif #ifdef F_SETLK - /* Document-const: F_SETLK - * + /* * Acquire a lock on a region of a file. This uses one of the F_*LCK * flags. */ rb_define_const(mFcntl, "F_SETLK", INT2NUM(F_SETLK)); #endif #ifdef F_SETLKW - /* Document-const: F_SETLKW - * + /* * Acquire a lock on a region of a file, waiting if necessary. This uses * one of the F_*LCK flags */ rb_define_const(mFcntl, "F_SETLKW", INT2NUM(F_SETLKW)); #endif #ifdef FD_CLOEXEC - /* Document-const: FD_CLOEXEC - * + /* * the value of the close-on-exec flag. */ rb_define_const(mFcntl, "FD_CLOEXEC", INT2NUM(FD_CLOEXEC)); #endif #ifdef F_RDLCK - /* Document-const: F_RDLCK - * + /* * Read lock for a region of a file */ rb_define_const(mFcntl, "F_RDLCK", INT2NUM(F_RDLCK)); #endif #ifdef F_UNLCK - /* Document-const: F_UNLCK - * + /* * Remove lock for a region of a file */ rb_define_const(mFcntl, "F_UNLCK", INT2NUM(F_UNLCK)); #endif #ifdef F_WRLCK - /* Document-const: F_WRLCK - * + /* * Write lock for a region of a file */ rb_define_const(mFcntl, "F_WRLCK", INT2NUM(F_WRLCK)); #endif +#ifdef F_SETPIPE_SZ + /* + * Change the capacity of the pipe referred to by fd to be at least arg bytes. + */ + rb_define_const(mFcntl, "F_SETPIPE_SZ", INT2NUM(F_SETPIPE_SZ)); +#endif +#ifdef F_GETPIPE_SZ + /* + * Return (as the function result) the capacity of the pipe referred to by fd. + */ + rb_define_const(mFcntl, "F_GETPIPE_SZ", INT2NUM(F_GETPIPE_SZ)); +#endif #ifdef O_CREAT - /* Document-const: O_CREAT - * + /* * Create the file if it doesn't exist */ rb_define_const(mFcntl, "O_CREAT", INT2NUM(O_CREAT)); #endif #ifdef O_EXCL - /* Document-const: O_EXCL - * + /* * Used with O_CREAT, fail if the file exists */ rb_define_const(mFcntl, "O_EXCL", INT2NUM(O_EXCL)); #endif #ifdef O_NOCTTY - /* Document-const: O_NOCTTY - * + /* * Open TTY without it becoming the controlling TTY */ rb_define_const(mFcntl, "O_NOCTTY", INT2NUM(O_NOCTTY)); #endif #ifdef O_TRUNC - /* Document-const: O_TRUNC - * + /* * Truncate the file on open */ rb_define_const(mFcntl, "O_TRUNC", INT2NUM(O_TRUNC)); #endif #ifdef O_APPEND - /* Document-const: O_APPEND - * + /* * Open the file in append mode */ rb_define_const(mFcntl, "O_APPEND", INT2NUM(O_APPEND)); #endif #ifdef O_NONBLOCK - /* Document-const: O_NONBLOCK - * + /* * Open the file in non-blocking mode */ rb_define_const(mFcntl, "O_NONBLOCK", INT2NUM(O_NONBLOCK)); #endif #ifdef O_NDELAY - /* Document-const: O_NDELAY - * + /* * Open the file in non-blocking mode */ rb_define_const(mFcntl, "O_NDELAY", INT2NUM(O_NDELAY)); #endif #ifdef O_RDONLY - /* Document-const: O_RDONLY - * + /* * Open the file in read-only mode */ rb_define_const(mFcntl, "O_RDONLY", INT2NUM(O_RDONLY)); #endif #ifdef O_RDWR - /* Document-const: O_RDWR - * + /* * Open the file in read-write mode */ rb_define_const(mFcntl, "O_RDWR", INT2NUM(O_RDWR)); #endif #ifdef O_WRONLY - /* Document-const: O_WRONLY - * + /* * Open the file in write-only mode. */ rb_define_const(mFcntl, "O_WRONLY", INT2NUM(O_WRONLY)); #endif -#ifdef O_ACCMODE - /* Document-const: O_ACCMODE - * +#ifndef O_ACCMODE + int O_ACCMODE = (O_RDONLY | O_WRONLY | O_RDWR); +#endif + /* * Mask to extract the read/write flags */ rb_define_const(mFcntl, "O_ACCMODE", INT2FIX(O_ACCMODE)); -#else - /* Document-const: O_ACCMODE - * - * Mask to extract the read/write flags +#ifdef F_DUP2FD + /* + * It is a FreeBSD specific constant and equivalent + * to dup2 call. + */ + rb_define_const(mFcntl, "F_DUP2FD", INT2NUM(F_DUP2FD)); +#endif +#ifdef F_DUP2FD_CLOEXEC + /* + * It is a FreeBSD specific constant and acts + * similarly as F_DUP2FD but set the FD_CLOEXEC + * flag in addition. + */ + rb_define_const(mFcntl, "F_DUP2FD_CLOEXEC", INT2NUM(F_DUP2FD_CLOEXEC)); +#endif + +#ifdef F_PREALLOCATE + /* + * macOS specific flag used for preallocating file space. + */ + rb_define_const(mFcntl, "F_PREALLOCATE", INT2NUM(F_PREALLOCATE)); +#endif + +#ifdef F_ALLOCATECONTIG + /* + * macOS specific flag used with F_PREALLOCATE for allocating contiguous + * space. + */ + rb_define_const(mFcntl, "F_ALLOCATECONTIG", INT2NUM(F_ALLOCATECONTIG)); +#endif + +#ifdef F_ALLOCATEALL + /* + * macOS specific flag used with F_PREALLOCATE for allocating all contiguous + * space or no space. + */ + rb_define_const(mFcntl, "F_ALLOCATEALL", INT2NUM(F_ALLOCATEALL)); +#endif + +#ifdef F_ALLOCATEPERSIST + /* + * macOS specific flag used with F_PREALLOCATE. Allocate space that is not + * freed when close is called. + */ + rb_define_const(mFcntl, "F_ALLOCATEPERSIST", INT2NUM(F_ALLOCATEPERSIST)); +#endif + +#ifdef F_PEOFPOSMODE + /* + * macOS specific flag used with F_PREALLOCATE. Allocate from the physical + * end of file + */ + rb_define_const(mFcntl, "F_PEOFPOSMODE", INT2NUM(F_PEOFPOSMODE)); +#endif + +#ifdef F_VOLPOSMODE + /* + * macOS specific flag used with F_PREALLOCATE. Allocate from the volume offset. */ - rb_define_const(mFcntl, "O_ACCMODE", INT2FIX(O_RDONLY | O_WRONLY | O_RDWR)); + rb_define_const(mFcntl, "F_VOLPOSMODE", INT2NUM(F_VOLPOSMODE)); #endif } diff --git a/ext/fcntl/fcntl.gemspec b/ext/fcntl/fcntl.gemspec index 0e3194fbdc..613a90d1ae 100644 --- a/ext/fcntl/fcntl.gemspec +++ b/ext/fcntl/fcntl.gemspec @@ -1,25 +1,32 @@ # coding: utf-8 # frozen_string_literal: true +source_version = ["", "ext/fcntl/"].find do |dir| + begin + break File.open(File.join(__dir__, "#{dir}fcntl.c")) {|f| + f.gets("\n#define FCNTL_VERSION ") + f.gets[/\s*"(.+)"/, 1] + } + rescue Errno::ENOENT + end +end + Gem::Specification.new do |spec| spec.name = "fcntl" - spec.version = "1.0.0" + spec.version = source_version spec.authors = ["Yukihiro Matsumoto"] spec.email = ["matz@ruby-lang.org"] spec.summary = "Loads constants defined in the OS fcntl.h C header file" spec.description = "Loads constants defined in the OS fcntl.h C header file" spec.homepage = "https://github.com/ruby/fcntl" - spec.license = "BSD-2-Clause" + spec.licenses = ["Ruby", "BSD-2-Clause"] spec.files = ["ext/fcntl/extconf.rb", "ext/fcntl/fcntl.c"] + spec.extra_rdoc_files = [".document", ".rdoc_options", "BSDL", "COPYING", "README.md"] spec.bindir = "exe" spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) } spec.require_paths = ["lib"] spec.extensions = "ext/fcntl/extconf.rb" - spec.required_ruby_version = ">= 2.3.0" - - spec.add_development_dependency "bundler", "~> 1.14" - spec.add_development_dependency "rake", "~> 12" - spec.add_development_dependency "rake-compiler" + spec.required_ruby_version = ">= 2.5.0" end |
