[#33000] [Ruby 1.9-Bug#4014][Open] Case-Sensitivity of Property Names Depends on Regexp Encoding — Run Paint Run Run <redmine@...>

Bug #4014: Case-Sensitivity of Property Names Depends on Regexp Encoding

11 messages 2010/11/01

[#33021] Re: [Ruby 1.9-Feature#4015][Open] File::DIRECT Constant for O_DIRECT — Yukihiro Matsumoto <matz@...>

Hi,

15 messages 2010/11/02

[#33139] [Ruby 1.9-Bug#4044][Open] Regex matching errors when using \W character class and /i option — Ben Hoskings <redmine@...>

Bug #4044: Regex matching errors when using \W character class and /i option

8 messages 2010/11/11

[#33162] Windows Unicode (chcp 65001) Generates incorrect output — Luis Lavena <luislavena@...>

Hello,

10 messages 2010/11/14

[#33246] [Ruby 1.9-Feature#4068][Open] Replace current standard Date/DateTime library with home_run — Jeremy Evans <redmine@...>

Feature #4068: Replace current standard Date/DateTime library with home_run

40 messages 2010/11/17

[#33255] [Ruby 1.9-Feature#4071][Open] support basic auth for Net::HTTP.get requests — "coderrr ." <redmine@...>

Feature #4071: support basic auth for Net::HTTP.get requests

23 messages 2010/11/19

[#33322] [Ruby 1.9-Feature#4085][Open] Refinements and nested methods — Shugo Maeda <redmine@...>

Feature #4085: Refinements and nested methods

94 messages 2010/11/24
[#33345] Re: [Ruby 1.9-Feature#4085][Open] Refinements and nested methods — Yusuke ENDOH <mame@...> 2010/11/25

Hi,

[#33356] Re: [Ruby 1.9-Feature#4085][Open] Refinements and nested methods — Shugo Maeda <shugo@...> 2010/11/25

Hi,

[#33375] Re: [Ruby 1.9-Feature#4085][Open] Refinements and nested methods — Yusuke ENDOH <mame@...> 2010/11/25

Hi,

[#33381] Re: [Ruby 1.9-Feature#4085][Open] Refinements and nested methods — Shugo Maeda <shugo@...> 2010/11/25

Hi,

[#33387] Re: [Ruby 1.9-Feature#4085][Open] Refinements and nested methods — Magnus Holm <judofyr@...> 2010/11/25

Woah, this is very nice stuff! Some comments/questions:

[#33487] Re: [Ruby 1.9-Feature#4085][Open] Refinements and nested methods — Charles Oliver Nutter <headius@...> 2010/11/30

This is a long response, and for that I apologize. I want to make sure

[#33535] Re: [Ruby 1.9-Feature#4085][Open] Refinements and nested methods — Yusuke ENDOH <mame@...> 2010/12/03

Hi,

[#33519] Re: [Ruby 1.9-Feature#4085][Open] Refinements and nested methods — Shugo Maeda <shugo@...> 2010/12/02

Hi,

[#33523] Re: [Ruby 1.9-Feature#4085][Open] Refinements and nested methods — Yusuke ENDOH <mame@...> 2010/12/02

Hi,

[#33539] Re: [Ruby 1.9-Feature#4085][Open] Refinements and nested methods — Shugo Maeda <shugo@...> 2010/12/03

Hi,

[#33543] Re: [Ruby 1.9-Feature#4085][Open] Refinements and nested methods — Yusuke ENDOH <mame@...> 2010/12/03

Hi,

[#33546] Re: [Ruby 1.9-Feature#4085][Open] Refinements and nested methods — Shugo Maeda <shugo@...> 2010/12/03

Hi,

[#33548] Re: [Ruby 1.9-Feature#4085][Open] Refinements and nested methods — Yusuke ENDOH <mame@...> 2010/12/03

Hi,

[#33567] Re: [Ruby 1.9-Feature#4085][Open] Refinements and nested methods — Shugo Maeda <shugo@...> 2010/12/04

Hi,

[#33595] Re: [Ruby 1.9-Feature#4085][Open] Refinements and nested methods — Charles Oliver Nutter <headius@...> 2010/12/06

On Sat, Dec 4, 2010 at 6:32 AM, Shugo Maeda <shugo@ruby-lang.org> wrote:

[#33367] Planning to release 1.8.7 fixes on 12/25 (Japanese timezone) — Urabe Shyouhei <shyouhei@...>

Hello,

20 messages 2010/11/25
[#33439] Re: Planning to release 1.8.7 fixes on 12/25 (Japanese timezone) — Luis Lavena <luislavena@...> 2010/11/27

2010/11/25 Urabe Shyouhei <shyouhei@ruby-lang.org>:

[#33456] [Request for Comment] avoid timer thread — SASADA Koichi <ko1@...>

Hi,

25 messages 2010/11/29
[#35152] Re: [Request for Comment] avoid timer thread — Mark Somerville <mark@...> 2011/02/08

On Mon, Nov 29, 2010 at 11:53:03AM +0900, SASADA Koichi wrote:

[#36077] Re: [Request for Comment] avoid timer thread — Mark Somerville <mark@...> 2011/05/09

On Tue, Feb 08, 2011 at 09:24:13PM +0900, Mark Somerville wrote:

[#36952] Re: [Request for Comment] avoid timer thread — Eric Wong <normalperson@...> 2011/06/10

Mark Somerville <mark@scottishclimbs.com> wrote:

[#37080] Re: [Request for Comment] avoid timer thread — Mark Somerville <mark@...> 2011/06/13

On Sat, Jun 11, 2011 at 05:57:11AM +0900, Eric Wong wrote:

[#37103] Re: [Request for Comment] avoid timer thread — Eric Wong <normalperson@...> 2011/06/13

Mark Somerville <mark@scottishclimbs.com> wrote:

[#37187] Re: [Request for Comment] avoid timer thread — SASADA Koichi <ko1@...> 2011/06/16

(2011/06/14 3:37), Eric Wong wrote:

[#37195] Re: [Request for Comment] avoid timer thread — Eric Wong <normalperson@...> 2011/06/17

SASADA Koichi <ko1@atdot.net> wrote:

[#37205] Re: [Request for Comment] avoid timer thread — Eric Wong <normalperson@...> 2011/06/17

Eric Wong <normalperson@yhbt.net> wrote:

[#33469] [Ruby 1.9-Feature#4100][Open] Improve Net::HTTP documentation — Eric Hodel <redmine@...>

Feature #4100: Improve Net::HTTP documentation

12 messages 2010/11/29

[ruby-core:33146] [Ruby 1.9-Feature#4046][Open] Saving C's **argv and cwd allows Ruby programs to reliably restart themselves

From: Rocky Bernstein <redmine@...>
Date: 2010-11-12 03:33:29 UTC
List: ruby-core #33146
Feature #4046: Saving C's **argv and cwd allows Ruby programs to reliably restart themselves
http://redmine.ruby-lang.org/issues/show/4046

Author: Rocky Bernstein
Status: Open, Priority: Normal
Target version: 1.9.x

In a debugger often one gets to a state where one just wants to restart everything exactly the way the program was previously invoked. 

It would helpful if Ruby saved **argv and cwd. 

The attached patch saves these in RubyVM::OS_ARGV and RubyVM::OS_STARTUP_DIR. With this,
if a Ruby program wants to restart itself, it can run:

  chdir RubyVM::OS_STARTUP_DIR
  exec(*RubyVM::OS_ARGV)


----------------------------------------
http://redmine.ruby-lang.org

Attachments (1)

OS_ARGV_and_STARTUP_DIR.patch (3.02 KB, text/x-diff)
Index: include/ruby/ruby.h
===================================================================
--- include/ruby/ruby.h	(revision 29767)
+++ include/ruby/ruby.h	(working copy)
@@ -1454,6 +1454,12 @@
 #include "ruby/subst.h"
 #endif
 
+struct origarg {
+    int argc;
+    char **argv;
+    char *os_startup_dir;
+};
+
 #if defined(__cplusplus)
 #if 0
 { /* satisfy cc-mode */
Index: vm.c
===================================================================
--- vm.c	(revision 29767)
+++ vm.c	(working copy)
@@ -1975,6 +1975,8 @@
     return ary;
 }
 
+extern struct origarg origarg;
+
 void
 Init_VM(void)
 {
@@ -1987,6 +1990,21 @@
     rb_undef_alloc_func(rb_cRubyVM);
     rb_undef_method(CLASS_OF(rb_cRubyVM), "new");
 
+    /** ::VM::OS_ARGV and OS_STARTUP_DIR */
+    rb_define_const(rb_cRubyVM, "OS_STARTUP_DIR", 
+		    strlen(origarg.os_startup_dir) > 0 ? 
+		    rb_str_new2(origarg.os_startup_dir) : Qnil);
+    {
+	int argc;
+	char **argv;
+	VALUE ary = rb_ary_new();
+	rb_define_const(rb_cRubyVM, "OS_ARGV", ary);
+	for (argc = origarg.argc, argv = origarg.argv; 
+	     argc > 0; argc--, argv++) {
+	    rb_ary_push(ary, rb_str_new2(*argv));
+	}
+    }
+
     /* ::VM::FrozenCore */
     fcore = rb_class_new(rb_cBasicObject);
     RBASIC(fcore)->flags = T_ICLASS;
Index: ruby.c
===================================================================
--- ruby.c	(revision 29767)
+++ ruby.c	(working copy)
@@ -118,13 +118,11 @@
 static void forbid_setid(const char *, struct cmdline_options *);
 #define forbid_setid(s) forbid_setid(s, opt)
 
-static struct {
-    int argc;
-    char **argv;
+struct origarg origarg;
+
 #if !defined(PSTAT_SETCMD) && !defined(HAVE_SETPROCTITLE)
-    size_t len;
+    size_t origarg_len;
 #endif
-} origarg;
 
 static void
 usage(const char *name)
@@ -1752,8 +1750,8 @@
     setproctitle("%.*s", (int)i, s);
 #else
 
-    if ((size_t)i > origarg.len - origarg.argc) {
-	i = (long)(origarg.len - origarg.argc);
+    if ((size_t)i > origarg_len - origarg.argc) {
+	i = (long)(origarg_len - origarg.argc);
     }
 
     memcpy(origarg.argv[0], s, i);
@@ -1763,8 +1761,8 @@
 	char *t = origarg.argv[0] + i;
 	*t = '\0';
 
-	if ((size_t)(i + 1) < origarg.len) {
-	    memset(t + 1, '\0', origarg.len - i - 1);
+	if ((size_t)(i + 1) < origarg_len) {
+	    memset(t + 1, '\0', origarg_len - i - 1);
 	}
 	for (j = 1; j < origarg.argc; j++) {
 	    origarg.argv[j] = t;
@@ -1891,8 +1889,19 @@
 #endif
     origarg.argc = *argc;
     origarg.argv = *argv;
+    origarg.os_startup_dir = malloc(MAXPATHLEN);
+#ifdef HAVE_GETCWD
+    if (!getcwd(origarg.os_startup_dir, MAXPATHLEN)) 
+	origarg.os_startup_dir[0] = '\0';
+#else
+    if (!getwd(origarg.os_startup_dir)) 
+	origarg.os_startup_dir[0] = '\0';
+#endif
+    origarg.os_startup_dir = realloc(origarg.os_startup_dir, 
+				     strlen(origarg.os_startup_dir)+1);
+
 #if !defined(PSTAT_SETCMD) && !defined(HAVE_SETPROCTITLE)
-    origarg.len = get_arglen(origarg.argc, origarg.argv);
+    origarg_len = get_arglen(origarg.argc, origarg.argv);
 #endif
 #if defined(USE_DLN_A_OUT)
     dln_argv0 = origarg.argv[0];

In This Thread

Prev Next