Index: src/d8-posix.cc |
diff --git a/src/d8-posix.cc b/src/d8-posix.cc |
index 1be782a241de2266283efc5f8eb61b3e686529db..424dbbb39308c286830bfecb4631f3f91bcc3187 100644 |
--- a/src/d8-posix.cc |
+++ b/src/d8-posix.cc |
@@ -238,7 +238,7 @@ class ExecArgs { |
// Gets the optional timeouts from the arguments to the system() call. |
-static bool GetTimeouts(const Arguments& args, |
+static bool GetTimeouts(const v8::FunctionCallbackInfo<v8::Value>& args, |
int* read_timeout, |
int* total_timeout) { |
if (args.Length() > 3) { |
@@ -448,25 +448,28 @@ static bool WaitForChild(int pid, |
// Implementation of the system() function (see d8.h for details). |
-Handle<Value> Shell::System(const Arguments& args) { |
+void Shell::System(const v8::FunctionCallbackInfo<v8::Value>& args) { |
HandleScope scope(args.GetIsolate()); |
int read_timeout = -1; |
int total_timeout = -1; |
- if (!GetTimeouts(args, &read_timeout, &total_timeout)) return v8::Undefined(); |
+ if (!GetTimeouts(args, &read_timeout, &total_timeout)) return; |
Handle<Array> command_args; |
if (args.Length() > 1) { |
if (!args[1]->IsArray()) { |
- return ThrowException(String::New("system: Argument 2 must be an array")); |
+ ThrowException(String::New("system: Argument 2 must be an array")); |
+ return; |
} |
command_args = Handle<Array>::Cast(args[1]); |
} else { |
command_args = Array::New(0); |
} |
if (command_args->Length() > ExecArgs::kMaxArgs) { |
- return ThrowException(String::New("Too many arguments to system()")); |
+ ThrowException(String::New("Too many arguments to system()")); |
+ return; |
} |
if (args.Length() < 1) { |
- return ThrowException(String::New("Too few arguments to system()")); |
+ ThrowException(String::New("Too few arguments to system()")); |
+ return; |
} |
struct timeval start_time; |
@@ -474,16 +477,18 @@ Handle<Value> Shell::System(const Arguments& args) { |
ExecArgs exec_args; |
if (!exec_args.Init(args[0], command_args)) { |
- return v8::Undefined(); |
+ return; |
} |
int exec_error_fds[2]; |
int stdout_fds[2]; |
if (pipe(exec_error_fds) != 0) { |
- return ThrowException(String::New("pipe syscall failed.")); |
+ ThrowException(String::New("pipe syscall failed.")); |
+ return; |
} |
if (pipe(stdout_fds) != 0) { |
- return ThrowException(String::New("pipe syscall failed.")); |
+ ThrowException(String::New("pipe syscall failed.")); |
+ return; |
} |
pid_t pid = fork(); |
@@ -499,7 +504,7 @@ Handle<Value> Shell::System(const Arguments& args) { |
OpenFDCloser error_read_closer(exec_error_fds[kReadFD]); |
OpenFDCloser stdout_read_closer(stdout_fds[kReadFD]); |
- if (!ChildLaunchedOK(exec_error_fds)) return v8::Undefined(); |
+ if (!ChildLaunchedOK(exec_error_fds)) return; |
Handle<Value> accumulator = GetStdout(stdout_fds[kReadFD], |
start_time, |
@@ -507,7 +512,8 @@ Handle<Value> Shell::System(const Arguments& args) { |
total_timeout); |
if (accumulator->IsUndefined()) { |
kill(pid, SIGINT); // On timeout, kill the subprocess. |
- return accumulator; |
+ args.GetReturnValue().Set(accumulator); |
+ return; |
} |
if (!WaitForChild(pid, |
@@ -515,42 +521,47 @@ Handle<Value> Shell::System(const Arguments& args) { |
start_time, |
read_timeout, |
total_timeout)) { |
- return v8::Undefined(); |
+ return; |
} |
- return scope.Close(accumulator); |
+ args.GetReturnValue().Set(accumulator); |
} |
-Handle<Value> Shell::ChangeDirectory(const Arguments& args) { |
+void Shell::ChangeDirectory(const v8::FunctionCallbackInfo<v8::Value>& args) { |
if (args.Length() != 1) { |
const char* message = "chdir() takes one argument"; |
- return ThrowException(String::New(message)); |
+ ThrowException(String::New(message)); |
+ return; |
} |
String::Utf8Value directory(args[0]); |
if (*directory == NULL) { |
const char* message = "os.chdir(): String conversion of argument failed."; |
- return ThrowException(String::New(message)); |
+ ThrowException(String::New(message)); |
+ return; |
} |
if (chdir(*directory) != 0) { |
- return ThrowException(String::New(strerror(errno))); |
+ ThrowException(String::New(strerror(errno))); |
+ return; |
} |
- return v8::Undefined(); |
} |
-Handle<Value> Shell::SetUMask(const Arguments& args) { |
+void Shell::SetUMask(const v8::FunctionCallbackInfo<v8::Value>& args) { |
if (args.Length() != 1) { |
const char* message = "umask() takes one argument"; |
- return ThrowException(String::New(message)); |
+ ThrowException(String::New(message)); |
+ return; |
} |
if (args[0]->IsNumber()) { |
mode_t mask = args[0]->Int32Value(); |
int previous = umask(mask); |
- return Number::New(previous); |
+ args.GetReturnValue().Set(previous); |
+ return; |
} else { |
const char* message = "umask() argument must be numeric"; |
- return ThrowException(String::New(message)); |
+ ThrowException(String::New(message)); |
+ return; |
} |
} |
@@ -598,79 +609,85 @@ static bool mkdirp(char* directory, mode_t mask) { |
} |
-Handle<Value> Shell::MakeDirectory(const Arguments& args) { |
+void Shell::MakeDirectory(const v8::FunctionCallbackInfo<v8::Value>& args) { |
mode_t mask = 0777; |
if (args.Length() == 2) { |
if (args[1]->IsNumber()) { |
mask = args[1]->Int32Value(); |
} else { |
const char* message = "mkdirp() second argument must be numeric"; |
- return ThrowException(String::New(message)); |
+ ThrowException(String::New(message)); |
+ return; |
} |
} else if (args.Length() != 1) { |
const char* message = "mkdirp() takes one or two arguments"; |
- return ThrowException(String::New(message)); |
+ ThrowException(String::New(message)); |
+ return; |
} |
String::Utf8Value directory(args[0]); |
if (*directory == NULL) { |
const char* message = "os.mkdirp(): String conversion of argument failed."; |
- return ThrowException(String::New(message)); |
+ ThrowException(String::New(message)); |
+ return; |
} |
mkdirp(*directory, mask); |
- return v8::Undefined(); |
} |
-Handle<Value> Shell::RemoveDirectory(const Arguments& args) { |
+void Shell::RemoveDirectory(const v8::FunctionCallbackInfo<v8::Value>& args) { |
if (args.Length() != 1) { |
const char* message = "rmdir() takes one or two arguments"; |
- return ThrowException(String::New(message)); |
+ ThrowException(String::New(message)); |
+ return; |
} |
String::Utf8Value directory(args[0]); |
if (*directory == NULL) { |
const char* message = "os.rmdir(): String conversion of argument failed."; |
- return ThrowException(String::New(message)); |
+ ThrowException(String::New(message)); |
+ return; |
} |
rmdir(*directory); |
- return v8::Undefined(); |
} |
-Handle<Value> Shell::SetEnvironment(const Arguments& args) { |
+void Shell::SetEnvironment(const v8::FunctionCallbackInfo<v8::Value>& args) { |
if (args.Length() != 2) { |
const char* message = "setenv() takes two arguments"; |
- return ThrowException(String::New(message)); |
+ ThrowException(String::New(message)); |
+ return; |
} |
String::Utf8Value var(args[0]); |
String::Utf8Value value(args[1]); |
if (*var == NULL) { |
const char* message = |
"os.setenv(): String conversion of variable name failed."; |
- return ThrowException(String::New(message)); |
+ ThrowException(String::New(message)); |
+ return; |
} |
if (*value == NULL) { |
const char* message = |
"os.setenv(): String conversion of variable contents failed."; |
- return ThrowException(String::New(message)); |
+ ThrowException(String::New(message)); |
+ return; |
} |
setenv(*var, *value, 1); |
- return v8::Undefined(); |
} |
-Handle<Value> Shell::UnsetEnvironment(const Arguments& args) { |
+void Shell::UnsetEnvironment(const v8::FunctionCallbackInfo<v8::Value>& args) { |
if (args.Length() != 1) { |
const char* message = "unsetenv() takes one argument"; |
- return ThrowException(String::New(message)); |
+ ThrowException(String::New(message)); |
+ return; |
} |
String::Utf8Value var(args[0]); |
if (*var == NULL) { |
const char* message = |
"os.setenv(): String conversion of variable name failed."; |
- return ThrowException(String::New(message)); |
+ ThrowException(String::New(message)); |
+ return; |
} |
unsetenv(*var); |
- return v8::Undefined(); |
} |