commit 73b816982a76e79e2751a0de8fb1506e10df8081
Author: Brian Campbell <bacam@z273.org.uk>
Date: Thu Dec 30 18:04:50 2010 +0000
Fix symlink on shared folders where sizeof(RTFSOBJINFO) != sizeof(SHFLFSOBJINFO)
diff --git a/src/VBox/HostServices/SharedFolders/service.cpp b/src/VBox/HostServices/SharedFolders/service.cpp
index 75c5641..64888ea 100644
|
a
|
b
|
static DECLCALLBACK(void) svcCall (void *, VBOXHGCMCALLHANDLE callHandle, uint32
|
| 1183 | 1183 | SHFLROOT root = (SHFLROOT)paParms[0].u.uint32; |
| 1184 | 1184 | SHFLSTRING *pNewPath = (SHFLSTRING *)paParms[1].u.pointer.addr; |
| 1185 | 1185 | SHFLSTRING *pOldPath = (SHFLSTRING *)paParms[2].u.pointer.addr; |
| 1186 | | RTFSOBJINFO *pInfo = (RTFSOBJINFO *)paParms[3].u.pointer.addr; |
| | 1186 | SHFLFSOBJINFO *pInfo = (SHFLFSOBJINFO *)paParms[3].u.pointer.addr; |
| 1187 | 1187 | uint32_t cbInfo = paParms[3].u.pointer.size; |
| 1188 | 1188 | |
| 1189 | 1189 | /* Verify parameters values. */ |
| 1190 | 1190 | if ( !ShflStringIsValid(pNewPath, paParms[1].u.pointer.size) |
| 1191 | 1191 | || !ShflStringIsValid(pOldPath, paParms[2].u.pointer.size) |
| 1192 | | || (cbInfo != sizeof(RTFSOBJINFO)) |
| | 1192 | || (cbInfo != sizeof(SHFLFSOBJINFO)) |
| 1193 | 1193 | ) |
| 1194 | 1194 | { |
| 1195 | 1195 | rc = VERR_INVALID_PARAMETER; |
diff --git a/src/VBox/HostServices/SharedFolders/vbsf.cpp b/src/VBox/HostServices/SharedFolders/vbsf.cpp
index b549739..78f3214 100644
|
a
|
b
|
int vbsfRename(SHFLCLIENTDATA *pClient, SHFLROOT root, SHFLSTRING *pSrc, SHFLSTR
|
| 2146 | 2146 | return rc; |
| 2147 | 2147 | } |
| 2148 | 2148 | |
| 2149 | | int vbsfSymlink(SHFLCLIENTDATA *pClient, SHFLROOT root, SHFLSTRING *pNewPath, SHFLSTRING *pOldPath, RTFSOBJINFO *pInfo) |
| | 2149 | int vbsfSymlink(SHFLCLIENTDATA *pClient, SHFLROOT root, SHFLSTRING *pNewPath, SHFLSTRING *pOldPath, SHFLFSOBJINFO *pInfo) |
| 2150 | 2150 | { |
| 2151 | 2151 | int rc = VINF_SUCCESS; |
| 2152 | 2152 | |
| … |
… |
int vbsfSymlink(SHFLCLIENTDATA *pClient, SHFLROOT root, SHFLSTRING *pNewPath, SH
|
| 2162 | 2162 | return rc; |
| 2163 | 2163 | |
| 2164 | 2164 | rc = RTSymlinkCreate(pszFullNewPath, (const char *)pOldPath->String.utf8, RTSYMLINKTYPE_UNKNOWN); |
| 2165 | | if (RT_SUCCESS (rc)) |
| 2166 | | rc = RTPathQueryInfoEx(pszFullNewPath, pInfo, RTFSOBJATTRADD_NOTHING, SHFL_RT_LINK(pClient)); |
| | 2165 | if (RT_SUCCESS (rc)) { |
| | 2166 | RTFSOBJINFO info; |
| | 2167 | rc = RTPathQueryInfoEx(pszFullNewPath, &info, RTFSOBJATTRADD_NOTHING, SHFL_RT_LINK(pClient)); |
| | 2168 | if (RT_SUCCESS (rc)) |
| | 2169 | vbfsCopyFsObjInfoFromIprt(pInfo, &info); |
| | 2170 | } |
| 2167 | 2171 | |
| 2168 | 2172 | vbsfFreeFullPath(pszFullNewPath); |
| 2169 | 2173 | |
diff --git a/src/VBox/HostServices/SharedFolders/vbsf.h b/src/VBox/HostServices/SharedFolders/vbsf.h
index 7827bca..7697968 100644
|
a
|
b
|
int vbsfFlush(SHFLCLIENTDATA *pClient, SHFLROOT root, SHFLHANDLE Handle);
|
| 38 | 38 | int vbsfDisconnect(SHFLCLIENTDATA *pClient); |
| 39 | 39 | int vbsfQueryFileInfo(SHFLCLIENTDATA *pClient, SHFLROOT root, SHFLHANDLE Handle, uint32_t flags, uint32_t *pcbBuffer, uint8_t *pBuffer); |
| 40 | 40 | int vbsfReadLink(SHFLCLIENTDATA *pClient, SHFLROOT root, SHFLSTRING *pPath, uint32_t cbPath, uint8_t *pBuffer, uint32_t cbBuffer); |
| 41 | | int vbsfSymlink(SHFLCLIENTDATA *pClient, SHFLROOT root, SHFLSTRING *pNewPath, SHFLSTRING *pOldPath, RTFSOBJINFO *pInfo); |
| | 41 | int vbsfSymlink(SHFLCLIENTDATA *pClient, SHFLROOT root, SHFLSTRING *pNewPath, SHFLSTRING *pOldPath, SHFLFSOBJINFO *pInfo); |
| 42 | 42 | |
| 43 | 43 | #endif /* __VBSF__H */ |