[前][次][番号順一覧][スレッド一覧]

ruby-changes:6693

From: nobu <ko1@a...>
Date: Fri, 25 Jul 2008 16:22:26 +0900 (JST)
Subject: [ruby-changes:6693] Ruby:r18209 (mvm): * thread.c (ruby_thread_getcwd): fix for non-openat platforms.

nobu	2008-07-25 16:21:26 +0900 (Fri, 25 Jul 2008)

  New Revision: 18209

  http://svn.ruby-lang.org/cgi-bin/viewvc.cgi?view=rev&revision=18209

  Log:
    * thread.c (ruby_thread_getcwd): fix for non-openat platforms.
    
    * util.c (ruby_sys_getcwd): renamed and reverted.

  Modified files:
    branches/mvm/ChangeLog
    branches/mvm/iseq.c
    branches/mvm/thread.c
    branches/mvm/util.c
    branches/mvm/variable.c

Index: mvm/ChangeLog
===================================================================
--- mvm/ChangeLog	(revision 18208)
+++ mvm/ChangeLog	(revision 18209)
@@ -1,9 +1,13 @@
-Fri Jul 25 15:05:42 2008  Nobuyoshi Nakada  <nobu@r...>
+Fri Jul 25 16:21:14 2008  Nobuyoshi Nakada  <nobu@r...>
 
 	* include/ruby/io.h (ruby_absolute_path_p): published.
 
 	* io.c (rb_sysopen_prepare): fix for non-openat platforms.
 
+	* thread.c (ruby_thread_getcwd): fix for non-openat platforms.
+
+	* util.c (ruby_sys_getcwd): renamed and reverted.
+
 Fri Jul 25 10:00:00 2008  Martin Duerst  <duerst@i...>
 
 	* test/ruby/test_transcode.rb: refactoring/cleanup of
Index: mvm/variable.c
===================================================================
--- mvm/variable.c	(revision 18208)
+++ mvm/variable.c	(revision 18209)
@@ -409,7 +409,7 @@
 static void
 vm_marker(void *var)
 {
-    rb_gc_mark(*rb_vm_specific_ptr((int)var));
+    rb_gc_mark(*rb_vm_specific_ptr((int)(VALUE)var));
 }
 
 static void
@@ -484,7 +484,7 @@
     gvar = rb_global_entry(id)->var;
     if (vmkey != -1) {
 	gvar->flags |= gv_vm_specific_storage;
-	gvar->data = (void*)vmkey;
+	gvar->data = (void*)(VALUE)vmkey;
 	gvar->marker = vm_marker;
     }
     else {
@@ -538,7 +538,7 @@
     id = global_id(name);
     gvar = rb_global_entry(id)->var;
     gvar->flags |= gv_vm_specific_storage;
-    gvar->data = (void*)vmkey;
+    gvar->data = (void*)(VALUE)vmkey;
     gvar->getter = getter;
     gvar->setter = setter;
     gvar->marker = vm_marker;
@@ -682,7 +682,7 @@
     struct global_variable *var = entry->var;
     void *data = var->data;
     if (var->flags & gv_vm_specific_storage) {
-	data = (void *)rb_vm_specific_ptr((int)data);
+	data = rb_vm_specific_ptr((int)(VALUE)data);
     }
     return (*var->getter)(entry->id, data, var);
 }
@@ -722,7 +722,7 @@
     if (rb_safe_level() >= 4)
 	rb_raise(rb_eSecurityError, "Insecure: can't change global variable value");
     if (var->flags & gv_vm_specific_storage) {
-	data = (void *)rb_vm_specific_ptr((int)data);
+	data = rb_vm_specific_ptr((int)(VALUE)data);
     }
     (*var->setter)(val, entry->id, data, var);
 
Index: mvm/iseq.c
===================================================================
--- mvm/iseq.c	(revision 18208)
+++ mvm/iseq.c	(revision 18209)
@@ -731,7 +731,7 @@
     }
     else {
 	rb_str_catf(str, "%04d %-16.*s ", pos,
-		    strcspn(insn_name_buff, "_"), insn_name_buff);
+		    (int)strcspn(insn_name_buff, "_"), insn_name_buff);
     }
 
     for (j = 0; types[j]; j++) {
Index: mvm/thread.c
===================================================================
--- mvm/thread.c	(revision 18208)
+++ mvm/thread.c	(revision 18209)
@@ -3467,17 +3467,21 @@
 char *
 ruby_thread_getcwd(rb_thread_t *th)
 {
+    char *ruby_sys_getcwd(void);
+    char *cwd;
 #if USE_OPENAT && defined HAVE_READLINK
     extern char *ruby_readlink(const char *, long *);
     static const char fdpat[] = "/proc/self/fd/%d";
-    char fdname[sizeof(fdpat) + sizeof(int) * 5 / 2], *cwd;
+    char fdname[sizeof(fdpat) + sizeof(int) * 5 / 2];
     long len;
 
     snprintf(fdname, sizeof(fdname), fdpat, th->cwd.fd);
     cwd = ruby_readlink(fdname, &len);
     if (cwd) return cwd;
 #endif
-    return ruby_strdup(th->cwd.path);
+    if ((cwd = th->cwd.path) != 0)
+	return ruby_strdup(cwd);
+    return ruby_sys_getcwd();
 }
 
 char *
Index: mvm/util.c
===================================================================
--- mvm/util.c	(revision 18208)
+++ mvm/util.c	(revision 18209)
@@ -739,6 +739,35 @@
     return tmp;
 }
 
+char *
+ruby_sys_getcwd(void)
+{
+#ifdef HAVE_GETCWD
+    int size = 200;
+    char *buf = xmalloc(size);
+
+    while (!getcwd(buf, size)) {
+	if (errno != ERANGE) {
+	    xfree(buf);
+	    rb_sys_fail("getcwd");
+	}
+	size *= 2;
+	buf = xrealloc(buf, size);
+    }
+#else
+# ifndef PATH_MAX
+#  define PATH_MAX 8192
+# endif
+    char *buf = xmalloc(PATH_MAX+1);
+
+    if (!getwd(buf)) {
+	xfree(buf);
+	rb_sys_fail("getwd");
+    }
+#endif
+    return buf;
+}
+
 /****************************************************************
  *
  * The author of this software is David M. Gay.

--
ML: ruby-changes@q...
Info: http://www.atdot.net/~ko1/quickml/

[前][次][番号順一覧][スレッド一覧]