summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ChangeLog5
-rw-r--r--eval.c11
-rw-r--r--ext/extmk.rb.in19
-rw-r--r--io.c7
-rw-r--r--lib/mkmf.rb24
5 files changed, 57 insertions, 9 deletions
diff --git a/ChangeLog b/ChangeLog
index b988dff1aa..3bc1746618 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,8 @@
+Wed Aug 21 16:43:19 2002 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * eval.c (rb_thread_cleanup): should not modify the global
+ variable curr_thread.
+
Wed Aug 21 16:14:26 2002 WATANABE Hirofumi <eban@ruby-lang.org>
* configure.in: set ac_cv_func__setjmp to "no" on Cygwin.
diff --git a/eval.c b/eval.c
index 311bd5f097..d269feae6d 100644
--- a/eval.c
+++ b/eval.c
@@ -8866,13 +8866,14 @@ rb_thread_wait_other_threads()
static void
rb_thread_cleanup()
{
- rb_thread_t th;
+ rb_thread_t curr, th;
- while (curr_thread->status == THREAD_KILLED) {
- curr_thread = curr_thread->prev;
+ curr = curr_thread;
+ while (curr->status == THREAD_KILLED) {
+ curr = curr_thread->prev;
}
- FOREACH_THREAD(th) {
+ FOREACH_THREAD_FROM(curr, th) {
if (th->status != THREAD_KILLED) {
rb_thread_ready(th);
th->gid = 0;
@@ -8883,7 +8884,7 @@ rb_thread_cleanup()
}
}
}
- END_FOREACH(th);
+ END_FOREACH_FROM(curr, th);
}
int rb_thread_critical;
diff --git a/ext/extmk.rb.in b/ext/extmk.rb.in
index a2f1a2cbf6..cebb115214 100644
--- a/ext/extmk.rb.in
+++ b/ext/extmk.rb.in
@@ -295,6 +295,25 @@ SRC
return true
end
+def find_executable(bin, path = nil)
+ if path.nil?
+ path = ENV['PATH'].split(Config::CONFIG['PATH_SEPARATOR'])
+ else
+ path = path.split(Config::CONFIG['PATH_SEPARATOR'])
+ end
+
+ bin += "@EXEEXT@"
+ for dir in path
+ file = File.join(dir, bin)
+ if FileTest.executable?(file)
+ return file
+ else
+ next
+ end
+ end
+ return nil
+end
+
def arg_config(config, default=nil)
unless defined? $configure_args
$configure_args = {}
diff --git a/io.c b/io.c
index 01b7e2a72a..0d61e671be 100644
--- a/io.c
+++ b/io.c
@@ -2378,10 +2378,9 @@ static VALUE
rb_io_putc(io, ch)
VALUE io, ch;
{
- char c[2];
- c[0] = NUM2CHR(ch);
- c[1] = '\0';
- rb_io_write(io, rb_str_new(c, 1));
+ char c = NUM2CHR(ch);
+
+ rb_io_write(io, rb_str_new(&c, 1));
return ch;
}
diff --git a/lib/mkmf.rb b/lib/mkmf.rb
index 58201d02a7..bdedce5482 100644
--- a/lib/mkmf.rb
+++ b/lib/mkmf.rb
@@ -351,6 +351,30 @@ SRC
return true
end
+def find_executable(bin, path = nil)
+ printf "checking for %s... ", bin
+ STDOUT.flush
+
+ if path.nil?
+ path = ENV['PATH'].split(Config::CONFIG['PATH_SEPARATOR'])
+ else
+ path = path.split(Config::CONFIG['PATH_SEPARATOR'])
+ end
+
+ bin += Config::CONFIG['EXEEXT']
+ for dir in path
+ file = File.join(dir, bin)
+ if FileTest.executable?(file)
+ print "yes\n"
+ return file
+ else
+ next
+ end
+ end
+ print "no\n"
+ return nil
+end
+
def arg_config(config, default=nil)
$configure_args.fetch(config, default)
end