- Timestamp:
- Jul 10, 2015 6:09:14 AM (10 years ago)
- Location:
- trunk
- Files:
-
- 5 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/include/VBox/GuestHost/DragAndDrop.h
r56903 r56909 177 177 178 178 void Clear(void); 179 DnDURIObject &First(void) { return m_lstTree.first(); }180 bool IsEmpty(void) { return m_lstTree.isEmpty(); }179 DnDURIObject *First(void) { return m_lstTree.first(); } 180 bool IsEmpty(void) const { return m_lstTree.isEmpty(); } 181 181 void RemoveFirst(void); 182 182 int RootFromURIData(const void *pvData, size_t cbData, uint32_t fFlags); 183 183 RTCString RootToString(const RTCString &strPathBase = "", const RTCString &strSeparator = "\r\n"); 184 size_t RootCount(void) { return m_lstRoot.size(); }185 uint32_t TotalCount(void) { return m_cTotal; }186 size_t TotalBytes(void) { return m_cbTotal; }184 size_t RootCount(void) const { return m_lstRoot.size(); } 185 uint32_t TotalCount(void) const { return m_cTotal; } 186 size_t TotalBytes(void) const { return m_cbTotal; } 187 187 188 188 protected: … … 196 196 * Note: All paths are kept internally as UNIX paths for 197 197 * easier conversion/handling! */ 198 RTCList<RTCString> m_lstRoot; 199 /** List of all URI objects added. */ 200 RTCList<DnDURIObject> m_lstTree; 198 RTCList<RTCString> m_lstRoot; 199 /** List of all URI objects added. The list's content 200 * might vary depending on how the objects are being 201 * added (lazy or not). */ 202 RTCList<DnDURIObject *> m_lstTree; 201 203 /** Total number of all URI objects. */ 202 uint32_t m_cTotal;204 uint32_t m_cTotal; /** @todo Really needed? m_lstTree.size()? */ 203 205 /** Total size of all URI objects, that is, the file 204 206 * size of all objects (in bytes). */ 205 size_t m_cbTotal;207 size_t m_cbTotal; 206 208 }; 207 209 #endif /* ___VBox_GuestHost_DragAndDrop_h */ -
trunk/src/VBox/Additions/common/VBoxGuestLib/VBoxGuestR3LibDragAndDrop.cpp
r56904 r56909 1231 1231 } 1232 1232 1233 static int vbglR3DnDGHSendDir(PVBGLR3GUESTDNDCMDCTX pCtx, DnDURIObject &obj) 1234 { 1235 AssertPtrReturn(pCtx, VERR_INVALID_POINTER); 1236 AssertReturn(obj.GetType() == DnDURIObject::Directory, VERR_INVALID_PARAMETER); 1233 static int vbglR3DnDGHSendDir(PVBGLR3GUESTDNDCMDCTX pCtx, DnDURIObject *pObj) 1234 { 1235 AssertPtrReturn(pObj, VERR_INVALID_POINTER); 1236 AssertPtrReturn(pCtx, VERR_INVALID_POINTER); 1237 AssertReturn(pObj->GetType() == DnDURIObject::Directory, VERR_INVALID_PARAMETER); 1237 1238 1238 1239 DragAndDropSvc::VBOXDNDGHSENDDIRMSG Msg; … … 1243 1244 Msg.hdr.cParms = 3; 1244 1245 1245 RTCString strPath = obj.GetDestPath();1246 RTCString strPath = pObj->GetDestPath(); 1246 1247 LogFlowFunc(("strDir=%s (%zu), fMode=0x%x\n", 1247 strPath.c_str(), strPath.length(), obj.GetMode()));1248 strPath.c_str(), strPath.length(), pObj->GetMode())); 1248 1249 1249 1250 Msg.pvName.SetPtr((void *)strPath.c_str(), (uint32_t)(strPath.length() + 1)); 1250 1251 Msg.cbName.SetUInt32((uint32_t)(strPath.length() + 1)); 1251 Msg.fMode.SetUInt32( obj.GetMode());1252 Msg.fMode.SetUInt32(pObj->GetMode()); 1252 1253 1253 1254 int rc = vbglR3DoIOCtl(VBOXGUEST_IOCTL_HGCM_CALL(sizeof(Msg)), &Msg, sizeof(Msg)); … … 1259 1260 } 1260 1261 1261 static int vbglR3DnDGHSendFile(PVBGLR3GUESTDNDCMDCTX pCtx, DnDURIObject &obj) 1262 { 1263 AssertPtrReturn(pCtx, VERR_INVALID_POINTER); 1264 AssertReturn(obj.GetType() == DnDURIObject::File, VERR_INVALID_PARAMETER); 1265 AssertReturn(obj.IsOpen(), VERR_INVALID_STATE); 1262 static int vbglR3DnDGHSendFile(PVBGLR3GUESTDNDCMDCTX pCtx, DnDURIObject *pObj) 1263 { 1264 AssertPtrReturn(pCtx, VERR_INVALID_POINTER); 1265 AssertPtrReturn(pObj, VERR_INVALID_POINTER); 1266 AssertReturn(pObj->GetType() == DnDURIObject::File, VERR_INVALID_PARAMETER); 1267 AssertReturn(pObj->IsOpen(), VERR_INVALID_STATE); 1266 1268 1267 1269 uint32_t cbBuf = _64K; /** @todo Make this configurable? */ … … 1272 1274 int rc; 1273 1275 1274 RTCString strPath = obj.GetDestPath(); 1275 1276 LogFlowFunc(("strFile=%s (%zu), cbSize=%RU64, fMode=0x%x\n", strPath.c_str(), strPath.length(), obj.GetSize(), obj.GetMode())); 1276 RTCString strPath = pObj->GetDestPath(); 1277 1278 LogFlowFunc(("strFile=%s (%zu), cbSize=%RU64, fMode=0x%x\n", strPath.c_str(), strPath.length(), 1279 pObj->GetSize(), pObj->GetMode())); 1277 1280 LogFlowFunc(("uProtocol=%RU32, uClientID=%RU32\n", pCtx->uProtocol, pCtx->uClientID)); 1278 1281 … … 1290 1293 MsgHdr.cbName.SetUInt32((uint32_t)(strPath.length() + 1)); 1291 1294 MsgHdr.uFlags.SetUInt32(0); /* Flags; unused at the moment. */ 1292 MsgHdr.fMode.SetUInt32( obj.GetMode());/* File mode */1293 MsgHdr.cbTotal.SetUInt64( obj.GetSize());/* File size (in bytes). */1295 MsgHdr.fMode.SetUInt32(pObj->GetMode()); /* File mode */ 1296 MsgHdr.cbTotal.SetUInt64(pObj->GetSize()); /* File size (in bytes). */ 1294 1297 1295 1298 rc = vbglR3DoIOCtl(VBOXGUEST_IOCTL_HGCM_CALL(sizeof(MsgHdr)), &MsgHdr, sizeof(MsgHdr)); … … 1319 1322 Msg.u.v1.pvName.SetPtr((void *)strPath.c_str(), (uint32_t)(strPath.length() + 1)); 1320 1323 Msg.u.v1.cbName.SetUInt32((uint32_t)(strPath.length() + 1)); 1321 Msg.u.v1.fMode.SetUInt32( obj.GetMode());1324 Msg.u.v1.fMode.SetUInt32(pObj->GetMode()); 1322 1325 } 1323 1326 else … … 1329 1332 } 1330 1333 1331 uint64_t cbToReadTotal = obj.GetSize();1334 uint64_t cbToReadTotal = pObj->GetSize(); 1332 1335 uint64_t cbWrittenTotal = 0; 1333 1336 while (cbToReadTotal) … … 1336 1339 uint32_t cbRead = 0; 1337 1340 if (cbToRead) 1338 rc = obj.Read(pvBuf, cbToRead, &cbRead);1341 rc = pObj->Read(pvBuf, cbToRead, &cbRead); 1339 1342 1340 1343 LogFlowFunc(("cbToReadTotal=%RU64, cbToRead=%RU32, cbRead=%RU32, rc=%Rrc\n", … … 1370 1373 cbWrittenTotal += cbRead; 1371 1374 1372 LogFlowFunc(("%RU64/%RU64 -- %RU8%%\n", cbWrittenTotal, obj.GetSize(), cbWrittenTotal * 100 / obj.GetSize()));1375 LogFlowFunc(("%RU64/%RU64 -- %RU8%%\n", cbWrittenTotal, pObj->GetSize(), cbWrittenTotal * 100 / pObj->GetSize())); 1373 1376 }; 1374 1377 } … … 1380 1383 } 1381 1384 1382 static int vbglR3DnDGHSendURIObject(PVBGLR3GUESTDNDCMDCTX pCtx, DnDURIObject &obj)1385 static int vbglR3DnDGHSendURIObject(PVBGLR3GUESTDNDCMDCTX pCtx, DnDURIObject *pObj) 1383 1386 { 1384 1387 AssertPtrReturn(pCtx, VERR_INVALID_POINTER); 1388 AssertPtrReturn(pObj, VERR_INVALID_POINTER); 1385 1389 1386 1390 int rc; 1387 1391 1388 switch ( obj.GetType())1392 switch (pObj->GetType()) 1389 1393 { 1390 1394 case DnDURIObject::Directory: 1391 rc = vbglR3DnDGHSendDir(pCtx, obj);1395 rc = vbglR3DnDGHSendDir(pCtx, pObj); 1392 1396 break; 1393 1397 1394 1398 case DnDURIObject::File: 1395 rc = vbglR3DnDGHSendFile(pCtx, obj);1399 rc = vbglR3DnDGHSendFile(pCtx, pObj); 1396 1400 break; 1397 1401 1398 1402 default: 1399 AssertMsgFailed((" URI type %ld not implemented\n", obj.GetType()));1403 AssertMsgFailed(("Object type %ld not implemented\n", pObj->GetType())); 1400 1404 rc = VERR_NOT_IMPLEMENTED; 1401 1405 break; … … 1441 1445 while (!lstURI.IsEmpty()) 1442 1446 { 1443 DnDURIObject &nextObj = lstURI.First();1444 1445 rc = vbglR3DnDGHSendURIObject(pCtx, nextObj);1447 DnDURIObject *pNextObj = lstURI.First(); 1448 1449 rc = vbglR3DnDGHSendURIObject(pCtx, pNextObj); 1446 1450 if (RT_FAILURE(rc)) 1447 1451 break; -
trunk/src/VBox/GuestHost/DragAndDrop/DnDURIList.cpp
r56903 r56909 43 43 DnDURIList::~DnDURIList(void) 44 44 { 45 Clear(); 45 46 } 46 47 … … 60 61 LogFlowFunc(("File '%s' -> '%s' (%RU64)\n", pcszSource, pcszTarget, (uint64_t)objInfo.cbObject)); 61 62 62 DnDURIObject objFile(DnDURIObject::File, pcszSource, pcszTarget); 63 if (fFlags & DNDURILIST_FLAGS_KEEP_OPEN) /* Shall we keep the file open while being added to this list? */ 64 { 65 /** @todo Add a standard fOpen mode for this list. */ 66 rc = objFile.Open(DnDURIObject::Source, RTFILE_O_OPEN | RTFILE_O_READ | RTFILE_O_DENY_WRITE, objInfo.Attr.fMode); 67 } 68 69 if (RT_SUCCESS(rc)) 70 { 71 m_lstTree.append(objFile); 72 73 m_cTotal++; 74 m_cbTotal += (uint64_t)objInfo.cbObject; 75 } 63 DnDURIObject *pObjFile= new DnDURIObject(DnDURIObject::File, pcszSource, pcszTarget); 64 if (pObjFile) 65 { 66 if (fFlags & DNDURILIST_FLAGS_KEEP_OPEN) /* Shall we keep the file open while being added to this list? */ 67 { 68 /** @todo Add a standard fOpen mode for this list. */ 69 rc = pObjFile->Open(DnDURIObject::Source, RTFILE_O_OPEN | RTFILE_O_READ | RTFILE_O_DENY_WRITE, objInfo.Attr.fMode); 70 } 71 72 if (RT_SUCCESS(rc)) 73 { 74 m_lstTree.append(pObjFile); 75 76 m_cTotal++; 77 m_cbTotal += pObjFile->GetSize(); 78 } 79 } 80 else 81 rc = VERR_NO_MEMORY; 76 82 } 77 83 else if (RTFS_IS_DIRECTORY(objInfo.Attr.fMode)) … … 79 85 LogFlowFunc(("Directory '%s' -> '%s' \n", pcszSource, pcszTarget)); 80 86 81 m_lstTree.append(DnDURIObject(DnDURIObject::Directory, pcszSource, pcszTarget, 82 objInfo.Attr.fMode, 0 /* Size */)); 87 DnDURIObject *pObjDir= new DnDURIObject(DnDURIObject::Directory, pcszSource, pcszTarget, 88 objInfo.Attr.fMode, 0 /* Size */); 89 if (pObjDir) 90 { 91 m_lstTree.append(pObjDir); 92 } 93 else 94 rc = VERR_NO_MEMORY; 83 95 84 96 /** @todo Add DNDURILIST_FLAGS_KEEP_OPEN handling. */ … … 397 409 { 398 410 m_lstRoot.clear(); 411 412 for (size_t i = 0; i < m_lstTree.size(); i++) 413 { 414 DnDURIObject *pCurObj = m_lstTree.at(i); 415 AssertPtr(pCurObj); 416 RTMemFree(pCurObj); 417 } 399 418 m_lstTree.clear(); 400 419 … … 408 427 return; 409 428 410 DnDURIObject &curObj = m_lstTree.first(); 411 412 uint64_t cbSize = curObj.GetSize(); 429 DnDURIObject *pCurObj = m_lstTree.first(); 430 AssertPtr(pCurObj); 431 432 uint64_t cbSize = pCurObj->GetSize(); 413 433 Assert(m_cbTotal >= cbSize); 414 434 m_cbTotal -= cbSize; /* Adjust total size. */ 415 435 416 curObj.Close(); 436 pCurObj->Close(); 437 RTMemFree(pCurObj); 417 438 418 439 m_lstTree.removeFirst(); -
trunk/src/VBox/Main/include/GuestDnDTargetImpl.h
r55963 r56909 85 85 int i_cancelOperation(void); 86 86 int i_sendData(PSENDDATACTX pCtx, RTMSINTERVAL msTimeout); 87 int i_sendDirectory(PSENDDATACTX pCtx, GuestDnDMsg *pMsg, DnDURIObject &aDirectory);88 int i_sendFile(PSENDDATACTX pCtx, GuestDnDMsg *pMsg, DnDURIObject &aFile);89 int i_sendFileData(PSENDDATACTX pCtx, GuestDnDMsg *pMsg, DnDURIObject &aFile);87 int i_sendDirectory(PSENDDATACTX pCtx, GuestDnDMsg *pMsg, DnDURIObject *pObject); 88 int i_sendFile(PSENDDATACTX pCtx, GuestDnDMsg *pMsg, DnDURIObject *pObject); 89 int i_sendFileData(PSENDDATACTX pCtx, GuestDnDMsg *pMsg, DnDURIObject *pObject); 90 90 int i_sendURIData(PSENDDATACTX pCtx, RTMSINTERVAL msTimeout); 91 91 int i_sendRawData(PSENDDATACTX pCtx, RTMSINTERVAL msTimeout); -
trunk/src/VBox/Main/src-client/GuestDnDTargetImpl.cpp
r56657 r56909 756 756 } 757 757 758 int GuestDnDTarget::i_sendDirectory(PSENDDATACTX pCtx, GuestDnDMsg *pMsg, DnDURIObject &aDirectory) 759 { 760 AssertPtrReturn(pCtx, VERR_INVALID_POINTER); 761 762 RTCString strPath = aDirectory.GetDestPath(); 758 int GuestDnDTarget::i_sendDirectory(PSENDDATACTX pCtx, GuestDnDMsg *pMsg, DnDURIObject *pObject) 759 { 760 AssertPtrReturn(pObject, VERR_INVALID_POINTER); 761 AssertPtrReturn(pCtx, VERR_INVALID_POINTER); 762 763 RTCString strPath = pObject->GetDestPath(); 763 764 if (strPath.isEmpty()) 764 765 return VERR_INVALID_PARAMETER; … … 771 772 pMsg->setNextString(strPath.c_str()); /* path */ 772 773 pMsg->setNextUInt32((uint32_t)(strPath.length() + 1)); /* path length - note: Maximum is RTPATH_MAX on guest side. */ 773 pMsg->setNextUInt32( aDirectory.GetMode()); /* mode */774 pMsg->setNextUInt32(pObject->GetMode()); /* mode */ 774 775 775 776 return VINF_SUCCESS; 776 777 } 777 778 778 int GuestDnDTarget::i_sendFile(PSENDDATACTX pCtx, GuestDnDMsg *pMsg, DnDURIObject &aFile) 779 { 780 AssertPtrReturn(pCtx, VERR_INVALID_POINTER); 781 782 RTCString strPathSrc = aFile.GetSourcePath(); 779 int GuestDnDTarget::i_sendFile(PSENDDATACTX pCtx, GuestDnDMsg *pMsg, DnDURIObject *pObject) 780 { 781 AssertPtrReturn(pObject, VERR_INVALID_POINTER); 782 AssertPtrReturn(pCtx, VERR_INVALID_POINTER); 783 784 RTCString strPathSrc = pObject->GetSourcePath(); 783 785 if (strPathSrc.isEmpty()) 784 786 return VERR_INVALID_PARAMETER; … … 789 791 strPathSrc.c_str(), mData.mcbBlockSize, mDataBase.mProtocolVersion)); 790 792 791 bool fOpen = aFile.IsOpen();793 bool fOpen = pObject->IsOpen(); 792 794 if (!fOpen) 793 795 { 794 796 LogFlowFunc(("Opening \"%s\" ...\n", strPathSrc.c_str())); 795 rc = aFile.OpenEx(strPathSrc, DnDURIObject::File, DnDURIObject::Source,797 rc = pObject->OpenEx(strPathSrc, DnDURIObject::File, DnDURIObject::Source, 796 798 RTFILE_O_OPEN | RTFILE_O_READ | RTFILE_O_DENY_WRITE, 0 /* fFlags */); 797 799 if (RT_FAILURE(rc)) … … 813 815 pMsg->setType(DragAndDropSvc::HOST_DND_HG_SND_FILE_HDR); 814 816 pMsg->setNextUInt32(0); /* context ID */ 815 rc = pMsg->setNextString( aFile.GetDestPath().c_str()); /* pvName */817 rc = pMsg->setNextString(pObject->GetDestPath().c_str()); /* pvName */ 816 818 AssertRC(rc); 817 pMsg->setNextUInt32((uint32_t)( aFile.GetDestPath().length() + 1)); /* cbName */819 pMsg->setNextUInt32((uint32_t)(pObject->GetDestPath().length() + 1)); /* cbName */ 818 820 pMsg->setNextUInt32(0); /* uFlags */ 819 pMsg->setNextUInt32( aFile.GetMode()); /* fMode */820 pMsg->setNextUInt64( aFile.GetSize()); /* uSize */821 pMsg->setNextUInt32(pObject->GetMode()); /* fMode */ 822 pMsg->setNextUInt64(pObject->GetSize()); /* uSize */ 821 823 822 824 LogFlowFunc(("Sending file header ...\n")); 823 825 LogRel2(("DnD: Transferring host file to guest: %s (%RU64 bytes, mode 0x%x)\n", 824 strPathSrc.c_str(), aFile.GetSize(), aFile.GetMode()));826 strPathSrc.c_str(), pObject->GetSize(), pObject->GetMode())); 825 827 826 828 /** @todo Set progress object title to current file being transferred? */ … … 842 844 && fSendFileData) 843 845 { 844 rc = i_sendFileData(pCtx, pMsg, aFile);846 rc = i_sendFileData(pCtx, pMsg, pObject); 845 847 } 846 848 … … 849 851 } 850 852 851 int GuestDnDTarget::i_sendFileData(PSENDDATACTX pCtx, GuestDnDMsg *pMsg, DnDURIObject &aFile) 852 { 853 AssertPtrReturn(pCtx, VERR_INVALID_POINTER); 854 AssertPtrReturn(pMsg, VERR_INVALID_POINTER); 853 int GuestDnDTarget::i_sendFileData(PSENDDATACTX pCtx, GuestDnDMsg *pMsg, DnDURIObject *pObject) 854 { 855 AssertPtrReturn(pObject, VERR_INVALID_POINTER); 856 AssertPtrReturn(pCtx, VERR_INVALID_POINTER); 857 AssertPtrReturn(pMsg, VERR_INVALID_POINTER); 855 858 856 859 GuestDnDResponse *pResp = pCtx->mpResp; … … 877 880 if (mDataBase.mProtocolVersion <= 1) 878 881 { 879 pMsg->setNextString( aFile.GetDestPath().c_str()); /* pvName */880 pMsg->setNextUInt32((uint32_t)( aFile.GetDestPath().length() + 1)); /* cbName */882 pMsg->setNextString(pObject->GetDestPath().c_str()); /* pvName */ 883 pMsg->setNextUInt32((uint32_t)(pObject->GetDestPath().length() + 1)); /* cbName */ 881 884 } 882 885 else … … 888 891 uint32_t cbRead = 0; 889 892 890 int rc = aFile.Read(pCtx->mURI.pvScratchBuf, pCtx->mURI.cbScratchBuf, &cbRead);893 int rc = pObject->Read(pCtx->mURI.pvScratchBuf, pCtx->mURI.cbScratchBuf, &cbRead); 891 894 if (RT_SUCCESS(rc)) 892 895 { … … 897 900 pMsg->setNextPointer(pCtx->mURI.pvScratchBuf, cbRead); /* pvData */ 898 901 pMsg->setNextUInt32(cbRead); /* cbData */ 899 pMsg->setNextUInt32( aFile.GetMode()); /* fMode */902 pMsg->setNextUInt32(pObject->GetMode()); /* fMode */ 900 903 } 901 904 else … … 905 908 } 906 909 907 if ( aFile.IsComplete()) /* Done reading? */908 { 909 LogRel2(("DnD: File transfer to guest complete: %s\n", aFile.GetSourcePath().c_str()));910 LogFlowFunc(("File \"%s\" complete\n", aFile.GetSourcePath().c_str()));910 if (pObject->IsComplete()) /* Done reading? */ 911 { 912 LogRel2(("DnD: File transfer to guest complete: %s\n", pObject->GetSourcePath().c_str())); 913 LogFlowFunc(("File \"%s\" complete\n", pObject->GetSourcePath().c_str())); 911 914 rc = VINF_EOF; 912 915 } … … 1261 1264 1262 1265 Assert(!lstURI.IsEmpty()); 1263 DnDURIObject &curObj = lstURI.First();1264 1265 uint32_t fMode = curObj.GetMode();1266 DnDURIObject *pCurObj = lstURI.First(); 1267 1268 uint32_t fMode = pCurObj->GetMode(); 1266 1269 LogFlowFunc(("Processing srcPath=%s, dstPath=%s, fMode=0x%x, cbSize=%RU32, fIsDir=%RTbool, fIsFile=%RTbool\n", 1267 curObj.GetSourcePath().c_str(), curObj.GetDestPath().c_str(),1268 fMode, curObj.GetSize(),1270 pCurObj->GetSourcePath().c_str(), pCurObj->GetDestPath().c_str(), 1271 fMode, pCurObj->GetSize(), 1269 1272 RTFS_IS_DIRECTORY(fMode), RTFS_IS_FILE(fMode))); 1270 1273 1271 1274 if (RTFS_IS_DIRECTORY(fMode)) 1272 1275 { 1273 rc = i_sendDirectory(pCtx, pMsg, curObj);1276 rc = i_sendDirectory(pCtx, pMsg, pCurObj); 1274 1277 } 1275 1278 else if (RTFS_IS_FILE(fMode)) 1276 1279 { 1277 rc = i_sendFile(pCtx, pMsg, curObj);1280 rc = i_sendFile(pCtx, pMsg, pCurObj); 1278 1281 } 1279 1282 else 1280 1283 { 1281 1284 AssertMsgFailed(("fMode=0x%x is not supported for srcPath=%s, dstPath=%s\n", 1282 fMode, curObj.GetSourcePath().c_str(), curObj.GetDestPath().c_str()));1285 fMode, pCurObj->GetSourcePath().c_str(), pCurObj->GetDestPath().c_str())); 1283 1286 rc = VERR_NOT_SUPPORTED; 1284 1287 } 1285 1288 1286 1289 bool fRemove = false; /* Remove current entry? */ 1287 if ( curObj.IsComplete()1290 if ( pCurObj->IsComplete() 1288 1291 || RT_FAILURE(rc)) 1289 1292 { … … 1293 1296 if (fRemove) 1294 1297 { 1295 LogFlowFunc(("Removing \"%s\" from list, rc=%Rrc\n", curObj.GetSourcePath().c_str(), rc));1298 LogFlowFunc(("Removing \"%s\" from list, rc=%Rrc\n", pCurObj->GetSourcePath().c_str(), rc)); 1296 1299 lstURI.RemoveFirst(); 1297 1300 }
Note:
See TracChangeset
for help on using the changeset viewer.