diff options
-rw-r--r-- | ChangeLog | 4 | ||||
-rw-r--r-- | process.c | 7 |
2 files changed, 9 insertions, 2 deletions
@@ -1,3 +1,7 @@ +Tue Jun 26 16:33:45 2007 Nobuyoshi Nakada <nobu@ruby-lang.org> + + * process.c (proc_exec_v, rb_proc_exec): preserve errno. + Sat Jun 23 00:37:46 2007 Yukihiro Matsumoto <matz@ruby-lang.org> * hash.c (rb_hash_select): remove unnecessary varargs for @@ -110,6 +110,9 @@ static VALUE S_Tms; #endif #endif +#define preserving_errno(stmts) \ + do {int saved_errno = errno; stmts; errno = saved_errno;} while (0) + /* * call-seq: @@ -982,7 +985,7 @@ proc_exec_v(argv, prog) #endif /* MSDOS or __human68k__ or __EMX__ */ before_exec(); execv(prog, argv); - after_exec(); + preserving_errno(after_exec()); return -1; } @@ -1051,7 +1054,7 @@ rb_proc_exec(str) #else before_exec(); execl("/bin/sh", "sh", "-c", str, (char *)NULL); - after_exec(); + preserving_errno(after_exec()); #endif #endif return -1; |