Changeset 1077 for trunk/dll/collect.c


Ignore:
Timestamp:
Jul 18, 2008, 8:11:54 PM (17 years ago)
Author:
Steven Levine
Message:

Enhance Fortify infrastructure
Add Fortify_SetOwner Fortify_ChangeOwner Fortify_ChangeScope
Add FORTIFY_VERBOSE_SCOPE_ENTER_EXIT support
Add more fm/2 Fortify tooling and rework existing tooling for correct nesting
Still lots to do for cross-thread allocations
Add misc.h
Add walkem.h

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/dll/collect.c

    r1065 r1077  
    5050  06 Jul 08 GKY Update delete/undelete to include move to and open XWP trashcan
    5151  11 Jul 08 JBS Ticket 230: Simplified code and eliminated some local variables by incorporating
    52                 all the details view settings (both the global variables and those in the
    53                 DIRCNRDATA struct) into a new struct: DETAILS_SETTINGS.
     52                all the details view settings (both the global variables and those in the
     53                DIRCNRDATA struct) into a new struct: DETAILS_SETTINGS.
    5454
    5555***********************************************************************/
     
    7878#include "tmrsvcs.h"                    // ITIMER_DESC
    7979#include "notebook.h"                   // CfgDlgProc
    80 #include "command.h"                    // RunCommand
     80#include "command.h"                    // RunCommand
    8181#include "fm3dll.h"
    8282
     
    466466  switch (msg) {
    467467  case WM_CREATE:
     468    // 18 Jul 08 SHL fixme to doc why messsage gets lost
     469    DbgMsg(pszSrcFile, __LINE__, "WM_CREATE mp1 %p mp2 %p", mp1, mp2);  // 18 Jul 08 SHL fixme
    468470    break;
    469471
     
    505507
    506508  case UM_SETUP:
     509#   ifdef FORTIFY
     510    Fortify_EnterScope();
     511#   endif
    507512    dcd = WinQueryWindowPtr(hwnd, QWL_USER);
    508513    if (dcd) {
     514#     ifdef FORTIFY
     515      Fortify_ChangeOwner(dcd);
     516#     endif
    509517      /* set unique id */
    510518      WinSetWindowUShort(hwnd,
     
    601609            nm = 1;
    602610            hdir = HDIR_CREATE;
    603             DosError(FERR_DISABLEHARDERR);
    604             if (FindCnrRecord(dcd->hwndCnr,
     611            DosError(FERR_DISABLEHARDERR);
     612            if (FindCnrRecord(dcd->hwndCnr,
    605613                              li->list[x],
    606614                              NULL,
    607615                              FALSE,
    608616                              FALSE,
    609                               TRUE)) {
    610               pci = UpdateCnrRecord(dcd->hwndCnr, li->list[x], FALSE, dcd);
    611               if (Filter((PMINIRECORDCORE) pci, (PVOID) & dcd->mask)) {
    612                 pci->rc.flRecordAttr &= ~CRA_FILTERED;
    613                 WinSendMsg(dcd->hwndCnr, CM_INVALIDATERECORD, MPVOID,
    614                            MPFROM2SHORT(0, CMA_REPOSITION | CMA_ERASE));
    615               }
    616               pci = (PCNRITEM) pci->rc.preccNextRecord;
     617                              TRUE)) {
     618              pci = UpdateCnrRecord(dcd->hwndCnr, li->list[x], FALSE, dcd);
     619              if (Filter((PMINIRECORDCORE) pci, (PVOID) & dcd->mask)) {
     620                pci->rc.flRecordAttr &= ~CRA_FILTERED;
     621                WinSendMsg(dcd->hwndCnr, CM_INVALIDATERECORD, MPVOID,
     622                           MPFROM2SHORT(0, CMA_REPOSITION | CMA_ERASE));
     623              }
     624              pci = (PCNRITEM) pci->rc.preccNextRecord;
    617625              if (pciP)
    618626                pciP->rc.preccNextRecord = (PMINIRECORDCORE) pci;
    619627              else
    620                 pciFirst = pci;
    621             }
     628                pciFirst = pci;
     629            }
    622630            else if (*li->list[x] &&
    623631                !DosQueryPathInfo(li->list[x], FIL_QUERYFULLNAME,
     
    631639                               &fb4, sizeof(fb4), &nm, FIL_QUERYEASIZEL)) {
    632640              DosFindClose(hdir);
    633               priority_normal();
    634                 *fb4.achName = 0;
    635                 ullTotalBytes = FillInRecordFromFFB(dcd->hwndCnr,
    636                                                     pci,
     641              priority_normal();
     642                *fb4.achName = 0;
     643                ullTotalBytes = FillInRecordFromFFB(dcd->hwndCnr,
     644                                                    pci,
    637645                                                    fullname, &fb4, FALSE, dcd);
    638                 dcd->ullTotalBytes += ullTotalBytes;
    639                 pciP = pci;
    640                 pci = (PCNRITEM) pci->rc.preccNextRecord;
     646                dcd->ullTotalBytes += ullTotalBytes;
     647                pciP = pci;
     648                pci = (PCNRITEM) pci->rc.preccNextRecord;
    641649            }
    642650            else {
     
    647655                pciP->rc.preccNextRecord = (PMINIRECORDCORE) pci;
    648656              else
    649                 pciFirst = pci;
    650               if (pciT)
    651                 FreeCnrItemData(pciT); // FreeCnrItem(hwnd, pciT);
     657                pciFirst = pci;
     658              if (pciT)
     659                FreeCnrItemData(pciT); // FreeCnrItem(hwnd, pciT);
    652660              ulMaxFiles--;             // Remember gone
    653661            }
     
    680688  case UM_COLLECTFROMFILE:
    681689    dcd = WinQueryWindowPtr(hwnd, QWL_USER);
     690#   ifdef FORTIFY
     691    Fortify_EnterScope();
     692#   endif
     693
    682694    if (dcd && mp1) {
    683695      FILESTATUS4L fs4;
     
    690702      size_t c;
    691703
     704#     ifdef FORTIFY
     705      Fortify_ChangeOwner(mp1);
     706#     endif
     707
    692708      fp = _fsopen((CHAR *)mp1, "r", SH_DENYNO);
    693709      if (fp) {
     
    722738            }
    723739            /* fullname now contains name of file to collect */
    724             DosError(FERR_DISABLEHARDERR);
    725             if (FindCnrRecord(dcd->hwndCnr,
     740            DosError(FERR_DISABLEHARDERR);
     741            if (FindCnrRecord(dcd->hwndCnr,
    726742                              fullname,
    727743                              NULL,
    728744                              FALSE,
    729745                              FALSE,
    730                               TRUE)) {
    731               pci = UpdateCnrRecord(dcd->hwndCnr, fullname, FALSE, dcd);
    732               if (Filter((PMINIRECORDCORE) pci, (PVOID) & dcd->mask)) {
    733                 pci->rc.flRecordAttr &= ~CRA_FILTERED;
    734                 WinSendMsg(dcd->hwndCnr, CM_INVALIDATERECORD, MPVOID,
    735                            MPFROM2SHORT(0, CMA_REPOSITION | CMA_ERASE));
    736               }
    737               /*pci = (PCNRITEM) pci->rc.preccNextRecord;
     746                              TRUE)) {
     747              pci = UpdateCnrRecord(dcd->hwndCnr, fullname, FALSE, dcd);
     748              if (Filter((PMINIRECORDCORE) pci, (PVOID) & dcd->mask)) {
     749                pci->rc.flRecordAttr &= ~CRA_FILTERED;
     750                WinSendMsg(dcd->hwndCnr, CM_INVALIDATERECORD, MPVOID,
     751                           MPFROM2SHORT(0, CMA_REPOSITION | CMA_ERASE));
     752              }
     753              /*pci = (PCNRITEM) pci->rc.preccNextRecord;
    738754              if (pciP)
    739755                pciP->rc.preccNextRecord = (PMINIRECORDCORE) pci;
    740756              else
    741                 pciFirst = pci;*/
    742             }
     757                pciFirst = pci;*/
     758            }
    743759            else if (IsFullName(fullname) &&
    744760                !IsRoot(fullname) &&
     
    746762                                  FIL_QUERYEASIZEL,
    747763                                  &fs4,
    748                                   sizeof(fs4)))  {
     764                                  sizeof(fs4))) {
    749765              /* collect it */
    750766              pci = WinSendMsg(dcd->hwndCnr,
     
    791807#   ifdef FORTIFY
    792808    Fortify_LeaveScope();
    793 #    endif
     809#   endif
    794810    return 0;
    795811
     
    890906
    891907  case UM_MASSACTION:
     908#   ifdef FORTIFY
     909    Fortify_EnterScope();
     910#   endif
    892911    if (mp1) {
     912#     ifdef FORTIFY
     913      Fortify_ChangeOwner(mp1);
     914#     endif
    893915      dcd = WinQueryWindowPtr(hwnd, QWL_USER);
    894916      if (dcd) {
    895917        WORKER *wk;
    896 #       ifdef FORTIFY
    897         Fortify_EnterScope();
    898 #        endif
    899918        wk = xmallocz(sizeof(WORKER), pszSrcFile, __LINE__);
    900919        if (!wk)
     
    911930            Runtime_Error(pszSrcFile, __LINE__,
    912931                          GetPString(IDS_COULDNTSTARTTHREADTEXT));
    913             free(wk);
     932            free(wk);
    914933            FreeListInfo((LISTINFO *) mp1);
    915 #           ifdef FORTIFY
    916             Fortify_LeaveScope();
    917 #            endif
    918           }
    919         }
    920       }
    921     }
     934          }
     935        }
     936      }
     937    }
     938#   ifdef FORTIFY
     939    DosSleep(1);                        // Let receiver take ownership
     940    Fortify_LeaveScope();
     941#   endif
    922942    return 0;
    923943
    924944  case UM_ACTION:
     945#   ifdef FORTIFY
     946    Fortify_EnterScope();
     947#   endif
    925948    if (mp1) {
     949#     ifdef FORTIFY
     950      Fortify_ChangeOwner(mp1);
     951#     endif
    926952      dcd = WinQueryWindowPtr(hwnd, QWL_USER);
    927953      if (dcd) {
    928954        WORKER *wk;
    929 #       ifdef FORTIFY
    930         Fortify_EnterScope();
    931 #        endif
    932955        wk = xmallocz(sizeof(WORKER), pszSrcFile, __LINE__);
    933956        if (!wk)
     
    944967            Runtime_Error(pszSrcFile, __LINE__,
    945968                          GetPString(IDS_COULDNTSTARTTHREADTEXT));
    946             free(wk);
     969            free(wk);
    947970            FreeListInfo((LISTINFO *) mp1);
    948 #           ifdef FORTIFY
    949             Fortify_LeaveScope();
    950 #            endif
    951           }
    952         }
    953       }
    954     }
     971          }
     972        }
     973      }
     974    }
     975#   ifdef FORTIFY
     976    DosSleep(1);                        // Let receiver take ownership
     977    Fortify_LeaveScope();
     978#   endif
    955979    return 0;
    956980
     
    975999#     ifdef FORTIFY
    9761000      Fortify_LeaveScope();
    977 #      endif
     1001#     endif
    9781002      WinSetWindowPtr(dcd->hwndCnr, QWL_USER, NULL);
    9791003    }
     
    14701494  case UM_COLLECTFROMFILE:
    14711495    if (mp1) {
    1472       if (!dcd) {
    1473         free(mp1);
    1474 #       ifdef FORTIFY
    1475         Fortify_LeaveScope();
    1476 #        endif
     1496#     ifdef FORTIFY
     1497      Fortify_EnterScope();
     1498      Fortify_ChangeOwner(mp1);
     1499#     endif
     1500      if (!dcd)
    14771501        Runtime_Error2(pszSrcFile, __LINE__, IDS_NODATATEXT);
    1478       }
    14791502      else {
    14801503        if (!PostMsg(dcd->hwndObject, UM_COLLECTFROMFILE, mp1, mp2)) {
    14811504          Runtime_Error(pszSrcFile, __LINE__, "PostMsg");
    1482           free(mp1);
    1483 #         ifdef FORTIFY
    1484           Fortify_LeaveScope();
    1485 #          endif
    1486         }
    1487       }
     1505        }
     1506      }
     1507      free(mp1);
     1508#     ifdef FORTIFY
     1509      DosSleep(1);                      // Let receiver take ownership
     1510      Fortify_LeaveScope();
     1511#     endif
    14881512    }
    14891513    return 0;
     
    16061630          }
    16071631          if (insert_filename(hwnd, filename, FALSE, FALSE)) {
     1632#           ifdef FORTIFY
     1633            Fortify_EnterScope();
     1634#           endif
    16081635            p = xstrdup(filename, pszSrcFile, __LINE__);
    16091636            if (p) {
    16101637              if (!PostMsg(hwnd, UM_COLLECTFROMFILE, MPFROMP(p), MPVOID))
    1611                 free(p);
    1612 #               ifdef FORTIFY
    1613                 Fortify_LeaveScope();
    1614 #                endif
    1615             }
     1638                free(p);
     1639            }
     1640#           ifdef FORTIFY
     1641            DosSleep(1);                // Let receiver take ownership
     1642            Fortify_LeaveScope();
     1643#           endif
    16161644          }
    16171645        }
     
    17271755        {
    17281756          LISTINFO *li;
    1729 #         ifdef FORTIFY
    1730           Fortify_EnterScope();
    1731 #          endif
     1757#         ifdef FORTIFY
     1758          Fortify_EnterScope();
     1759#         endif
    17321760          li = xmallocz(sizeof(LISTINFO), pszSrcFile, __LINE__);
    17331761          if (li) {
     
    17411769            }
    17421770          }
     1771#         ifdef FORTIFY
     1772          DosSleep(1);          // Let receiver take ownership
     1773          Fortify_LeaveScope();
     1774#         endif
    17431775        }
    17441776        break;
     
    17781810        if (mp2) {
    17791811          LISTINFO *li;
    1780 #         ifdef FORTIFY
    1781           Fortify_EnterScope();
    1782 #          endif
     1812#         ifdef FORTIFY
     1813          Fortify_EnterScope();
     1814#         endif
    17831815          li = xmallocz(sizeof(LISTINFO), pszSrcFile, __LINE__);
    17841816          if (li) {
     
    17941826          else
    17951827            FreeList(mp2);
     1828#         ifdef FORTIFY
     1829          DosSleep(1);                  // Let receiver take ownership
     1830          Fortify_LeaveScope();
     1831#         endif
    17961832        }
    17971833        break;
    17981834
    17991835      case IDM_UNDELETE:
    1800         {
     1836        {
    18011837          PCNRITEM pci;
    1802           CHAR path[CCHMAXPATH];
    1803           HOBJECT hObject;
    1804           HWND hwndDesktop;
    1805 
    1806           hObject = WinQueryObject("<XWP_TRASHCAN>");
    1807           if (hObject != NULLHANDLE && fTrashCan) {
    1808             hwndDesktop = WinQueryDesktopWindow((HAB) 0, NULLHANDLE);
     1838          CHAR path[CCHMAXPATH];
     1839          HOBJECT hObject;
     1840          HWND hwndDesktop;
     1841
     1842          hObject = WinQueryObject("<XWP_TRASHCAN>");
     1843          if (hObject != NULLHANDLE && fTrashCan) {
     1844            hwndDesktop = WinQueryDesktopWindow((HAB) 0, NULLHANDLE);
    18091845            WinSetFocus(HWND_DESKTOP, hwndDesktop);
    1810             WinOpenObject(hObject, 0, TRUE);
    1811           }
    1812           else {
    1813             pci = (PCNRITEM) CurrentRecord(hwnd);
    1814             if (pci && (INT) pci != -1) {
    1815               strcpy(path, pci->pszFileName);
    1816               MakeValidDir(path);
    1817               WinDlgBox(HWND_DESKTOP, hwnd, UndeleteDlgProc, FM3ModHandle,
    1818                         UNDEL_FRAME, MPFROMP(path));
    1819             }
     1846            WinOpenObject(hObject, 0, TRUE);
     1847          }
     1848          else {
     1849            pci = (PCNRITEM) CurrentRecord(hwnd);
     1850            if (pci && (INT) pci != -1) {
     1851              strcpy(path, pci->pszFileName);
     1852              MakeValidDir(path);
     1853              WinDlgBox(HWND_DESKTOP, hwnd, UndeleteDlgProc, FM3ModHandle,
     1854                        UNDEL_FRAME, MPFROMP(path));
     1855            }
    18201856          }
    18211857        }
     
    18911927                                    DIR_FILTER), &dcd->mask, FALSE);
    18921928        }
    1893         break;
     1929        break;
    18941930
    18951931      case IDM_UNHIDEALL:
    1896         WinSendMsg(hwnd, CM_FILTER, MPFROMP(Filter), MPFROMP(&dcd->mask));
    1897         break;
     1932        WinSendMsg(hwnd, CM_FILTER, MPFROMP(Filter), MPFROMP(&dcd->mask));
     1933        break;
    18981934
    18991935      case IDM_HIDEALL:
     
    20922128          LISTINFO *li;
    20932129          ULONG action = UM_ACTION;
    2094 #         ifdef FORTIFY
    2095           Fortify_EnterScope();
    2096 #          endif
     2130#         ifdef FORTIFY
     2131          Fortify_EnterScope();
     2132#         endif
    20972133          li = xmallocz(sizeof(LISTINFO), pszSrcFile, __LINE__);
    20982134          if (li) {
     
    21372173                UnHilite(hwnd, TRUE, &dcd->lastselection, dcd->ulItemsToUnHilite);
    21382174            }
    2139             else
    2140               free(li);
    2141 #             ifdef FORTIFY
    2142               Fortify_LeaveScope();
    2143 #              endif
    2144           }
     2175            else
     2176              free(li);
     2177          }
     2178#         ifdef FORTIFY
     2179          Fortify_LeaveScope();
     2180#         endif
    21452181        }
    21462182        break;
     
    27002736
    27012737      if ((INT)mp1 == 5 || (INT)mp1 == 13 || (INT)mp1 == 21)
    2702         hwnd = StartViewer(HWND_DESKTOP, (INT)mp1,
    2703                            (CHAR *)mp2, dcd->hwndFrame);
     2738        hwnd = StartViewer(HWND_DESKTOP, (INT)mp1,
     2739                           (CHAR *)mp2, dcd->hwndFrame);
    27042740      else
    2705         hwnd = StartMLEEditor(dcd->hwndParent,
    2706                               (INT)mp1, (CHAR *)mp2, dcd->hwndFrame);
     2741        hwnd = StartMLEEditor(dcd->hwndParent,
     2742                              (INT)mp1, (CHAR *)mp2, dcd->hwndFrame);
    27072743      free((CHAR *)mp2);
    27082744      return MRFROMLONG(hwnd);
     
    27642800{
    27652801  PFNWP oldMenuProc = WinQueryWindowPtr(hwnd, QWL_USER);
    2766   static short  sLastMenuitem;
     2802  static short sLastMenuitem;
    27672803
    27682804  switch (msg) {
     
    27912827            MOUSEMSG(&msg)->y < rectl.yTop)
    27922828           break;
    2793         }                      // for
     2829        } // for
    27942830
    27952831
     
    28592895#   ifdef FORTIFY
    28602896    Fortify_EnterScope();
    2861 #    endif
     2897#   endif
    28622898    dcd = xmallocz(sizeof(DIRCNRDATA), pszSrcFile, __LINE__);
    28632899    if (!dcd) {
     
    28982934                   IDS_WINCREATEWINDOW);
    28992935        PostMsg(hwndClient, WM_CLOSE, MPVOID, MPVOID);
    2900         free(dcd);
    2901 #       ifdef FORTIFY
    2902         Fortify_LeaveScope();
    2903 #        endif
     2936        free(dcd);
    29042937        hwndFrame = (HWND) 0;
    29052938      }
     
    29522985      }
    29532986    }
     2987#   ifdef FORTIFY
     2988    DosSleep(1);                // Let receiver take ownership
     2989    Fortify_LeaveScope();
     2990#   endif
    29542991  }
    29552992  return hwndFrame;
Note: See TracChangeset for help on using the changeset viewer.