aboutsummaryrefslogtreecommitdiffstats
path: root/meta-oe/recipes-support/open-vm-tools/open-vm-tools/0014-Fix-new-warnings-from-gcc9.patch
diff options
context:
space:
mode:
Diffstat (limited to 'meta-oe/recipes-support/open-vm-tools/open-vm-tools/0014-Fix-new-warnings-from-gcc9.patch')
-rw-r--r--meta-oe/recipes-support/open-vm-tools/open-vm-tools/0014-Fix-new-warnings-from-gcc9.patch1281
1 files changed, 0 insertions, 1281 deletions
diff --git a/meta-oe/recipes-support/open-vm-tools/open-vm-tools/0014-Fix-new-warnings-from-gcc9.patch b/meta-oe/recipes-support/open-vm-tools/open-vm-tools/0014-Fix-new-warnings-from-gcc9.patch
deleted file mode 100644
index b5ccffd141..0000000000
--- a/meta-oe/recipes-support/open-vm-tools/open-vm-tools/0014-Fix-new-warnings-from-gcc9.patch
+++ /dev/null
@@ -1,1281 +0,0 @@
-From af9eca8689c97ea8e792902b458a31608286655e Mon Sep 17 00:00:00 2001
-From: Martin Jansa <martin.jansa@lge.com>
-Date: Thu, 13 Jun 2019 16:01:03 +0000
-Subject: [PATCH] Fix new warnings from gcc9
-
-Imported from Fedora:
-https://src.fedoraproject.org/rpms/open-vm-tools/raw/master/f/gcc9-warnings.patch
-
-Upstream bug:
-https://github.com/vmware/open-vm-tools/issues/330
-
-Upstream-Status: Pending
----
- open-vm-tools/hgfsmounter/hgfsmounter.c | 14 +-
- open-vm-tools/lib/hgfsServer/hgfsServer.c | 24 ++-
- open-vm-tools/vmhgfs-fuse/dir.c | 175 ++++++++---------
- open-vm-tools/vmhgfs-fuse/file.c | 217 +++++++++++++---------
- open-vm-tools/vmhgfs-fuse/filesystem.c | 46 ++---
- open-vm-tools/vmhgfs-fuse/fsutil.c | 63 ++++---
- open-vm-tools/vmhgfs-fuse/link.c | 125 +++++++------
- 7 files changed, 367 insertions(+), 297 deletions(-)
-
-diff --git a/open-vm-tools/hgfsmounter/hgfsmounter.c b/open-vm-tools/hgfsmounter/hgfsmounter.c
-index 0921b700..3f6798dc 100644
---- a/open-vm-tools/hgfsmounter/hgfsmounter.c
-+++ b/open-vm-tools/hgfsmounter/hgfsmounter.c
-@@ -1,5 +1,5 @@
- /*********************************************************
-- * Copyright (C) 2006-2017 VMware, Inc. All rights reserved.
-+ * Copyright (C) 2006-2019 VMware, Inc. All rights reserved.
- *
- * This program is free software; you can redistribute it and/or modify it
- * under the terms of the GNU Lesser General Public License as published
-@@ -514,11 +514,13 @@ ParseFmask(const char *option, // IN: option string along with value
- HgfsMountInfo *mountInfo, // OUT: mount data
- int *flags) // OUT: mount flags
- {
-+ unsigned short fmask = 0;
- ASSERT(option);
- ASSERT(mountInfo);
-
-- if (ParseMask(option, &mountInfo->fmask)) {
-- LOG("Setting mount fmask to %o\n", mountInfo->fmask);
-+ if (ParseMask(option, &fmask)) {
-+ LOG("Setting mount fmask to %o\n", fmask);
-+ mountInfo->fmask = fmask;
- return TRUE;
- }
-
-@@ -548,11 +550,13 @@ ParseDmask(const char *option, // IN: option string along with value
- HgfsMountInfo *mountInfo, // OUT: mount data
- int *flags) // OUT: mount flags
- {
-+ unsigned short dmask = 0;
- ASSERT(option);
- ASSERT(mountInfo);
-
-- if (ParseMask(option, &mountInfo->dmask)) {
-- LOG("Setting mount dmask to %o\n", mountInfo->dmask);
-+ if (ParseMask(option, &dmask)) {
-+ LOG("Setting mount dmask to %o\n", dmask);
-+ mountInfo->dmask = dmask;
- return TRUE;
- }
-
-diff --git a/open-vm-tools/lib/hgfsServer/hgfsServer.c b/open-vm-tools/lib/hgfsServer/hgfsServer.c
-index 740c4fed..422383cd 100644
---- a/open-vm-tools/lib/hgfsServer/hgfsServer.c
-+++ b/open-vm-tools/lib/hgfsServer/hgfsServer.c
-@@ -1,5 +1,5 @@
- /*********************************************************
-- * Copyright (C) 1998-2018 VMware, Inc. All rights reserved.
-+ * Copyright (C) 1998-2019 VMware, Inc. All rights reserved.
- *
- * This program is free software; you can redistribute it and/or modify it
- * under the terms of the GNU Lesser General Public License as published
-@@ -159,7 +159,7 @@ struct HgfsTransportSessionInfo {
- HgfsServerChannelData channelCapabilities;
- };
-
--/* The input request paramaters object. */
-+/* The input request parameters object. */
- typedef struct HgfsInputParam {
- const void *request; /* Hgfs header followed by operation request */
- size_t requestSize; /* Size of Hgfs header and operation request */
-@@ -2682,8 +2682,8 @@ HgfsSearchHandle2Search(HgfsHandle handle, // IN: handle
- * None
- *
- * Side effects:
-- * If there isnt enough memory to accomodate the new names, those file nodes
-- * that couldnt be updated are deleted.
-+ * If there isn't enough memory to accommodate the new names, those file nodes
-+ * that couldn't be updated are deleted.
- *
- *-----------------------------------------------------------------------------
- */
-@@ -3399,7 +3399,7 @@ HgfsServerSessionReceive(HgfsPacket *packet, // IN: Hgfs Packet
-
- /* Send error if we fail to process the op. */
- if (HGFS_ERROR_SUCCESS != status) {
-- LOG(4, ("Error %d occured parsing the packet\n", (uint32)status));
-+ LOG(4, ("Error %d occurred parsing the packet\n", (uint32)status));
- HgfsServerCompleteRequest(status, 0, input);
- }
- }
-@@ -4131,7 +4131,7 @@ HgfsServerSetSessionCapability(HgfsOp op, // IN: operation code
- result = TRUE;
- }
- }
-- LOG(4, ("%s: Setting capabilitiy flags %x for op code %d %s\n",
-+ LOG(4, ("%s: Setting capability flags %x for op code %d %s\n",
- __FUNCTION__, flags, op, result ? "succeeded" : "failed"));
-
- return result;
-@@ -4143,7 +4143,7 @@ HgfsServerSetSessionCapability(HgfsOp op, // IN: operation code
- *
- * HgfsServerResEnumInit --
- *
-- * Initialize an enumeration of all exisitng resources.
-+ * Initialize an enumeration of all existing resources.
- *
- * Results:
- * The enumeration state object.
-@@ -4239,7 +4239,7 @@ HgfsServerResEnumExit(void *enumState) // IN/OUT: enumeration state
- *
- * HgfsServerEnumerateSharedFolders --
- *
-- * Enumerates all exisitng shared folders and registers shared folders with
-+ * Enumerates all existing shared folders and registers shared folders with
- * directory notification package.
- *
- * Results:
-@@ -6536,11 +6536,13 @@ HgfsServerRead(HgfsInputParam *input) // IN: Input params
- payload = &reply->payload[0];
- }
- if (payload) {
-+ uint32 actualSize = 0;
- status = HgfsPlatformReadFile(readFd, input->session, offset,
- requiredSize, payload,
-- &reply->actualSize);
-+ &actualSize);
- if (HGFS_ERROR_SUCCESS == status) {
- reply->reserved = 0;
-+ reply->actualSize = actualSize;
- replyPayloadSize = sizeof *reply;
-
- if (readUseDataBuffer) {
-@@ -6556,11 +6558,13 @@ HgfsServerRead(HgfsInputParam *input) // IN: Input params
- break;
- }
- case HGFS_OP_READ: {
-+ uint32 actualSize = 0;
- HgfsReplyRead *reply = replyRead;
-
- status = HgfsPlatformReadFile(readFd, input->session, offset, requiredSize,
-- reply->payload, &reply->actualSize);
-+ reply->payload, &actualSize);
- if (HGFS_ERROR_SUCCESS == status) {
-+ reply->actualSize = actualSize;
- replyPayloadSize = sizeof *reply + reply->actualSize;
- } else {
- LOG(4, ("%s: V1 Failed to read-> %d.\n", __FUNCTION__, status));
-diff --git a/open-vm-tools/vmhgfs-fuse/dir.c b/open-vm-tools/vmhgfs-fuse/dir.c
-index 6298a4ea..e71b7afd 100644
---- a/open-vm-tools/vmhgfs-fuse/dir.c
-+++ b/open-vm-tools/vmhgfs-fuse/dir.c
-@@ -1,5 +1,5 @@
- /*********************************************************
-- * Copyright (C) 2013 VMware, Inc. All rights reserved.
-+ * Copyright (C) 2013,2019 VMware, Inc. All rights reserved.
- *
- * This program is free software; you can redistribute it and/or modify it
- * under the terms of the GNU Lesser General Public License as published
-@@ -54,38 +54,53 @@ HgfsPackDirOpenRequest(const char *path, // IN: Path of the dir to open
- HgfsOp opUsed, // IN: Op to be used
- HgfsReq *req) // IN/OUT: Packet to write into
- {
-- char *name;
-- unsigned int *nameLength = NULL;
- size_t reqSize;
-- int result;
-
- ASSERT(path);
- ASSERT(req);
- LOG(4, ("Path = %s \n", path));
- switch (opUsed) {
- case HGFS_OP_SEARCH_OPEN_V3: {
-+ int result;
- HgfsRequestSearchOpenV3 *requestV3 = HgfsGetRequestPayload(req);
-
-- /* We'll use these later. */
-- name = requestV3->dirName.name;
-- nameLength = &requestV3->dirName.length;
- requestV3->dirName.flags = 0;
- requestV3->dirName.caseType = HGFS_FILE_NAME_CASE_SENSITIVE;
- requestV3->dirName.fid = HGFS_INVALID_HANDLE;
- requestV3->reserved = 0;
- reqSize = sizeof(*requestV3) + HgfsGetRequestHeaderSize();
-+ /* Convert to CP name. */
-+ result = CPName_ConvertTo(path,
-+ HGFS_LARGE_PACKET_MAX - (reqSize - 1),
-+ requestV3->dirName.name);
-+ if (result < 0) {
-+ LOG(4, ("CP conversion failed\n"));
-+ return -EINVAL;
-+ }
-+ LOG(4, ("After conversion = %s\n", requestV3->dirName.name));
-+ requestV3->dirName.length = result;
-+ reqSize += result;
- break;
- }
-
- case HGFS_OP_SEARCH_OPEN: {
-+ int result;
- HgfsRequestSearchOpen *request;
-
- request = (HgfsRequestSearchOpen *)(HGFS_REQ_PAYLOAD(req));
-
-- /* We'll use these later. */
-- name = request->dirName.name;
-- nameLength = &request->dirName.length;
- reqSize = sizeof *request;
-+ /* Convert to CP name. */
-+ result = CPName_ConvertTo(path,
-+ HGFS_LARGE_PACKET_MAX - (reqSize - 1),
-+ request->dirName.name);
-+ if (result < 0) {
-+ LOG(4, ("CP conversion failed\n"));
-+ return -EINVAL;
-+ }
-+ LOG(4, ("After conversion = %s\n", request->dirName.name));
-+ request->dirName.length = result;
-+ reqSize += result;
- break;
- }
-
-@@ -94,21 +109,7 @@ HgfsPackDirOpenRequest(const char *path, // IN: Path of the dir to open
- return -EPROTO;
- }
-
-- /* Convert to CP name. */
--
-- LOG(4, ("After buildPath = %s\n", path));
-- result = CPName_ConvertTo(path,
-- HGFS_LARGE_PACKET_MAX - (reqSize - 1),
-- name);
-- if (result < 0) {
-- LOG(4, ("CP conversion failed\n"));
-- return -EINVAL;
-- }
--
-- LOG(4, ("After conversion = %s\n", name));
--
-- *nameLength = (uint32) result;
-- req->payloadSize = reqSize + result;
-+ req->payloadSize = reqSize;
-
- /* Fill in header here as payloadSize needs to be there. */
- HgfsPackHeader(req, opUsed);
-@@ -149,7 +150,6 @@ HgfsDirOpen(const char* path, // IN: Path of dir to open
- int result;
- HgfsOp opUsed;
- HgfsStatus replyStatus;
-- HgfsHandle *replySearch;
-
- ASSERT(path);
- req = HgfsGetNewRequest();
-@@ -161,16 +161,6 @@ HgfsDirOpen(const char* path, // IN: Path of dir to open
-
- retry:
- opUsed = hgfsVersionSearchOpen;
-- if (opUsed == HGFS_OP_SEARCH_OPEN_V3) {
-- HgfsReplySearchOpenV3 *requestV3 = HgfsGetReplyPayload(req);
--
-- replySearch = &requestV3->search;
--
-- } else {
-- HgfsReplySearchOpen *request = (HgfsReplySearchOpen *)HGFS_REQ_PAYLOAD(req);
--
-- replySearch = &request->search;
-- }
-
- result = HgfsPackDirOpenRequest(path, opUsed, req);
- if (result != 0) {
-@@ -187,8 +177,14 @@ retry:
-
- switch (result) {
- case 0:
-- *handle = *replySearch;
-- LOG(6, ("Set handle to %u\n", *replySearch));
-+ if (opUsed == HGFS_OP_SEARCH_OPEN_V3) {
-+ HgfsReplySearchOpenV3 *requestV3 = HgfsGetReplyPayload(req);
-+ *handle = requestV3->search;
-+ } else {
-+ HgfsReplySearchOpen *request = (HgfsReplySearchOpen *)HGFS_REQ_PAYLOAD(req);
-+ *handle = request->search;
-+ }
-+ LOG(6, ("Set handle to %u\n", *handle));
- break;
- case -EPROTO:
- /* Retry with older version(s). Set globally. */
-@@ -626,25 +622,30 @@ HgfsPackCreateDirRequest(const char *path,
- HgfsOp opUsed, // IN: Op to be used.
- HgfsReq *req) // IN/OUT: Packet to write into
- {
-- char *fileName = NULL;
-- uint32 *fileNameLength;
- size_t reqSize;
-- int result;
-+
-
- ASSERT(req);
-
- switch (opUsed) {
- case HGFS_OP_CREATE_DIR_V3: {
-+ int result;
- HgfsRequestCreateDirV3 *requestV3 = HgfsGetRequestPayload(req);
-
- reqSize = sizeof(*requestV3) + HgfsGetRequestHeaderSize();
-- /* We'll use these later. */
-- fileName = requestV3->fileName.name;
-- fileNameLength = &requestV3->fileName.length;
- requestV3->fileName.flags = 0;
- requestV3->fileName.fid = HGFS_INVALID_HANDLE;
- requestV3->fileName.caseType = HGFS_FILE_NAME_CASE_SENSITIVE;
--
-+ /* Convert to CP name. */
-+ result = CPName_ConvertTo(path,
-+ HGFS_LARGE_PACKET_MAX - (reqSize - 1),
-+ requestV3->fileName.name);
-+ if (result < 0) {
-+ LOG(4, ("CP conversion failed.\n"));
-+ return -EINVAL;
-+ }
-+ requestV3->fileName.length = result;
-+ reqSize += result;
- requestV3->mask = HGFS_CREATE_DIR_MASK;
-
- /* Set permissions. */
-@@ -656,15 +657,23 @@ HgfsPackCreateDirRequest(const char *path,
- break;
- }
- case HGFS_OP_CREATE_DIR_V2: {
-+ int result;
- HgfsRequestCreateDirV2 *requestV2;
-
- requestV2 = (HgfsRequestCreateDirV2 *)(HGFS_REQ_PAYLOAD(req));
-
-- /* We'll use these later. */
-- fileName = requestV2->fileName.name;
-- fileNameLength = &requestV2->fileName.length;
- reqSize = sizeof *requestV2;
-
-+ /* Convert to CP name. */
-+ result = CPName_ConvertTo(path,
-+ HGFS_LARGE_PACKET_MAX - (reqSize - 1),
-+ requestV2->fileName.name);
-+ if (result < 0) {
-+ LOG(4, ("CP conversion failed.\n"));
-+ return -EINVAL;
-+ }
-+ requestV2->fileName.length = result;
-+ reqSize += result;
- requestV2->mask = HGFS_CREATE_DIR_MASK;
-
- /* Set permissions. */
-@@ -675,15 +684,22 @@ HgfsPackCreateDirRequest(const char *path,
- break;
- }
- case HGFS_OP_CREATE_DIR: {
-+ int result;
- HgfsRequestCreateDir *request;
-
- request = (HgfsRequestCreateDir *)(HGFS_REQ_PAYLOAD(req));
-
-- /* We'll use these later. */
-- fileName = request->fileName.name;
-- fileNameLength = &request->fileName.length;
- reqSize = sizeof *request;
--
-+ /* Convert to CP name. */
-+ result = CPName_ConvertTo(path,
-+ HGFS_LARGE_PACKET_MAX - (reqSize - 1),
-+ request->fileName.name);
-+ if (result < 0) {
-+ LOG(4, ("CP conversion failed.\n"));
-+ return -EINVAL;
-+ }
-+ request->fileName.length = result;
-+ reqSize += result;
- /* Set permissions. */
- request->permissions = (permsMode & S_IRWXU) >> 6;
- break;
-@@ -693,18 +709,7 @@ HgfsPackCreateDirRequest(const char *path,
- return -EPROTO;
- }
-
--
-- /* Convert to CP name. */
-- result = CPName_ConvertTo(path,
-- HGFS_LARGE_PACKET_MAX - (reqSize - 1),
-- fileName);
-- if (result < 0) {
-- LOG(4, ("CP conversion failed.\n"));
-- return -EINVAL;
-- }
--
-- *fileNameLength = result;
-- req->payloadSize = reqSize + result;
-+ req->payloadSize = reqSize;
-
- /* Fill in header here as payloadSize needs to be there. */
- HgfsPackHeader(req, opUsed);
-@@ -827,8 +832,6 @@ HgfsDelete(const char* path, // IN: Path to file
- HgfsReq *req = NULL;
- int result = 0;
- HgfsStatus replyStatus;
-- char *fileName = NULL;
-- uint32 *fileNameLength;
- uint32 reqSize;
- HgfsOp opUsed;
- HgfsAttrInfo newAttr = {0};
-@@ -862,8 +865,17 @@ HgfsDelete(const char* path, // IN: Path to file
-
- reqSize = sizeof(*request) + HgfsGetRequestHeaderSize();
- request->hints = 0;
-- fileName = request->fileName.name;
-- fileNameLength = &request->fileName.length;
-+ /* Convert to CP name. */
-+ result = CPName_ConvertTo(path,
-+ HGFS_NAME_BUFFER_SIZET(HGFS_LARGE_PACKET_MAX, reqSize),
-+ request->fileName.name);
-+ if (result < 0) {
-+ LOG(4, ("CP conversion failed.\n"));
-+ result = -EINVAL;
-+ goto out;
-+ }
-+ request->fileName.length = result;
-+ reqSize += result;
- request->fileName.fid = HGFS_INVALID_HANDLE;
- request->fileName.flags = 0;
- request->fileName.caseType = HGFS_FILE_NAME_DEFAULT_CASE;
-@@ -874,24 +886,21 @@ HgfsDelete(const char* path, // IN: Path to file
-
- request = (HgfsRequestDelete *)(HGFS_REQ_PAYLOAD(req));
- /* Fill out the request packet. */
-- fileName = request->fileName.name;
-- fileNameLength = &request->fileName.length;
- reqSize = sizeof *request;
-+ /* Convert to CP name. */
-+ result = CPName_ConvertTo(path,
-+ HGFS_NAME_BUFFER_SIZET(HGFS_LARGE_PACKET_MAX, reqSize),
-+ request->fileName.name);
-+ if (result < 0) {
-+ LOG(4, ("CP conversion failed.\n"));
-+ result = -EINVAL;
-+ goto out;
-+ }
-+ request->fileName.length = result;
-+ reqSize += result;
- }
-
--
-- /* Convert to CP name. */
-- result = CPName_ConvertTo(path,
-- HGFS_NAME_BUFFER_SIZET(HGFS_LARGE_PACKET_MAX, reqSize),
-- fileName);
-- if (result < 0) {
-- LOG(4, ("CP conversion failed.\n"));
-- result = -EINVAL;
-- goto out;
-- }
--
-- *fileNameLength = result;
-- req->payloadSize = reqSize + result;
-+ req->payloadSize = reqSize;
-
- /* Fill in header here as payloadSize needs to be there. */
- HgfsPackHeader(req, opUsed);
-diff --git a/open-vm-tools/vmhgfs-fuse/file.c b/open-vm-tools/vmhgfs-fuse/file.c
-index 389ebba8..0b6c48bc 100644
---- a/open-vm-tools/vmhgfs-fuse/file.c
-+++ b/open-vm-tools/vmhgfs-fuse/file.c
-@@ -1,5 +1,5 @@
- /*********************************************************
-- * Copyright (C) 2013,2017 VMware, Inc. All rights reserved.
-+ * Copyright (C) 2013,2018-2019 VMware, Inc. All rights reserved.
- *
- * This program is free software; you can redistribute it and/or modify it
- * under the terms of the GNU Lesser General Public License as published
-@@ -66,10 +66,7 @@ HgfsPackOpenRequest(const char *path, // IN: Path to file
- HgfsOp opUsed, // IN: Op to use
- HgfsReq *req) // IN/OUT: Packet to write into
- {
-- char *name;
-- uint32 *nameLength;
- size_t reqSize;
-- int result;
- int openMode, openFlags;
-
- ASSERT(path);
-@@ -88,14 +85,22 @@ HgfsPackOpenRequest(const char *path, // IN: Path to file
-
- switch (opUsed) {
- case HGFS_OP_OPEN_V3: {
-+ int result;
- HgfsRequestOpenV3 *requestV3 = HgfsGetRequestPayload(req);
-
- reqSize = sizeof(*requestV3) + HgfsGetRequestHeaderSize();
-
-- /* We'll use these later. */
-- name = requestV3->fileName.name;
-- nameLength = &requestV3->fileName.length;
-+ /* Convert to CP name. */
-+ result = CPName_ConvertTo(path,
-+ HGFS_LARGE_PACKET_MAX - (reqSize - 1),
-+ requestV3->fileName.name);
-+ if (result < 0) {
-+ LOG(4, ("CP conversion failed.\n"));
-+ return -EINVAL;
-+ }
-
-+ requestV3->fileName.length = result;
-+ reqSize += result;
- /* Linux clients need case-sensitive lookups. */
- requestV3->fileName.flags = 0;
- requestV3->fileName.caseType = HGFS_FILE_NAME_CASE_SENSITIVE;
-@@ -122,15 +127,24 @@ HgfsPackOpenRequest(const char *path, // IN: Path to file
- }
-
- case HGFS_OP_OPEN_V2: {
-+ int result;
- HgfsRequestOpenV2 *requestV2;
-
- requestV2 = (HgfsRequestOpenV2 *)(HGFS_REQ_PAYLOAD(req));
-
-- /* We'll use these later. */
-- name = requestV2->fileName.name;
-- nameLength = &requestV2->fileName.length;
- reqSize = sizeof *requestV2;
-
-+ /* Convert to CP name. */
-+ result = CPName_ConvertTo(path,
-+ HGFS_LARGE_PACKET_MAX - (reqSize - 1),
-+ requestV2->fileName.name);
-+ if (result < 0) {
-+ LOG(4, ("CP conversion failed.\n"));
-+ return -EINVAL;
-+ }
-+
-+ requestV2->fileName.length = result;
-+ reqSize += result;
- requestV2->mask = mask;
- requestV2->mode = openMode;
- requestV2->flags = openFlags;
-@@ -148,14 +162,23 @@ HgfsPackOpenRequest(const char *path, // IN: Path to file
- break;
- }
- case HGFS_OP_OPEN: {
-+ int result;
- HgfsRequestOpen *request;
-
- request = (HgfsRequestOpen *)(HGFS_REQ_PAYLOAD(req));
-- /* We'll use these later. */
-- name = request->fileName.name;
-- nameLength = &request->fileName.length;
- reqSize = sizeof *request;
-
-+ /* Convert to CP name. */
-+ result = CPName_ConvertTo(path,
-+ HGFS_LARGE_PACKET_MAX - (reqSize - 1),
-+ request->fileName.name);
-+ if (result < 0) {
-+ LOG(4, ("CP conversion failed.\n"));
-+ return -EINVAL;
-+ }
-+
-+ request->fileName.length = result;
-+ reqSize += result;
- request->mode = openMode;
- request->flags = openFlags;
-
-@@ -168,18 +191,7 @@ HgfsPackOpenRequest(const char *path, // IN: Path to file
- return -EPROTO;
- }
-
--
-- /* Convert to CP name. */
-- result = CPName_ConvertTo(path,
-- HGFS_LARGE_PACKET_MAX - (reqSize - 1),
-- name);
-- if (result < 0) {
-- LOG(4, ("CP conversion failed.\n"));
-- return -EINVAL;
-- }
--
-- *nameLength = (uint32) result;
-- req->payloadSize = reqSize + result;
-+ req->payloadSize = reqSize;
-
- /* Fill in header here as payloadSize needs to be there. */
- HgfsPackHeader(req, opUsed);
-@@ -915,10 +927,6 @@ int
- HgfsRename(const char* from, const char* to)
- {
- HgfsReq *req = NULL;
-- char *oldName;
-- char *newName;
-- uint32 *oldNameLength;
-- uint32 *newNameLength;
- int result = 0;
- uint32 reqSize;
- HgfsOp opUsed;
-@@ -942,33 +950,41 @@ retry:
- if (opUsed == HGFS_OP_RENAME_V3) {
- HgfsRequestRenameV3 *requestV3 = HgfsGetRequestPayload(req);
-
-- oldName = requestV3->oldName.name;
-- oldNameLength = &requestV3->oldName.length;
- requestV3->hints = 0;
- requestV3->oldName.flags = 0;
- requestV3->oldName.fid = HGFS_INVALID_HANDLE;
- requestV3->oldName.caseType = HGFS_FILE_NAME_CASE_SENSITIVE;
- requestV3->reserved = 0;
- reqSize = sizeof(*requestV3) + HgfsGetRequestHeaderSize();
-+ /* Convert old name to CP format. */
-+ result = CPName_ConvertTo(from,
-+ HGFS_NAME_BUFFER_SIZET(HGFS_LARGE_PACKET_MAX, reqSize),
-+ requestV3->oldName.name);
-+ if (result < 0) {
-+ LOG(4, ("oldName CP conversion failed\n"));
-+ result = -EINVAL;
-+ goto out;
-+ }
-+
-+ requestV3->oldName.length = result;
-+ reqSize += result;
- } else {
- HgfsRequestRename *request = (HgfsRequestRename *)HGFS_REQ_PAYLOAD(req);
-
-- oldName = request->oldName.name;
-- oldNameLength = &request->oldName.length;
- reqSize = sizeof *request;
-- }
-- /* Convert old name to CP format. */
-- result = CPName_ConvertTo(from,
-- HGFS_NAME_BUFFER_SIZET(HGFS_LARGE_PACKET_MAX, reqSize),
-- oldName);
-- if (result < 0) {
-- LOG(4, ("oldName CP conversion failed\n"));
-- result = -EINVAL;
-- goto out;
-- }
-+ /* Convert old name to CP format. */
-+ result = CPName_ConvertTo(from,
-+ HGFS_NAME_BUFFER_SIZET(HGFS_LARGE_PACKET_MAX, reqSize),
-+ request->oldName.name);
-+ if (result < 0) {
-+ LOG(4, ("oldName CP conversion failed\n"));
-+ result = -EINVAL;
-+ goto out;
-+ }
-
-- *oldNameLength = result;
-- reqSize += result;
-+ request->oldName.length = result;
-+ reqSize += result;
-+ }
-
- /*
- * Build full new name to send to server.
-@@ -983,8 +999,20 @@ retry:
-
- newNameP = (HgfsFileNameV3 *)((char *)&requestV3->oldName +
- sizeof requestV3->oldName + result);
-- newName = newNameP->name;
-- newNameLength = &newNameP->length;
-+
-+ LOG(6, ("New name: \"%s\"\n", newNameP->name));
-+
-+ /* Convert new name to CP format. */
-+ result = CPName_ConvertTo(to,
-+ HGFS_NAME_BUFFER_SIZET(HGFS_LARGE_PACKET_MAX, reqSize) - result,
-+ newNameP->name);
-+ if (result < 0) {
-+ LOG(4, ("newName CP conversion failed\n"));
-+ result = -EINVAL;
-+ goto out;
-+ }
-+ newNameP->length = result;
-+ reqSize += result;
- newNameP->flags = 0;
- newNameP->fid = HGFS_INVALID_HANDLE;
- newNameP->caseType = HGFS_FILE_NAME_CASE_SENSITIVE;
-@@ -993,24 +1021,22 @@ retry:
- HgfsFileName *newNameP;
- newNameP = (HgfsFileName *)((char *)&request->oldName +
- sizeof request->oldName + result);
-- newName = newNameP->name;
-- newNameLength = &newNameP->length;
-- }
-
-- LOG(6, ("New name: \"%s\"\n", newName));
-+ LOG(6, ("New name: \"%s\"\n", newNameP->name));
-
-- /* Convert new name to CP format. */
-- result = CPName_ConvertTo(to,
-- HGFS_NAME_BUFFER_SIZET(HGFS_LARGE_PACKET_MAX, reqSize) - result,
-- newName);
-- if (result < 0) {
-- LOG(4, ("newName CP conversion failed\n"));
-- result = -EINVAL;
-- goto out;
-+ /* Convert new name to CP format. */
-+ result = CPName_ConvertTo(to,
-+ HGFS_NAME_BUFFER_SIZET(HGFS_LARGE_PACKET_MAX, reqSize) - result,
-+ newNameP->name);
-+ if (result < 0) {
-+ LOG(4, ("newName CP conversion failed\n"));
-+ result = -EINVAL;
-+ goto out;
-+ }
-+ newNameP->length = result;
-+ reqSize += result;
- }
-
-- *newNameLength = result;
-- reqSize += result;
- req->payloadSize = reqSize;
-
- /* Fill in header here as payloadSize needs to be there. */
-@@ -1068,7 +1094,7 @@ retry:
- }
- break;
- default:
-- LOG(4, ("failed with result %d\n", result));
-+ LOG(4, ("Server protocol result %d\n", result));
- }
- break;
- default:
-@@ -1109,21 +1135,17 @@ HgfsPackSetattrRequest(const char *path, // IN: path to file
- {
- HgfsAttrV2 *attrV2;
- HgfsAttr *attrV1;
-- HgfsAttrHint *hints;
- HgfsAttrChanges *update;
-- char *fileName = NULL;
-- uint32 *fileNameLength = NULL;
- size_t reqBufferSize;
- size_t reqSize;
-- int result = 0;
- ASSERT(req);
-
- switch (opUsed) {
- case HGFS_OP_SETATTR_V3: {
-+ int result;
- HgfsRequestSetattrV3 *requestV3 = HgfsGetRequestPayload(req);
-
- attrV2 = &requestV3->attr;
-- hints = &requestV3->hints;
-
- /*
- * Clear attributes, mask, and hints before touching them.
-@@ -1131,7 +1153,7 @@ HgfsPackSetattrRequest(const char *path, // IN: path to file
- * make sure to zero them all here.
- */
- memset(attrV2, 0, sizeof *attrV2);
-- memset(hints, 0, sizeof *hints);
-+ requestV3->hints = 0;
-
- /*
- * When possible, issue a setattr using an existing handle. This will
-@@ -1143,14 +1165,21 @@ HgfsPackSetattrRequest(const char *path, // IN: path to file
- * the times also requires write permissions on Windows, so we require it
- * here too. Otherwise, any handle will do.
- */
-- fileName = requestV3->fileName.name;
-- fileNameLength = &requestV3->fileName.length;
- requestV3->fileName.caseType = HGFS_FILE_NAME_CASE_SENSITIVE;
- requestV3->fileName.fid = HGFS_INVALID_HANDLE;
- requestV3->fileName.flags = 0;
- requestV3->reserved = 0;
- reqSize = sizeof(*requestV3) + HgfsGetRequestHeaderSize();
- reqBufferSize = HGFS_NAME_BUFFER_SIZET(HGFS_LARGE_PACKET_MAX, reqSize);
-+ result = CPName_ConvertTo(path,
-+ reqBufferSize,
-+ requestV3->fileName.name);
-+ if (result < 0) {
-+ LOG(4, ("CP conversion failed.\n"));
-+ return -EINVAL;
-+ }
-+ requestV3->fileName.length = result;
-+ reqSize += result;
-
- attrV2->mask = attr->mask;
- if (attr->mask & (HGFS_ATTR_VALID_SPECIAL_PERMS |
-@@ -1173,22 +1202,22 @@ HgfsPackSetattrRequest(const char *path, // IN: path to file
- }
- if (attr->mask & HGFS_ATTR_VALID_ACCESS_TIME) {
- attrV2->accessTime = attr->accessTime;
-- *hints |= HGFS_ATTR_HINT_SET_ACCESS_TIME;
-+ requestV3->hints |= HGFS_ATTR_HINT_SET_ACCESS_TIME;
- }
- if (attr->mask & HGFS_ATTR_VALID_WRITE_TIME) {
- attrV2->writeTime = attr->writeTime;
-- *hints |= HGFS_ATTR_HINT_SET_WRITE_TIME;
-+ requestV3->hints |= HGFS_ATTR_HINT_SET_WRITE_TIME;
- }
-
- break;
- }
- case HGFS_OP_SETATTR_V2: {
-+ int result;
- HgfsRequestSetattrV2 *requestV2;
-
- requestV2 = (HgfsRequestSetattrV2 *)(HGFS_REQ_PAYLOAD(req));
-
- attrV2 = &requestV2->attr;
-- hints = &requestV2->hints;
-
- /*
- * Clear attributes, mask, and hints before touching them.
-@@ -1196,13 +1225,19 @@ HgfsPackSetattrRequest(const char *path, // IN: path to file
- * make sure to zero them all here.
- */
- memset(attrV2, 0, sizeof *attrV2);
-- memset(hints, 0, sizeof *hints);
--
-- fileName = requestV2->fileName.name;
-- fileNameLength = &requestV2->fileName.length;
-+ requestV2->hints = 0;
-
- reqSize = sizeof *requestV2;
- reqBufferSize = HGFS_NAME_BUFFER_SIZE(HGFS_LARGE_PACKET_MAX, requestV2);
-+ result = CPName_ConvertTo(path,
-+ reqBufferSize,
-+ requestV2->fileName.name);
-+ if (result < 0) {
-+ LOG(4, ("CP conversion failed.\n"));
-+ return -EINVAL;
-+ }
-+ requestV2->fileName.length = result;
-+ reqSize += result;
-
- if (attr->mask & (HGFS_ATTR_VALID_SPECIAL_PERMS |
- HGFS_ATTR_VALID_OWNER_PERMS |
-@@ -1224,16 +1259,17 @@ HgfsPackSetattrRequest(const char *path, // IN: path to file
- }
- if (attr->mask & HGFS_ATTR_VALID_ACCESS_TIME) {
- attrV2->accessTime = attr->accessTime;
-- *hints |= HGFS_ATTR_HINT_SET_ACCESS_TIME;
-+ requestV2->hints |= HGFS_ATTR_HINT_SET_ACCESS_TIME;
- }
- if (attr->mask & HGFS_ATTR_VALID_WRITE_TIME) {
- attrV2->writeTime = attr->writeTime;
-- *hints |= HGFS_ATTR_HINT_SET_WRITE_TIME;
-+ requestV2->hints |= HGFS_ATTR_HINT_SET_WRITE_TIME;
- }
-
- break;
- }
- case HGFS_OP_SETATTR: {
-+ int result;
- HgfsRequestSetattr *request;
-
- request = (HgfsRequestSetattr *)(HGFS_REQ_PAYLOAD(req));
-@@ -1241,11 +1277,17 @@ HgfsPackSetattrRequest(const char *path, // IN: path to file
- attrV1 = &request->attr;
- update = &request->update;
-
-- /* We'll use these later. */
-- fileName = request->fileName.name;
-- fileNameLength = &request->fileName.length;
- reqSize = sizeof *request;
- reqBufferSize = HGFS_NAME_BUFFER_SIZE(HGFS_LARGE_PACKET_MAX, request);
-+ result = CPName_ConvertTo(path,
-+ reqBufferSize,
-+ request->fileName.name);
-+ if (result < 0) {
-+ LOG(4, ("CP conversion failed.\n"));
-+ return -EINVAL;
-+ }
-+ request->fileName.length = result;
-+ reqSize += result;
-
- /*
- * Clear attributes before touching them.
-@@ -1284,16 +1326,7 @@ HgfsPackSetattrRequest(const char *path, // IN: path to file
- return -EPROTO;
- }
-
-- result = CPName_ConvertTo(path,
-- reqBufferSize,
-- fileName);
-- if (result < 0) {
-- LOG(4, ("CP conversion failed.\n"));
-- return -EINVAL;
-- }
--
-- *fileNameLength = result;
-- req->payloadSize = reqSize + result;
-+ req->payloadSize = reqSize;
-
- /* Fill in header here as payloadSize needs to be there. */
- HgfsPackHeader(req, opUsed);
-diff --git a/open-vm-tools/vmhgfs-fuse/filesystem.c b/open-vm-tools/vmhgfs-fuse/filesystem.c
-index fb9d547d..1931a5d2 100644
---- a/open-vm-tools/vmhgfs-fuse/filesystem.c
-+++ b/open-vm-tools/vmhgfs-fuse/filesystem.c
-@@ -1,5 +1,5 @@
- /*********************************************************
-- * Copyright (C) 2013 VMware, Inc. All rights reserved.
-+ * Copyright (C) 2013,2019 VMware, Inc. All rights reserved.
- *
- * This program is free software; you can redistribute it and/or modify it
- * under the terms of the GNU Lesser General Public License as published
-@@ -123,36 +123,50 @@ HgfsPackQueryVolumeRequest(const char *path, // IN: File pointer for this
- HgfsOp opUsed, // IN: Op to be used.
- HgfsReq *req) // IN/OUT: Packet to write into
- {
-- char *name;
-- uint32 *nameLength;
- size_t requestSize;
-- int result;
-+
-
- ASSERT(req);
-
- switch (opUsed) {
- case HGFS_OP_QUERY_VOLUME_INFO_V3: {
-+ int result;
- HgfsRequestQueryVolumeV3 *requestV3 = HgfsGetRequestPayload(req);
-
-- /* We'll use these later. */
-- name = requestV3->fileName.name;
-- nameLength = &requestV3->fileName.length;
- requestV3->fileName.flags = 0;
- requestV3->fileName.fid = HGFS_INVALID_HANDLE;
- requestV3->fileName.caseType = HGFS_FILE_NAME_CASE_SENSITIVE;
- requestV3->reserved = 0;
- requestSize = sizeof(*requestV3) + HgfsGetRequestHeaderSize();
-+ /* Convert to CP name. */
-+ result = CPName_ConvertTo(path,
-+ HGFS_LARGE_PACKET_MAX - (requestSize - 1),
-+ requestV3->fileName.name);
-+ if (result < 0) {
-+ LOG(4, ("CP conversion failed.\n"));
-+ return -EINVAL;
-+ }
-+ requestV3->fileName.length = result;
-+ requestSize += result;
- break;
- }
- case HGFS_OP_QUERY_VOLUME_INFO: {
-+ int result;
- HgfsRequestQueryVolume *request;
-
- request = (HgfsRequestQueryVolume *)(HGFS_REQ_PAYLOAD(req));
-
-- /* We'll use these later. */
-- name = request->fileName.name;
-- nameLength = &request->fileName.length;
- requestSize = sizeof *request;
-+ /* Convert to CP name. */
-+ result = CPName_ConvertTo(path,
-+ HGFS_LARGE_PACKET_MAX - (requestSize - 1),
-+ request->fileName.name);
-+ if (result < 0) {
-+ LOG(4, ("CP conversion failed.\n"));
-+ return -EINVAL;
-+ }
-+ request->fileName.length = result;
-+ requestSize += result;
- break;
- }
- default:
-@@ -160,17 +174,7 @@ HgfsPackQueryVolumeRequest(const char *path, // IN: File pointer for this
- return -EPROTO;
- }
-
-- /* Convert to CP name. */
-- result = CPName_ConvertTo(path,
-- HGFS_LARGE_PACKET_MAX - (requestSize - 1),
-- name);
-- if (result < 0) {
-- LOG(4, ("CP conversion failed.\n"));
-- return -EINVAL;
-- }
--
-- *nameLength = (uint32) result;
-- req->payloadSize = requestSize + result;
-+ req->payloadSize = requestSize;
-
- /* Fill in header here as payloadSize needs to be there. */
- HgfsPackHeader(req, opUsed);
-diff --git a/open-vm-tools/vmhgfs-fuse/fsutil.c b/open-vm-tools/vmhgfs-fuse/fsutil.c
-index 042c223c..af85c405 100644
---- a/open-vm-tools/vmhgfs-fuse/fsutil.c
-+++ b/open-vm-tools/vmhgfs-fuse/fsutil.c
-@@ -1,5 +1,5 @@
- /*********************************************************
-- * Copyright (C) 2013 VMware, Inc. All rights reserved.
-+ * Copyright (C) 2013,2019 VMware, Inc. All rights reserved.
- *
- * This program is free software; you can redistribute it and/or modify it
- * under the terms of the GNU Lesser General Public License as published
-@@ -189,8 +189,6 @@ HgfsPackGetattrRequest(HgfsReq *req, // IN/OUT: Request buffer
- size_t reqBufferSize;
- size_t reqSize;
- int result = 0;
-- char *fileName = NULL;
-- uint32 *fileNameLength = NULL;
- ASSERT(attr);
- ASSERT(req);
- ASSERT(path);
-@@ -204,8 +202,6 @@ HgfsPackGetattrRequest(HgfsReq *req, // IN/OUT: Request buffer
-
- /* Fill out the request packet. */
- requestV3->hints = 0;
-- fileName = requestV3->fileName.name;
-- fileNameLength = &requestV3->fileName.length;
- requestV3->fileName.flags = 0;
- requestV3->fileName.fid = HGFS_INVALID_HANDLE;
- requestV3->fileName.caseType = HGFS_FILE_NAME_CASE_SENSITIVE;
-@@ -213,6 +209,19 @@ HgfsPackGetattrRequest(HgfsReq *req, // IN/OUT: Request buffer
- requestV3->reserved = 0;
- reqSize = sizeof(*requestV3) + HgfsGetRequestHeaderSize();
- reqBufferSize = HGFS_NAME_BUFFER_SIZET(HGFS_LARGE_PACKET_MAX, reqSize);
-+ if (requestV3->fileName.name != NULL) {
-+ /* Convert to CP name. */
-+ result = CPName_ConvertTo(path,
-+ reqBufferSize,
-+ requestV3->fileName.name);
-+ LOG(8, ("Converted path %s\n", requestV3->fileName.name));
-+ if (result < 0) {
-+ LOG(8, ("CP conversion failed.\n"));
-+ result = -EINVAL;
-+ goto out;
-+ }
-+ requestV3->fileName.length = result;
-+ }
- break;
- }
-
-@@ -223,20 +232,42 @@ HgfsPackGetattrRequest(HgfsReq *req, // IN/OUT: Request buffer
-
- requestV2 = (HgfsRequestGetattrV2 *)(HGFS_REQ_PAYLOAD(req));
- requestV2->hints = 0;
-- fileName = requestV2->fileName.name;
-- fileNameLength = &requestV2->fileName.length;
- reqSize = sizeof *requestV2;
- reqBufferSize = HGFS_NAME_BUFFER_SIZE(HGFS_LARGE_PACKET_MAX, requestV2);
-+ if (requestV2->fileName.name != NULL) {
-+ /* Convert to CP name. */
-+ result = CPName_ConvertTo(path,
-+ reqBufferSize,
-+ requestV2->fileName.name);
-+ LOG(8, ("Converted path %s\n", requestV2->fileName.name));
-+ if (result < 0) {
-+ LOG(8, ("CP conversion failed.\n"));
-+ result = -EINVAL;
-+ goto out;
-+ }
-+ requestV2->fileName.length = result;
-+ }
- break;
- }
-
- case HGFS_OP_GETATTR: {
- HgfsRequestGetattr *requestV1;
- requestV1 = (HgfsRequestGetattr *)(HGFS_REQ_PAYLOAD(req));
-- fileName = requestV1->fileName.name;
-- fileNameLength = &requestV1->fileName.length;
- reqSize = sizeof *requestV1;
- reqBufferSize = HGFS_NAME_BUFFER_SIZE(HGFS_LARGE_PACKET_MAX, requestV1);
-+ if (requestV1->fileName.name != NULL) {
-+ /* Convert to CP name. */
-+ result = CPName_ConvertTo(path,
-+ reqBufferSize,
-+ requestV1->fileName.name);
-+ LOG(8, ("Converted path %s\n", requestV1->fileName.name));
-+ if (result < 0) {
-+ LOG(8, ("CP conversion failed.\n"));
-+ result = -EINVAL;
-+ goto out;
-+ }
-+ requestV1->fileName.length = result;
-+ }
- break;
- }
-
-@@ -246,20 +277,6 @@ HgfsPackGetattrRequest(HgfsReq *req, // IN/OUT: Request buffer
- goto out;
- }
-
-- if (fileName != NULL) {
-- /* Convert to CP name. */
-- result = CPName_ConvertTo(path,
-- reqBufferSize,
-- fileName);
-- LOG(8, ("Converted path %s\n", fileName));
-- if (result < 0) {
-- LOG(8, ("CP conversion failed.\n"));
-- result = -EINVAL;
-- goto out;
-- }
-- *fileNameLength = result;
-- }
--
- req->payloadSize = reqSize + result;
-
- /* Fill in header here as payloadSize needs to be there. */
-diff --git a/open-vm-tools/vmhgfs-fuse/link.c b/open-vm-tools/vmhgfs-fuse/link.c
-index a00e8446..777eb76e 100644
---- a/open-vm-tools/vmhgfs-fuse/link.c
-+++ b/open-vm-tools/vmhgfs-fuse/link.c
-@@ -1,5 +1,5 @@
- /*********************************************************
-- * Copyright (C) 2013 VMware, Inc. All rights reserved.
-+ * Copyright (C) 2013,2019 VMware, Inc. All rights reserved.
- *
- * This program is free software; you can redistribute it and/or modify it
- * under the terms of the GNU Lesser General Public License as published
-@@ -51,36 +51,81 @@ HgfsPackSymlinkCreateRequest(const char* symlink, // IN: path of the link
- {
- HgfsRequestSymlinkCreateV3 *requestV3 = NULL;
- HgfsRequestSymlinkCreate *request = NULL;
-- char *symlinkName;
-- uint32 *symlinkNameLength;
-- char *targetName;
-- uint32 *targetNameLength;
- size_t targetNameBytes;
--
- size_t requestSize;
-- int result;
-+
-+ targetNameBytes = strlen(symname) + 1;
-
- switch (opUsed) {
- case HGFS_OP_CREATE_SYMLINK_V3: {
-+ int result;
-+ HgfsFileNameV3 *fileNameP;
- requestV3 = HgfsGetRequestPayload(req);
-
-- /* We'll use these later. */
-- symlinkName = requestV3->symlinkName.name;
-- symlinkNameLength = &requestV3->symlinkName.length;
- requestV3->symlinkName.flags = 0;
- requestV3->symlinkName.fid = HGFS_INVALID_HANDLE;
- requestV3->symlinkName.caseType = HGFS_FILE_NAME_CASE_SENSITIVE;
- requestV3->reserved = 0;
- requestSize = sizeof(*requestV3) + HgfsGetRequestHeaderSize();
-+ /* Convert symlink name to CP format. */
-+ result = CPName_ConvertTo(symlink,
-+ HGFS_LARGE_PACKET_MAX - (requestSize - 1),
-+ requestV3->symlinkName.name);
-+ if (result < 0) {
-+ LOG(4, ("SymlinkName CP conversion failed.\n"));
-+ return -EINVAL;
-+ }
-+ requestV3->symlinkName.length = result;
-+ requestSize += result;
-+
-+ /* Copy target name into request packet. */
-+ if (targetNameBytes > HGFS_LARGE_PACKET_MAX - (requestSize - 1)) {
-+ LOG(4, ("Target name is too long.\n"));
-+ return -EINVAL;
-+ }
-+
-+ fileNameP = (HgfsFileNameV3 *)((char *)&requestV3->symlinkName +
-+ sizeof requestV3->symlinkName + result);
-+ memcpy(fileNameP->name, symname, targetNameBytes);
-+ LOG(6, ("Target name: \"%s\"\n", fileNameP->name));
-+ /* Convert target name to CPName-lite format. */
-+ CPNameLite_ConvertTo(fileNameP->name, targetNameBytes - 1, '/');
-+ fileNameP->length = targetNameBytes - 1;
-+ fileNameP->flags = 0;
-+ fileNameP->fid = HGFS_INVALID_HANDLE;
-+ fileNameP->caseType = HGFS_FILE_NAME_CASE_SENSITIVE;
- break;
- }
- case HGFS_OP_CREATE_SYMLINK: {
-+ int result;
-+ HgfsFileName *fileNameP;
- request = (HgfsRequestSymlinkCreate *)(HGFS_REQ_PAYLOAD(req));
-
-- /* We'll use these later. */
-- symlinkName = request->symlinkName.name;
-- symlinkNameLength = &request->symlinkName.length;
- requestSize = sizeof *request;
-+ /* Convert symlink name to CP format. */
-+ result = CPName_ConvertTo(symlink,
-+ HGFS_LARGE_PACKET_MAX - (requestSize - 1),
-+ request->symlinkName.name);
-+ if (result < 0) {
-+ LOG(4, ("SymlinkName CP conversion failed.\n"));
-+ return -EINVAL;
-+ }
-+ request->symlinkName.length = result;
-+ requestSize += result;
-+
-+ /* Copy target name into request packet. */
-+ if (targetNameBytes > HGFS_LARGE_PACKET_MAX - (requestSize - 1)) {
-+ LOG(4, ("Target name is too long.\n"));
-+ return -EINVAL;
-+ }
-+
-+ fileNameP = (HgfsFileName *)((char *)&request->symlinkName +
-+ sizeof request->symlinkName + result);
-+ memcpy(fileNameP->name, symname, targetNameBytes);
-+ LOG(6, ("Target name: \"%s\"\n", fileNameP->name));
-+ /* Convert target name to CPName-lite format. */
-+ CPNameLite_ConvertTo(fileNameP->name, targetNameBytes - 1, '/');
-+ fileNameP->length = targetNameBytes - 1;
- break;
- }
- default:
-@@ -88,59 +133,13 @@ HgfsPackSymlinkCreateRequest(const char* symlink, // IN: path of the link
- return -EPROTO;
- }
-
--
-- /* Convert symlink name to CP format. */
-- result = CPName_ConvertTo(symlink,
-- HGFS_LARGE_PACKET_MAX - (requestSize - 1),
-- symlinkName);
-- if (result < 0) {
-- LOG(4, ("SymlinkName CP conversion failed.\n"));
-- return -EINVAL;
-- }
--
-- *symlinkNameLength = result;
-- req->payloadSize = requestSize + result;
-+ req->payloadSize = requestSize;
-
- /*
-- * Note the different buffer length. This is because HgfsRequestSymlink
-- * contains two filenames, and once we place the first into the packet we
-- * must account for it when determining the amount of buffer available for
-- * the second.
-- *
-- * Also note that targetNameBytes accounts for the NUL character. Once
-- * we've converted it to CP name, it won't be NUL-terminated and the length
-- * of the string in the packet itself won't account for it.
-+ * targetNameBytes accounts for the NUL character. Once we've converted
-+ * it to CP name, it won't be NUL-terminated and the length of the string
-+ * in the packet itself won't account for it.
- */
-- if (opUsed == HGFS_OP_CREATE_SYMLINK_V3) {
-- HgfsFileNameV3 *fileNameP;
-- fileNameP = (HgfsFileNameV3 *)((char *)&requestV3->symlinkName +
-- sizeof requestV3->symlinkName + result);
-- targetName = fileNameP->name;
-- targetNameLength = &fileNameP->length;
-- fileNameP->flags = 0;
-- fileNameP->fid = HGFS_INVALID_HANDLE;
-- fileNameP->caseType = HGFS_FILE_NAME_CASE_SENSITIVE;
-- } else {
-- HgfsFileName *fileNameP;
-- fileNameP = (HgfsFileName *)((char *)&request->symlinkName +
-- sizeof request->symlinkName + result);
-- targetName = fileNameP->name;
-- targetNameLength = &fileNameP->length;
-- }
-- targetNameBytes = strlen(symname) + 1;
--
-- /* Copy target name into request packet. */
-- if (targetNameBytes > HGFS_LARGE_PACKET_MAX - (requestSize - 1)) {
-- LOG(4, ("Target name is too long.\n"));
-- return -EINVAL;
-- }
-- memcpy(targetName, symname, targetNameBytes);
-- LOG(6, ("Target name: \"%s\"\n", targetName));
--
-- /* Convert target name to CPName-lite format. */
-- CPNameLite_ConvertTo(targetName, targetNameBytes - 1, '/');
--
-- *targetNameLength = targetNameBytes - 1;
- req->payloadSize += targetNameBytes - 1;
-
- /* Fill in header here as payloadSize needs to be there. */