From: xkernigh@... Date: 2017-01-09T04:25:16+00:00 Subject: [ruby-core:79021] [Ruby trunk Feature#13095] [PATCH] io.c (rb_f_syscall): remove deprecation notice Issue #13095 has been updated by George Koehler. Kernel.syscall was a wrapper around syscall() or \_\_syscall() in libc, but it didn't use the correct types for arguments and return values. I suggest to use Fiddle to call syscall() or \_\_syscall() with the correct types for your system call. Here is a quick example for getdents64() in 32-bit PowerPC Linux. ~~~ ruby require 'fiddle' libc = Fiddle.dlopen('libc.so.6') libc_syscall = Fiddle::Function.new( libc['syscall'], [Fiddle::TYPE_INT, Fiddle::TYPE_INT, Fiddle::TYPE_VOIDP, Fiddle::TYPE_SIZE_T], Fiddle::TYPE_INT) getdents64 = 202 buf = "X" * 4096 fd = IO.sysopen('/dev', IO::RDONLY) ret = libc_syscall.(getdents64, fd, buf, buf.size) ret < 0 and raise SystemCallError, Fiddle.last_error while ret > 0 ino, off, reclen, type, name = buf.unpack('QqSCZ*') puts name buf.slice!(0...reclen) ret -= reclen end IO.new(fd).close ~~~ ~~~ $ ruby -v ruby 2.1.5p273 (2014-11-13) [powerpc-linux-gnu] $ ruby exam.rb | head . .. hidraw1 vcsa6 vcs6 vcsa5 vcs5 vcsa4 vcs4 vcsa3 ~~~ ---------------------------------------- Feature #13095: [PATCH] io.c (rb_f_syscall): remove deprecation notice https://bugs.ruby-lang.org/issues/13095#change-62429 * Author: Eric Wong * Status: Open * Priority: Normal * Assignee: * Target version: ---------------------------------------- io.c (rb_f_syscall): remove deprecation notice New, perhaps experimental syscalls appear all the time which may not and never be be supported by the system C library. Furthermore, on common GNU/Linux platforms, kernel development and releases happens at a much faster pace than GNU C library (glibc) development. In my experience, is more common for users to run recent, custom-built Linux kernels than a recent, custom-built glibc. (This is likely because Linux upstream has better built-in tooling for distro package management integration than glibc upstream). So, ruby should support users who want to deal with the latest and greatest syscalls in the kernel without having them wait for C library support. ---Files-------------------------------- 0001-io.c-rb_f_syscall-remove-deprecation-notice.patch (1.33 KB) -- https://bugs.ruby-lang.org/ Unsubscribe: