Changeset 603 for trunk/dll/draglist.c
- Timestamp:
- Apr 6, 2007, 11:57:45 PM (18 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/dll/draglist.c
r551 r603 11 11 16 Oct 02 SHL DoFileDrag: don't free stack 12 12 26 Jul 06 SHL Check more run time errors 13 06 Apr 07 GKY Work around PM DragInfo and DrgFreeDISH limits 14 06 Apr 07 GKY Add DeleteDragitemStrHandles 15 06 Apr 07 GKY Add some error checking in drag/drop 13 16 14 17 ***********************************************************************/ … … 27 30 static PSZ pszSrcFile = __FILE__; 28 31 29 #pragma alloc_text(DRAGLIST,DragOne,DoFileDrag,DragList,PickUp) 32 #pragma alloc_text(DRAGLIST,DragOne,DoFileDrag,DragList,PickUp,DeleteDragitemStrHandles) 33 34 BOOL DeleteDragitemStrHandles (PDRAGINFO pDInfo) 35 { 36 PDRAGITEM pDItem = NULL; 37 ULONG cDitem; 38 INT i = 0; 39 cDitem = DrgQueryDragitemCount(pDInfo); 40 while (i < (INT) cDitem){ 41 pDItem = DrgQueryDragitemPtr(pDInfo, i); 42 if (pDItem){ 43 DrgDeleteStrHandle(pDItem->hstrType); 44 DrgDeleteStrHandle(pDItem->hstrRMF); 45 DrgDeleteStrHandle(pDItem->hstrContainerName); 46 DrgDeleteStrHandle(pDItem->hstrSourceName); 47 // Win_Error(HWND_DESKTOP, HWND_DESKTOP, pszSrcFile, __LINE__, 48 // "DrgAddStrHandle"); 49 DrgDeleteStrHandle(pDItem->hstrTargetName); 50 } 51 else 52 return FALSE; 53 i++; 54 } 55 return TRUE; 56 } 30 57 31 58 HWND DragOne(HWND hwndCnr, HWND hwndObj, CHAR * filename, BOOL moveok) … … 72 99 DItem.hstrContainerName = DrgAddStrHandle(szDir); 73 100 DItem.hstrSourceName = DrgAddStrHandle(szFile); 101 if(!DItem.hstrSourceName) 102 Win_Error(HWND_DESKTOP, HWND_DESKTOP, pszSrcFile, __LINE__, 103 "DrgQueryStrName"); 74 104 DItem.hstrTargetName = DrgAddStrHandle(szFile); 75 105 DItem.fsControl = 0; … … 112 142 &fakeicon, 1L, VK_ENDDRAG, /* End of drag indicator */ 113 143 (PVOID) NULL); /* Reserved */ 114 115 DrgFreeDraginfo(pDInfo); /* Free DRAGINFO struct */ 144 if(hDrop == NULLHANDLE){ 145 if(!DeleteDragitemStrHandles(pDInfo)) //) 146 Win_Error(HWND_DESKTOP, HWND_DESKTOP, pszSrcFile, __LINE__, 147 "DeleteDragistr"); 148 DrgDeleteDraginfoStrHandles (pDInfo); 149 DrgFreeDraginfo(pDInfo); /* Free DRAGINFO struct */ 150 } 116 151 WinSetWindowPos(hwndCnr, HWND_TOP, 0, 0, 0, 0, SWP_ACTIVATE); 117 152 } … … 137 172 CHAR szFile[CCHMAXPATH], szBuffer[CCHMAXPATH]; 138 173 DRAGIMAGE *padiIcon = NULL, *padiTest, diFakeIcon; 139 174 APIRET rc; 175 176 fexceedpmdrglimit = FALSE; 140 177 if (!pciRec && directory && *directory) 141 178 return DragOne(hwndCnr, hwndObj, directory, moveok); … … 238 275 ppDItem[ulNumfiles]->hstrContainerName = DrgAddStrHandle(szBuffer); 239 276 ppDItem[ulNumfiles]->hstrSourceName = DrgAddStrHandle(szFile); 277 if (!ppDItem[ulNumfiles]->hstrSourceName) 278 Win_Error(HWND_DESKTOP, HWND_DESKTOP, pszSrcFile, __LINE__, 279 "DrgAddStrHandle"); 240 280 ppDItem[ulNumfiles]->hstrTargetName = DrgAddStrHandle(szFile); 241 281 ppDItem[ulNumfiles]->fsControl = (isdir) ? DC_CONTAINER : 0; … … 251 291 ppDItem[ulNumfiles]->fsSupportedOps = DO_LINKABLE; 252 292 rooting = TRUE; 253 } 293 } 294 if(ulNumfiles >= 1500){ 295 pDInfo = DrgAllocDraginfo(ulNumfiles); 296 fexceedpmdrglimit = TRUE; 297 goto Thatsall; 298 } 254 299 ulNumfiles++; 255 300 ppDItem[ulNumfiles] = NULL; … … 284 329 ppDItem[ulNumfiles]->hstrContainerName = DrgAddStrHandle(arcfile); 285 330 ppDItem[ulNumfiles]->hstrSourceName = DrgAddStrHandle(szFile); 331 if(!ppDItem[ulNumfiles]->hstrSourceName) 332 Win_Error(HWND_DESKTOP, HWND_DESKTOP, pszSrcFile, __LINE__, 333 "DrgAddStrHandle"); 286 334 ppDItem[ulNumfiles]->hstrTargetName = DrgAddStrHandle(szFile); 287 335 ppDItem[ulNumfiles]->fsControl = DC_PREPARE; … … 302 350 ppDItem[ulNumfiles]->hstrContainerName = DrgAddStrHandle(arcfile); 303 351 ppDItem[ulNumfiles]->hstrSourceName = DrgAddStrHandle(szFile); 352 if(!ppDItem[ulNumfiles]->hstrSourceName) 353 Win_Error(HWND_DESKTOP, HWND_DESKTOP, pszSrcFile, __LINE__, 354 "DrgAddStrHandle"); 304 355 ppDItem[ulNumfiles]->hstrTargetName = DrgAddStrHandle(szFile); 305 356 ppDItem[ulNumfiles]->fsControl = 0; … … 307 358 (driveflags[toupper(*arcfile) - 'A'] & DRIVE_REMOVABLE)) 308 359 ppDItem[ulNumfiles]->fsControl |= DC_REMOVEABLEMEDIA; 309 ppDItem[ulNumfiles]->fsSupportedOps = DO_COPYABLE; 360 ppDItem[ulNumfiles]->fsSupportedOps = DO_COPYABLE; 361 if(ulNumfiles >= 1500){ 362 pDInfo = DrgAllocDraginfo(ulNumfiles); 363 goto Thatsall; 364 } 310 365 ulNumfiles++; 311 366 } … … 326 381 if (ulNumfiles) { 327 382 pDInfo = DrgAllocDraginfo(ulNumfiles); /* Allocate DRAGINFO */ 383 Thatsall: 328 384 if (pDInfo) { 329 385 if ((arcfile && *arcfile) || (IsFullName(szBuffer) && … … 375 431 padiIcon, ulNumIcon, VK_ENDDRAG, /* End of drag indicator */ 376 432 (PVOID) NULL); /* Reserved */ 377 378 DrgFreeDraginfo(pDInfo); /* Free DRAGINFO struct */ 433 if(hDrop == NULLHANDLE){ 434 rc = DeleteDragitemStrHandles(pDInfo); // 435 if(!rc) 436 Win_Error(HWND_DESKTOP, HWND_DESKTOP, pszSrcFile, __LINE__, 437 "DeleteDragistr"); 438 DrgDeleteDraginfoStrHandles (pDInfo); 439 rc = DrgFreeDraginfo(pDInfo); /* Free DRAGINFO struct */ 440 if(!rc) 441 Win_Error(HWND_DESKTOP, HWND_DESKTOP, pszSrcFile, __LINE__, 442 "DrgFreeDraginfo"); 443 } 379 444 if (padiIcon && padiIcon != &diFakeIcon) 380 445 free(padiIcon); … … 478 543 ppDItem[ulNumfiles]->hstrContainerName = DrgAddStrHandle(szBuffer); 479 544 ppDItem[ulNumfiles]->hstrSourceName = DrgAddStrHandle(szFile); 545 if(!ppDItem[ulNumfiles]->hstrSourceName) 546 Win_Error(HWND_DESKTOP, HWND_DESKTOP, pszSrcFile, __LINE__, 547 "DrgAddStrHandle"); 480 548 ppDItem[ulNumfiles]->hstrTargetName = DrgAddStrHandle(szFile); 481 549 ppDItem[ulNumfiles]->fsControl = (isdir) ? DC_CONTAINER : 0; … … 529 597 padiIcon, ulNumIcon, VK_ENDDRAG, /* End of drag indicator */ 530 598 (PVOID) NULL); /* Reserved */ 531 532 DrgFreeDraginfo(pDInfo); /* Free DRAGINFO struct */ 599 if(hDrop == NULLHANDLE){ 600 if(!DeleteDragitemStrHandles(pDInfo)) //) 601 Win_Error(HWND_DESKTOP, HWND_DESKTOP, pszSrcFile, __LINE__, 602 "DeleteDragistr"); 603 DrgDeleteDraginfoStrHandles (pDInfo); 604 if(!DrgFreeDraginfo(pDInfo)); /* Free DRAGINFO struct */ 605 Win_Error(HWND_DESKTOP, HWND_DESKTOP, pszSrcFile, __LINE__, 606 "DrgFreeDraginfo"); 607 } 533 608 free(padiIcon); 534 609 padiIcon = NULL; … … 601 676 ditem.hstrContainerName = DrgAddStrHandle(szDir); 602 677 ditem.hstrSourceName = DrgAddStrHandle(szFile); 678 if(!ditem.hstrSourceName) 679 Win_Error(HWND_DESKTOP, HWND_DESKTOP, pszSrcFile, __LINE__, 680 "DrgAddStrHandle"); 603 681 ditem.hstrTargetName = DrgAddStrHandle(szFile); 604 682 ditem.fsControl = 0;
Note:
See TracChangeset
for help on using the changeset viewer.