add process.umask()
authorFriedemann Altrock <frodenius@gmail.com>
Sun, 22 Nov 2009 18:52:52 +0000 (19:52 +0100)
committerRyan Dahl <ry@tinyclouds.org>
Sun, 22 Nov 2009 18:52:52 +0000 (19:52 +0100)
doc/api.txt
src/node.cc
test/mjsunit/test-umask.js [new file with mode: 0644]

index b3a163c..8b439cc 100644 (file)
@@ -119,6 +119,11 @@ success code 0.
 +process.cwd()+::
 Returns the current working directory of the process.
 
++process.umask(mask)+ ::
+Sets the process's file mode creation mask. Child processes inherit the mask 
+from the parent process.
+  - returns the old mask.
+
 +process.kill(pid, signal="SIGTERM")+ ::
 Send a signal to a process. +pid+ is the process id and +signal+ is the
 signal to send; for example, "SIGINT" or "SIGUSR1".  See kill(2) for more
@@ -636,7 +641,6 @@ sys.puts("stats: " + JSON.stringify(stats));
   - on success: returns an integer +written+ which specifies how many _bytes_ were written.
   - on error: no parameters.
 
-
 +posix.read(fd, length, position, encoding)+::
 
 Read data from the file specified by +fd+.
index 5185fc5..dcb1110 100644 (file)
@@ -275,6 +275,19 @@ static Handle<Value> Cwd(const Arguments& args) {
   return scope.Close(cwd);
 }
 
+static Handle<Value> Umask(const Arguments& args){
+  HandleScope scope;
+
+  if(args.Length() < 1 || !args[0]->IsInt32()) {               
+    return ThrowException(Exception::TypeError(
+          String::New("argument must be an integer.")));
+  }
+  unsigned int mask = args[0]->Uint32Value();
+  unsigned int old = umask((mode_t)mask);
+  
+  return scope.Close(Uint32::New(old));
+}
+
 v8::Handle<v8::Value> Exit(const v8::Arguments& args) {
   int r = 0;
   if (args.Length() > 0)
@@ -683,6 +696,7 @@ static Local<Object> Load(int argc, char *argv[]) {
   NODE_SET_METHOD(process, "reallyExit", Exit);
   NODE_SET_METHOD(process, "chdir", Chdir);
   NODE_SET_METHOD(process, "cwd", Cwd);
+  NODE_SET_METHOD(process, "umask", Umask);
   NODE_SET_METHOD(process, "dlopen", DLOpen);
   NODE_SET_METHOD(process, "kill", Kill);
   NODE_SET_METHOD(process, "memoryUsage", MemoryUsage);
diff --git a/test/mjsunit/test-umask.js b/test/mjsunit/test-umask.js
new file mode 100644 (file)
index 0000000..1ac9578
--- /dev/null
@@ -0,0 +1,6 @@
+process.mixin(require("./common"));
+
+var mask = 0664;
+var old = process.umask(mask);
+
+assertEquals(true, mask === process.umask(old));