]> git.ipfire.org Git - thirdparty/open-vm-tools.git/commitdiff
lib/file: make robust mkdir more general
authorVMware, Inc <>
Sat, 28 May 2011 19:24:18 +0000 (12:24 -0700)
committerMarcelo Vanzin <mvanzin@vmware.com>
Sat, 28 May 2011 19:24:18 +0000 (12:24 -0700)
Make the robust mkdir internal routine behave like the POSIX
system call. Later changes will pass other values for the mask.
The Windows code ignores it for now.

Signed-off-by: Marcelo Vanzin <mvanzin@vmware.com>
open-vm-tools/lib/file/file.c
open-vm-tools/lib/file/fileInt.h
open-vm-tools/lib/file/fileLockPrimitive.c
open-vm-tools/lib/file/filePosix.c

index 9c367bc21d8fe87200693fa315ea61bd97010a4a..178d048c49cfc3a977b659d4efad1fa26eaf4fa1 100644 (file)
@@ -275,7 +275,9 @@ File_UnlinkNoFollow(ConstUnicode pathName)  // IN:
 Bool
 File_CreateDirectory(ConstUnicode pathName)  // IN:
 {
-   return (FileCreateDirectory(pathName) == 0) ? TRUE : FALSE;
+   int err = FileCreateDirectory(pathName, S_IRWXU | S_IRWXG | S_IRWXO);
+
+   return err == 0;
 }
 
 
@@ -299,9 +301,9 @@ File_CreateDirectory(ConstUnicode pathName)  // IN:
 Bool
 File_EnsureDirectory(ConstUnicode pathName)  // IN:
 {
-   int res = FileCreateDirectory(pathName);
+   int err = FileCreateDirectory(pathName, S_IRWXU | S_IRWXG | S_IRWXO);
 
-   return ((0 == res) || (EEXIST == res));
+   return ((err == 0) || (err == EEXIST));
 }
 
 
index a93da0ef2d9085d9e6dd3798881170d880ac92f0..10ec0e54613ed0ae98e2febfc9ea9aa158f69aa5 100644 (file)
@@ -121,6 +121,7 @@ int FileDeletionRetry(ConstUnicode pathName,
                       uint32 msecMaxWaitTime);
 
 int FileCreateDirectoryRetry(ConstUnicode pathName,
+                             int mask,
                              uint32 msecMaxWaitTime);
 
 int FileRemoveDirectoryRetry(ConstUnicode pathName,
@@ -130,11 +131,11 @@ int FileListDirectoryRetry(ConstUnicode pathName,
                            uint32 msecMaxWaitTime,
                            Unicode **ids);
 
-#define FileAttributes(a, b)    FileAttributesRetry((a), 0, (b))
-#define FileRename(a, b)        FileRenameRetry((a), (b), 0)
-#define FileDeletion(a, b)      FileDeletionRetry((a), (b), 0)
-#define FileCreateDirectory(a)  FileCreateDirectoryRetry((a), 0)
-#define FileRemoveDirectory(a)  FileRemoveDirectoryRetry((a), 0)
+#define FileAttributes(a, b)       FileAttributesRetry((a), 0, (b))
+#define FileRename(a, b)           FileRenameRetry((a), (b), 0)
+#define FileDeletion(a, b)         FileDeletionRetry((a), (b), 0)
+#define FileCreateDirectory(a, b)  FileCreateDirectoryRetry((a), (b), 0)
+#define FileRemoveDirectory(a)     FileRemoveDirectoryRetry((a), 0)
 
 #define FILE_MAX_WAIT_TIME_MS 2000  // maximum wait time in milliseconds
 
@@ -146,8 +147,8 @@ int FileListDirectoryRetry(ConstUnicode pathName,
                     FileRenameRetry((a), (b), FILE_MAX_WAIT_TIME_MS)
 #define FileDeletionRobust(a, b) \
                     FileDeletionRetry((a), (b), FILE_MAX_WAIT_TIME_MS)
-#define FileCreateDirectoryRobust(a) \
-                    FileCreateDirectoryRetry((a), FILE_MAX_WAIT_TIME_MS)
+#define FileCreateDirectoryRobust(a, b) \
+                    FileCreateDirectoryRetry((a), (b), FILE_MAX_WAIT_TIME_MS)
 #define FileRemoveDirectoryRobust(a) \
                     FileRemoveDirectoryRetry((a), FILE_MAX_WAIT_TIME_MS)
 #else
@@ -162,16 +163,17 @@ int FileRename(ConstUnicode fromPath,
 int FileDeletion(ConstUnicode pathName,
                  Bool handleLink);
 
-int FileCreateDirectory(ConstUnicode pathName);
+int FileCreateDirectory(ConstUnicode pathName,
+                       int mask);
 
 int FileRemoveDirectory(ConstUnicode pathName);
 
-#define FileListDirectoryRobust(a, b) File_ListDirectory((a), (b))
-#define FileAttributesRobust(a, b)    FileAttributes((a), (b))
-#define FileRenameRobust(a, b)        FileRename((a), (b))
-#define FileDeletionRobust(a, b)      FileDeletion((a), (b))
-#define FileCreateDirectoryRobust(a)  FileCreateDirectory((a))
-#define FileRemoveDirectoryRobust(a)  FileRemoveDirectory((a))
+#define FileListDirectoryRobust(a, b)    File_ListDirectory((a), (b))
+#define FileAttributesRobust(a, b)       FileAttributes((a), (b))
+#define FileRenameRobust(a, b)           FileRename((a), (b))
+#define FileDeletionRobust(a, b)         FileDeletion((a), (b))
+#define FileCreateDirectoryRobust(a, b)  FileCreateDirectory((a), (b))
+#define FileRemoveDirectoryRobust(a)     FileRemoveDirectory((a))
 #endif
 
 typedef struct active_lock
index b5bbc16698417af67548377d6fd379f0a9e82f8e..22a89f2cbf1d9fb1cca5f080dda443ffd3c323ee 100644 (file)
@@ -1158,7 +1158,7 @@ MakeDirectory(ConstUnicode pathName)  // IN:
 
    ASSERT(pathName);
 
-   err = FileCreateDirectoryRobust(pathName);
+   err = FileCreateDirectoryRobust(pathName, S_IRWXU | S_IRWXG | S_IRWXO);
 
 #if !defined(_WIN32)
    umask(save);
index 5c66b554ef52ffeb38b5319694591bb3c7e3a6f5..783fdc32b4630ab326f4d495c385ee84be697313 100644 (file)
@@ -2248,15 +2248,15 @@ out:
  */
 
 int
-FileCreateDirectory(ConstUnicode pathName)  // IN:
+FileCreateDirectory(ConstUnicode pathName,  // IN:
+                    int mask)               // IN:
 {
    int err;
 
    if (pathName == NULL) {
       err = errno = EFAULT;
    } else {
-      err = (Posix_Mkdir(pathName,
-                         S_IRWXU | S_IRWXG | S_IRWXO) == -1) ? errno : 0;
+      err = (Posix_Mkdir(pathName, mask) == -1) ? errno : 0;
    }
 
    return err;