[#78949] [Ruby trunk Feature#13095] [PATCH] io.c (rb_f_syscall): remove deprecation notice — kosaki.motohiro@...
Issue #13095 has been updated by Motohiro KOSAKI.
3 messages
2017/01/03
[#78997] [Ruby trunk Bug#13110] Byte-based operations for String — shugo@...
Issue #13110 has been updated by Shugo Maeda.
3 messages
2017/01/06
[#79228] Re: [ruby-cvs:64576] naruse:r57410 (trunk): Prevent GC by volatile [Bug #13150] — Eric Wong <normalperson@...>
naruse@ruby-lang.org wrote:
5 messages
2017/01/23
[#79511] Re: [ruby-cvs:64576] naruse:r57410 (trunk): Prevent GC by volatile [Bug #13150]
— Eric Wong <normalperson@...>
2017/02/13
Eric Wong <normalperson@yhbt.net> wrote:
[#79518] Re: [ruby-cvs:64576] naruse:r57410 (trunk): Prevent GC by volatile [Bug #13150]
— Nobuyoshi Nakada <nobu@...>
2017/02/13
On 2017/02/13 10:04, Eric Wong wrote:
[#79298] [Ruby trunk Bug#13085][Assigned] io.c io_fwrite creates garbage — nobu@...
Issue #13085 has been updated by Nobuyoshi Nakada.
3 messages
2017/01/29
[#79337] Re: [ruby-changes:45397] normal:r57469 (trunk): io.c: recycle garbage on write — SASADA Koichi <ko1@...>
Eric:
4 messages
2017/01/31
[#79352] Re: [ruby-changes:45397] normal:r57469 (trunk): io.c: recycle garbage on write
— Eric Wong <normalperson@...>
2017/01/31
SASADA Koichi <ko1@atdot.net> wrote:
[ruby-core:79021] [Ruby trunk Feature#13095] [PATCH] io.c (rb_f_syscall): remove deprecation notice
From:
xkernigh@...
Date:
2017-01-09 04:25:16 UTC
List:
ruby-core #79021
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: <mailto:ruby-core-request@ruby-lang.org?subject=unsubscribe>
<http://lists.ruby-lang.org/cgi-bin/mailman/options/ruby-core>