diff --git a/doc/api.txt b/doc/api.txt index 0e289bf01b..df6b8fa5cf 100644 --- a/doc/api.txt +++ b/doc/api.txt @@ -88,6 +88,8 @@ Returns the current working directory of the process. +ARGV+ :: An array containing the command line arguments. ++ENV+ :: +An object containing the user environment. See environ(7). +__filename+ :: The filename of the script being executed. diff --git a/src/node.cc b/src/node.cc index f4485379b6..775db3adf4 100644 --- a/src/node.cc +++ b/src/node.cc @@ -378,13 +378,26 @@ Load (int argc, char *argv[]) node_obj->Set(String::NewSymbol("version"), String::New(NODE_VERSION)); + int i,j; Local arguments = Array::New(argc); - for (int i = 0; i < argc; i++) { + for (i = 0; i < argc; i++) { Local arg = String::New(argv[i]); arguments->Set(Integer::New(i), arg); } global_obj->Set(String::NewSymbol("ARGV"), arguments); + Local env = Object::New(); + for (i = 0; environ[i]; i++) { + for (j = 0; environ[i][j] && environ[i][j] != '='; j++) { ; } + Local field = String::New(environ[i], j); + Local value = Local(); + if (environ[i][j] == '=') { + value = String::New(environ[i]+j+1); + } + env->Set(field, value); + } + global_obj->Set(String::NewSymbol("ENV"), env); + NODE_SET_METHOD(node_obj, "compile", compile); NODE_SET_METHOD(node_obj, "reallyExit", node_exit); NODE_SET_METHOD(node_obj, "cwd", Cwd);