Changeset 1016 for trunk/dll/dircnrs.c
- Timestamp:
- May 12, 2008, 3:19:05 AM (17 years ago)
- File:
-
- 1 edited
-
trunk/dll/dircnrs.c (modified) (12 diffs)
Legend:
- Unmodified
- Added
- Removed
-
trunk/dll/dircnrs.c
r1012 r1016 36 36 15 Feb 08 SHL Sync with settings menu rework 37 37 22 Feb 08 JBS Ticket 230: Fix/improve various code related to state or presparam values in the INI file. 38 11 May 08 GKY Avoid using stale dcd after free 39 11 May 08 SHL Add stale dcd sanity checks 38 40 39 41 ***********************************************************************/ … … 59 61 #include "strutil.h" // GetPString 60 62 #include "notebook.h" // CfgDlgProc 61 #include "command.h" // RunCommand63 #include "command.h" // RunCommand 62 64 #include "fm3dll.h" 63 65 #include "fortify.h" … … 602 604 cni.pRecord = NULL; 603 605 cni.pDragInfo = (PDRAGINFO) mp1; 604 // DbgMsg(pszSrcFile, __LINE__, "calling DoFileDrop");605 606 li = 606 607 DoFileDrop(dcd->hwndCnr, dcd->directory, FALSE, MPVOID, … … 1497 1498 } 1498 1499 SayFilter(WinWindowFromID(WinQueryWindow(hwnd, QW_PARENT), 1499 DIR_FILTER), &dcd->mask, FALSE);1500 DIR_FILTER), &dcd->mask, FALSE); 1500 1501 SaySort(WinWindowFromID(WinQueryWindow(hwnd, QW_PARENT), 1501 DIR_SORT), dcd->sortFlags, FALSE);1502 DIR_SORT), dcd->sortFlags, FALSE); 1502 1503 SayView(WinWindowFromID(WinQueryWindow(hwnd, QW_PARENT), 1503 DIR_VIEW), dcd->flWindowAttr);1504 DIR_VIEW), dcd->flWindowAttr); 1504 1505 } 1505 1506 else { … … 1513 1514 AdjustCnrColsForPref(hwnd, NULL, dcd, FALSE); 1514 1515 SayFilter(WinWindowFromID(WinQueryWindow(hwnd, QW_PARENT), 1515 DIR_FILTER), &dcd->mask, FALSE);1516 DIR_FILTER), &dcd->mask, FALSE); 1516 1517 SaySort(WinWindowFromID(WinQueryWindow(hwnd, QW_PARENT), 1517 DIR_SORT), dcd->sortFlags, FALSE);1518 DIR_SORT), dcd->sortFlags, FALSE); 1518 1519 SayView(WinWindowFromID(WinQueryWindow(hwnd, QW_PARENT), 1519 DIR_VIEW), dcd->flWindowAttr);1520 DIR_VIEW), dcd->flWindowAttr); 1520 1521 } else 1521 1522 PostMsg(hwnd, WM_CLOSE, MPVOID, MPVOID); … … 1528 1529 1529 1530 if (hwndMenu == DirCnrMenu || 1530 hwndMenu == FileMenu || hwndMenu == DirMenu) { 1531 hwndMenu == FileMenu || 1532 hwndMenu == DirMenu) { 1531 1533 MarkAll(hwnd, TRUE, FALSE, TRUE); 1532 1534 if (dcd->cnremphasized) { … … 2077 2079 DIR_FILTER), &dcd->mask, FALSE); 2078 2080 } 2079 break;2081 break; 2080 2082 2081 2083 case IDM_UNHIDEALL: 2082 WinSendMsg(hwnd, CM_FILTER, MPFROMP(Filter), MPFROMP(&dcd->mask));2083 break;2084 WinSendMsg(hwnd, CM_FILTER, MPFROMP(Filter), MPFROMP(&dcd->mask)); 2085 break; 2084 2086 2085 2087 case IDM_HIDEALL: … … 2886 2888 ULONG action = UM_ACTION; 2887 2889 2888 // DbgMsg(pszSrcFile, __LINE__, "calling DoFileDrop");2889 2890 li = DoFileDrop(hwnd, dcd->directory, TRUE, mp1, mp2); 2890 2891 CheckPmDrgLimit(((PCNRDRAGINFO)mp2)->pDragInfo); … … 3321 3322 if (dcd) { 3322 3323 dcd->stopflag++; 3323 //printf("%i %x %x %x\n", dcd->dontclose, dcd->hwndFrame, dcd->hwndObject, dcd);3324 3324 if (!dcd->dontclose && ParentIsDesktop(dcd->hwndFrame, (HWND) 0)) 3325 PostMsg((HWND) 0, WM_QUIT, MPVOID, MPVOID);3325 PostMsg((HWND) 0, WM_QUIT, MPVOID, MPVOID); 3326 3326 if (dcd->hwndObject) { 3327 WinSetWindowPtr(dcd->hwndObject, QWL_USER, NULL); 3328 PostMsg(dcd->hwndObject, WM_CLOSE, MPVOID, MPVOID); 3327 // Ensure object window destroy does not attempt duplicate clean up 3328 WinSetWindowPtr(dcd->hwndObject, QWL_USER, NULL); 3329 if (!PostMsg(dcd->hwndObject, WM_CLOSE, MPVOID, MPVOID)) 3330 Win_Error(dcd->hwndObject, hwnd, pszSrcFile, __LINE__, "hwndObject WinPostMsg failed"); 3329 3331 } 3330 3332 if (dcd->hwndRestore) 3331 WinSetWindowPos(dcd->hwndRestore, 3332 HWND_TOP, 3333 0, 3334 0, 3335 0, 3336 0, 3337 SWP_RESTORE | SWP_SHOW | SWP_ACTIVATE | SWP_ZORDER); 3338 //printf("%i %x %x %x\n", dcd->dontclose, dcd->hwndFrame, dcd->hwndObject, dcd); 3333 WinSetWindowPos(dcd->hwndRestore, 3334 HWND_TOP, 3335 0, 3336 0, 3337 0, 3338 0, 3339 SWP_RESTORE | SWP_SHOW | SWP_ACTIVATE | SWP_ZORDER); 3339 3340 FreeList(dcd->lastselection); 3340 3341 xfree(dcd, pszSrcFile, __LINE__); 3341 3342 WinSetWindowPtr(hwnd, QWL_USER, NULL); 3342 //printf("%i %x %x %x\n", dcd->dontclose, dcd->hwndFrame, dcd->hwndObject, dcd);3343 3343 //Fortify_LeaveScope(); 3344 3344 DosPostEventSem(CompactSem); … … 3358 3358 EmptyCnr(hwnd); 3359 3359 break; 3360 } 3361 if (dcd && dcd->oldproc){ 3360 } // switch 3361 3362 if (dcd && dcd->oldproc) { 3363 // 11 May 08 SHL fixme debug fortify 3364 if ((ULONG)dcd->oldproc == 0xa9a9a9a9) 3365 DbgMsg(pszSrcFile, __LINE__, "calling oldproc after dcd free msg %x mp1 %x mp2 %x", msg, mp1, mp2); 3362 3366 return dcd->oldproc(hwnd, msg, mp1, mp2); 3363 3367 } … … 3424 3428 dcd = xmallocz(sizeof(DIRCNRDATA), pszSrcFile, __LINE__); 3425 3429 if (!dcd) { 3426 PostMsg(hwndClient, WM_CLOSE, MPVOID, MPVOID);3430 PostMsg(hwndClient, WM_CLOSE, MPVOID, MPVOID); 3427 3431 hwndFrame = (HWND) 0; 3428 3432 } … … 3472 3476 IDS_WINCREATEWINDOW); 3473 3477 PostMsg(hwndClient, WM_CLOSE, MPVOID, MPVOID); 3474 xfree(dcd, pszSrcFile, __LINE__);3478 xfree(dcd, pszSrcFile, __LINE__); 3475 3479 hwndFrame = (HWND) 0; 3476 3480 } 3477 3481 else { 3478 RestorePresParams(dcd->hwndCnr, "DirCnr");3482 RestorePresParams(dcd->hwndCnr, "DirCnr"); 3479 3483 WinSetWindowPtr(dcd->hwndCnr, QWL_USER, (PVOID) dcd); 3480 3484 dcd->oldproc = WinSubclassWindow(dcd->hwndCnr, 3481 (PFNWP) DirCnrWndProc);3485 (PFNWP) DirCnrWndProc); 3482 3486 { 3483 3487 USHORT ids[] = { DIR_TOTALS, DIR_SELECTED, DIR_VIEW, DIR_SORT,
Note:
See TracChangeset
for help on using the changeset viewer.
