Implement umask()
authorThomas Jarosch <thomas.jarosch@intra2net.com>
Thu, 8 Jul 2010 14:25:25 +0000 (16:25 +0200)
committerThomas Jarosch <thomas.jarosch@intra2net.com>
Thu, 22 Sep 2011 14:25:57 +0000 (16:25 +0200)
src/filefunc.cpp
src/filefunc.hxx
test/test_filefunc.cpp

index 908b693..a753324 100644 (file)
@@ -859,4 +859,14 @@ bool chdir(const std::string &path, std::string *error)
     return false;
 }
 
+/**
+    Set file mode creation mask
+    @param mask Creation mask
+    @return Previous creation mask (function call always succeeds)
+*/
+mode_t umask(mode_t mask)
+{
+    return ::umask(mask);
+}
+
 } // eo namespace I2n
index 453c1d3..d901e8d 100644 (file)
@@ -184,6 +184,8 @@ bool rmdir(const std::string &path, std::string *error=NULL);
 std::string getcwd();
 bool chdir(const std::string &path, std::string *error=NULL);
 
+mode_t umask(mode_t mask);
+
 }
 
 #endif
index dda31db..c137b5a 100644 (file)
@@ -385,15 +385,16 @@ BOOST_AUTO_TEST_CASE(DirectoryCreatePermission)
 {
     string dirname = "test_directory";
 
-    // TODO: Save and fix umask
+    // Save and fix umask
+    mode_t previous_mask = I2n::umask(0);
 
     I2n::rmdir (dirname);
     BOOST_CHECK_EQUAL(true, I2n::mkdir(dirname, 0770));
-    // TODO: Enable check
-    // BOOST_CHECK_EQUAL(0770, Stat(dirname).mode());
+    BOOST_CHECK_EQUAL(0770, Stat(dirname).mode());
     I2n::rmdir (dirname);
 
-    // TODO: Restore umask
+    // Restore umask
+    I2n::umask(previous_mask);
 }
 
 BOOST_AUTO_TEST_CASE(ChangeDirectory)