[#11852] continuations in Ruby 1.9? — David Flanagan <david@...>
In a comment on my recent blog post
On 8/6/07, David Flanagan <david@davidflanagan.com> wrote:
[#11860] Is this really what we want? — James Edward Gray II <james@...>
I'm investigating some recent breakage in FasterCSV and have tracking
Hi,
[#11871] ruby-openssl: == incorrect for X509-Subjects — Hadmut Danisch <hadmut@...>
Hi,
[#11876] priorities of newly-created threads — David Flanagan <david@...>
Hi,
Hi,
[#11886] Core dump with simple web scraper when run via cron — Daniel Berger <Daniel.Berger@...>
Hi all,
[#11890] Ruby and Solaris door library — "Hiro Asari" <asari.ruby@...>
Hi, there. This is my first patch against ruby. I think I followed
Hiro Asari wrote:
On 8/13/07, Daniel Berger <djberg96@gmail.com> wrote:
> -----Original Message-----
On 8/15/07, Berger, Daniel <Daniel.Berger@qwest.com> wrote:
[#11893] UDP sockets raise exception on MIPS platform — Brian Candler <B.Candler@...>
I am running ruby-1.8.6 under OpenWrt (*), which is a small MIPS platform
[#11894] IO#seek and whence problem — Bertram Scharpf <lists@...>
[#11899] pack/unpack 64bit Integers — Hadmut Danisch <hadmut@...>
Hi,
On Wed, Aug 15, 2007 at 06:50:01AM +0900, Hadmut Danisch wrote:
On Wed, Aug 15, 2007 at 02:45:20PM +0900, Brian Candler wrote:
On Fri, Aug 17, 2007 at 05:17:09PM +0200, Hadmut Danisch wrote:
Dumb question of the day: are Kernel#proc and Kernel#lambda identical?
> Dumb question of the day: are Kernel#proc and Kernel#lambda identical?
[#11900] missing bison, gperf not detected, do I need ruby to build ruby? — "Gabor Szabo" <szabgab@...>
Hi,
On Wed, 15 Aug 2007, Gabor Szabo wrote:
> > It seems ./configure did not detect the fact that bison was missing from
[#11930] Bug in select? — "Robert Dober" <robert.dober@...>
Hi
[#11945] Smoke testing Ruby — "Gabor Szabo" <szabgab@...>
Hi,
On 8/21/07, Gabor Szabo <szabgab@gmail.com> wrote:
Ruby used to have the Triple-R project based on Rubicon: see
Hugh Sasse wrote:
[#11947] Splatting MatchData bug? — Jos Backus <jos@...>
$ /tmp/ruby-1.9/bin/ruby -v
[#11948] Fibers in Ruby 1.9? — David Flanagan <david@...>
I just noticed that my ruby1.9 build of August 17th includes a Fiber
David Flanagan wrote:
On 8/22/07, Daniel Berger <djberg96@gmail.com> wrote:
On Wed, 22 Aug 2007 20:50:12 +0900, "Francis Cianfrocca" <garbagecat10@gmail.com> wrote:
On 8/22/07, MenTaLguY <mental@rydia.net> wrote:
On Thu, 23 Aug 2007 00:57:01 +0900, "Francis Cianfrocca" <garbagecat10@gmail.com> wrote:
[#11960] coroutines with Fiber::Core — David Flanagan <david@...>
The following code works on Linux with today's snapshot of 1.9:
Hi,
[#11981] Inverse Square Root — "Dave Pederson" <dave.pederson@...>
Hello-
[#11988] String#length not working properly in Ruby 1.9 — "Vincent Isambart" <vincent.isambart@...>
I saw that Matz just merged his M17N implementation in the trunk.
Hi,
On Sat, 25 Aug 2007 10:54:20 +0200, Yukihiro Matsumoto
Hi,
On 8/25/07, Yukihiro Matsumoto <matz@ruby-lang.org> wrote:
Hi,
On 8/25/07, Yukihiro Matsumoto <matz@ruby-lang.org> wrote:
[#12025] how to build ruby on vms — "toni" <toni@...>
Hi,
[#12040] Pragmas in Ruby 1.9 — David Flanagan <david@...>
Hi,
[#12042] Encodings of string literals; explicit codepoint escapes? — David Flanagan <david@...>
This message contains queries that probably only Matz can answer:
Hi,
Yukihiro Matsumoto wrote:
On 8/31/07, Yukihiro Matsumoto <matz@ruby-lang.org> wrote:
Ruby and Solaris door library
Hi, there. This is my first patch against ruby. I think I followed
the guidelines, but if I made mistakes, please kindly point them out.
On Solaris (2.6 onwards, I believe), there is a local IPC mechanism
called doors.
It's not unlike named pipes, in that two processes communicate through
an entry in a filesystem. This naturally leads to:
door_path="/var/run/syslog_door"
File.door?(door_path) # => true
File.new(door_path).stat.door? # => true
File.ftype(door_path) # => "door"
test ?D, door_path # => true
The attached patch (against rev. 12920) will check for the presence of
door.h in configure.in, and adds a few methods in file.c to implement
the methods to check for doors. I've tested the patch on OpenSolaris
(build 55) and Mac OS X (10.4.10, so that it doesn't throw fits).
ChangeLog:
* configure.in: search for door.h
* file.c (preprocessor directive, rb_file_door_p(), rb_file_ftype(),
test_check(), rb_stat_D()): Implement various methods on doors.
Index: configure.in
===================================================================
--- configure.in (revision 12920)
+++ configure.in (working copy)
@@ -513,7 +513,7 @@
fcntl.h sys/fcntl.h sys/select.h sys/time.h
sys/times.h sys/param.h\
syscall.h pwd.h grp.h a.out.h utime.h memory.h
direct.h sys/resource.h \
sys/mkdev.h sys/utime.h netinet/in_systm.h float.h
ieeefp.h pthread.h \
- ucontext.h intrinsics.h)
+ ucontext.h intrinsics.h door.h)
dnl Check additional types.
AC_CHECK_SIZEOF(rlim_t, 0, [
Index: file.c
===================================================================
--- file.c (revision 12920)
+++ file.c (working copy)
@@ -62,6 +62,10 @@
#include <sys/mkdev.h>
#endif
+#ifdef HAVE_DOOR_H
+#include <door.h>
+#endif
+
#if !defined HAVE_LSTAT && !defined lstat
#define lstat stat
#endif
@@ -923,7 +927,31 @@
return Qfalse;
}
+/*
+ * Document-method: door?
+ *
+ * call-seq:
+ * File.door?(file_name) => true or false
+ *
+ * Returns <code>true</code> if the named file is a door,
+ * <code>false</code> otherwise.
+ *
+ * File.door?("/var/run/syslog_door")
+ */
+VALUE
+rb_file_door_p(VALUE obj, VALUE fname)
+{
+#ifdef S_ISDOOR
+ struct stat st;
+
+ if (rb_stat(fname, &st) < 0) return Qfalse;
+ if (S_ISDOOR(st.st_mode)) return Qtrue;
+#endif
+ return Qfalse;
+}
+
+
/*
* call-seq:
* File.pipe?(file_name) => true or false
@@ -1539,6 +1567,11 @@
t = "socket";
}
#endif
+#ifdef S_ISDOOR
+ else if (S_ISDOOR(st->st_mode)) {
+ t = "door";
+ }
+#endif
else {
t = "unknown";
}
@@ -3210,6 +3243,7 @@
* ?c | boolean | True if file1 is a character device
* ?C | Time | Last change time for file1
* ?d | boolean | True if file1 exists and is a directory
+ * ?D | boolean | True if file1 exists and is a door
* ?e | boolean | True if file1 exists
* ?f | boolean | True if file1 exists and is a regular file
* ?g | boolean | True if file1 has the \CF{setgid} bit
@@ -3261,7 +3295,7 @@
if (argc == 0) rb_raise(rb_eArgError, "wrong number of arguments");
cmd = NUM2CHR(argv[0]);
if (cmd == 0) goto unknown;
- if (strchr("bcdefgGkloOprRsSuwWxXz", cmd)) {
+ if (strchr("bcdDefgGkloOprRsSuwWxXz", cmd)) {
CHECK(1);
switch (cmd) {
case 'b':
@@ -3273,6 +3307,9 @@
case 'd':
return rb_file_directory_p(0, argv[1]);
+ case 'D':
+ return rb_file_door_p(0, argv[1]);
+
case 'a':
case 'e':
return rb_file_exist_p(0, argv[1]);
@@ -3505,6 +3542,26 @@
/*
* call-seq:
+ * stat.door? => true or false
+ *
+ * Returns <code>true</code> if <i>stat</i> is a door,
+ * <code>false</code> otherwise.
+ *
+ * File.stat("/var/run/syslog_door").door? #=> false
+ * File.stat(".").door? #=> false
+ */
+
+static VALUE
+rb_stat_D(VALUE obj)
+{
+#ifdef S_ISDOOR
+ if (S_ISDOOR(get_stat(obj)->st_mode)) return Qtrue;
+#endif
+ return Qfalse;
+}
+
+/*
+ * call-seq:
* stat.pipe? => true or false
*
* Returns <code>true</code> if the operating system supports pipes and
@@ -4338,6 +4395,7 @@
rb_cFile = rb_define_class("File", rb_cIO);
define_filetest_function("directory?", rb_file_directory_p, 1);
+ define_filetest_function("door?", rb_file_door_p, 1);
define_filetest_function("exist?", rb_file_exist_p, 1);
define_filetest_function("readable?", rb_file_readable_p, 1);
define_filetest_function("readable_real?", rb_file_readable_real_p, 1);
@@ -4465,6 +4523,7 @@
rb_define_method(rb_cStat, "ftype", rb_stat_ftype, 0);
rb_define_method(rb_cStat, "directory?", rb_stat_d, 0);
+ rb_define_method(rb_cStat, "door?", rb_stat_D, 0);
rb_define_method(rb_cStat, "readable?", rb_stat_r, 0);
rb_define_method(rb_cStat, "readable_real?", rb_stat_R, 0);
rb_define_method(rb_cStat, "world_readable?", rb_stat_wr, 0);
--
H. Asari