#include "vmware_pack_end.h"
VixCommandRenameFileRequest;
+typedef
+#include "vmware_pack_begin.h"
+struct VixCommandRenameFileRequestEx {
+ VixCommandRequestHeader header;
+
+ int32 copyFileOptions;
+ uint32 oldPathNameLength;
+ uint32 newPathNameLength;
+ uint32 filePropertiesLength;
+ Bool overwrite;
+}
+#include "vmware_pack_end.h"
+VixCommandRenameFileRequestEx;
+
typedef
#include "vmware_pack_begin.h"
struct VixCommandHgfsSendPacket {
#include "vmware_pack_end.h"
VixMsgCreateFileRequest;
+typedef
+#include "vmware_pack_begin.h"
+struct VixMsgCreateFileRequestEx {
+ VixCommandRequestHeader header;
+
+ int32 fileOptions;
+ uint32 guestPathNameLength;
+ uint32 filePropertiesLength;
+ Bool createParentDirectories;
+}
+#include "vmware_pack_end.h"
+VixMsgCreateFileRequestEx;
+
/*
* **********************************************************
VIX_COMMAND_LIST_FILES = 177,
+ VIX_COMMAND_CREATE_DIRECTORY_EX = 178,
+
+ VIX_COMMAND_MOVE_GUEST_FILE_EX = 179,
+
+ VIX_COMMAND_MOVE_GUEST_DIRECTORY = 180,
+
/*
* HOWTO: Adding a new Vix Command. Step 2a.
*
* Once a new command is added here, a command info field needs to be added
* in bora/lib/foundryMsg. as well.
*/
- VIX_COMMAND_LAST_NORMAL_COMMAND = 178,
+ VIX_COMMAND_LAST_NORMAL_COMMAND = 181,
VIX_TEST_UNSUPPORTED_TOOLS_OPCODE_COMMAND = 998,
VIX_TEST_UNSUPPORTED_VMX_OPCODE_COMMAND = 999,
static const char *scriptFileBaseName = "vixScript";
-static VixError VixToolsMoveFile(VixCommandRequestHeader *requestMsg);
+static VixError VixToolsMoveObject(VixCommandRequestHeader *requestMsg);
static VixError VixToolsCreateTempFile(VixCommandRequestHeader *requestMsg,
char **result);
/*
*-----------------------------------------------------------------------------
*
- * VixToolsMoveFile --
+ * VixToolsMoveObject --
*
*
* Return value:
*/
VixError
-VixToolsMoveFile(VixCommandRequestHeader *requestMsg) // IN
+VixToolsMoveObject(VixCommandRequestHeader *requestMsg) // IN
{
VixError err = VIX_OK;
char *srcFilePathName = NULL;
Bool success;
Bool impersonatingVMWareUser = FALSE;
void *userToken = NULL;
- VixCommandRenameFileRequest *renameRequest;
+ Bool overwrite = TRUE;
+
+ if (VIX_COMMAND_MOVE_GUEST_FILE == requestMsg->opCode) {
+ VixCommandRenameFileRequest *renameRequest;
+ renameRequest = (VixCommandRenameFileRequest *) requestMsg;
+ srcFilePathName = ((char *) renameRequest) + sizeof(*renameRequest);
+ destFilePathName = srcFilePathName + renameRequest->oldPathNameLength + 1;
+ } else if ((VIX_COMMAND_MOVE_GUEST_FILE_EX == requestMsg->opCode) ||
+ (VIX_COMMAND_MOVE_GUEST_DIRECTORY == requestMsg->opCode)) {
+ VixCommandRenameFileRequestEx *renameRequest;
+ renameRequest = (VixCommandRenameFileRequestEx *) requestMsg;
+ srcFilePathName = ((char *) renameRequest) + sizeof(*renameRequest);
+ destFilePathName = srcFilePathName + renameRequest->oldPathNameLength + 1;
+ overwrite = renameRequest->overwrite;
+ } else {
+ ASSERT(0);
+ Debug("%s: Invalid request with opcode %d received\n ",
+ __FUNCTION__, requestMsg->opCode);
+ err = VIX_E_FAIL;
+ goto abort;
+ }
- renameRequest = (VixCommandRenameFileRequest *) requestMsg;
- srcFilePathName = ((char *) renameRequest) + sizeof(*renameRequest);
- destFilePathName = srcFilePathName + renameRequest->oldPathNameLength + 1;
if ((0 == *srcFilePathName) || (0 == *destFilePathName)) {
err = VIX_E_INVALID_ARG;
goto abort;
}
impersonatingVMWareUser = TRUE;
+ if (!(File_Exists(srcFilePathName))) {
+ err = VIX_E_FILE_NOT_FOUND;
+ goto abort;
+ }
+
/*
* Be careful. Renaming a file to itself can cause it to be deleted.
* This should be a no-op anyway.
goto abort;
}
+ if (VIX_COMMAND_MOVE_GUEST_FILE_EX == requestMsg->opCode) {
+ if (File_IsDirectory(srcFilePathName)) {
+ err = VIX_E_NOT_A_FILE;
+ goto abort;
+ }
+ if (!overwrite) {
+ if (File_Exists(destFilePathName)) {
+ err = VIX_E_FILE_ALREADY_EXISTS;
+ goto abort;
+ }
+ }
+ } else if (VIX_COMMAND_MOVE_GUEST_DIRECTORY == requestMsg->opCode) {
+ if (!(File_IsDirectory(srcFilePathName))) {
+ err = VIX_E_NOT_A_DIRECTORY;
+ goto abort;
+ }
+ }
+
success = File_Rename(srcFilePathName, destFilePathName);
if (!success) {
err = FoundryToolsDaemon_TranslateSystemErr();
VixToolsLogoutUser(userToken);
return err;
-} // VixToolsMoveFile
+} // VixToolsMoveObject
/*
char *dirPathName = NULL;
Bool impersonatingVMWareUser = FALSE;
void *userToken = NULL;
- VixMsgCreateFileRequest *dirRequest = NULL;
+ Bool createParentDirectories = TRUE;
+
+ if (VIX_COMMAND_CREATE_DIRECTORY == requestMsg->opCode) {
+ VixMsgCreateFileRequest *dirRequest = NULL;
+
+ dirRequest = (VixMsgCreateFileRequest *) requestMsg;
+ dirPathName = ((char *) dirRequest) + sizeof(*dirRequest);
+ } else if (VIX_COMMAND_CREATE_DIRECTORY_EX == requestMsg->opCode) {
+ VixMsgCreateFileRequestEx *dirRequest = NULL;
+
+ dirRequest = (VixMsgCreateFileRequestEx *) requestMsg;
+ dirPathName = ((char *) dirRequest) + sizeof(*dirRequest);
+ createParentDirectories = dirRequest->createParentDirectories;
+ } else {
+ ASSERT(0);
+ Debug("%s: Invalid request with opcode %d received\n ",
+ __FUNCTION__, requestMsg->opCode);
+ err = VIX_E_FAIL;
+ goto abort;
+ }
- dirRequest = (VixMsgCreateFileRequest *) requestMsg;
- dirPathName = ((char *) dirRequest) + sizeof(*dirRequest);
if (0 == *dirPathName) {
err = VIX_E_INVALID_ARG;
goto abort;
goto abort;
}
- if (!(File_CreateDirectoryHierarchy(dirPathName))) {
- err = FoundryToolsDaemon_TranslateSystemErr();
- goto abort;
+ if (createParentDirectories) {
+ if (!(File_CreateDirectoryHierarchy(dirPathName))) {
+ err = FoundryToolsDaemon_TranslateSystemErr();
+ goto abort;
+ }
+ } else {
+ if (!(File_CreateDirectory(dirPathName))) {
+ err = FoundryToolsDaemon_TranslateSystemErr();
+ goto abort;
+ }
}
abort:
////////////////////////////////////
case VIX_COMMAND_CREATE_DIRECTORY:
+ case VIX_COMMAND_CREATE_DIRECTORY_EX:
err = VixToolsCreateDirectory(requestMsg);
break;
////////////////////////////////////
case VIX_COMMAND_MOVE_GUEST_FILE:
- err = VixToolsMoveFile(requestMsg);
+ case VIX_COMMAND_MOVE_GUEST_FILE_EX:
+ case VIX_COMMAND_MOVE_GUEST_DIRECTORY:
+ err = VixToolsMoveObject(requestMsg);
break;
////////////////////////////////////