Changeset 769 for trunk/dll/comp.c


Ignore:
Timestamp:
Aug 6, 2007, 4:24:09 AM (18 years ago)
Author:
Steven Levine
Message:

Rework compare directories select/deselect logic
Sanitize CNRITEM_EXISTS usage
Correct BldFullPathName typo

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/dll/comp.c

    r765 r769  
    357357  HWND hwndCnrS, hwndCnrD;
    358358  PCNRITEM pci, pciD, pciNextS, pciNextD;
    359   CHAR newname[CCHMAXPATH], dirname[CCHMAXPATH], *p;
    360   PSZ pszNewName = newname;
     359  CHAR szNewName[CCHMAXPATH], szDirName[CCHMAXPATH], *p;
    361360  APIRET rc;
    362361
     
    459458          case IDM_MOVE:
    460459            if (hwndCnrS == WinWindowFromID(cmp->hwnd, COMP_RIGHTDIR))
    461               // 02 Aug 07 SHL fixme to replace this kind of stuff with _makepath or equivalent
    462               BldFullPathName(pszNewName, cmp->leftdir, pci->pszDisplayName);
    463               //sprintf(newname, "%s%s%s",
     460              // 02 Aug 07 SHL fixme to replace this kind of stuff with _makepath or equivalent
     461              BldFullPathName(szNewName, cmp->leftdir, pci->pszDisplayName);
     462              //sprintf(szNewName, "%s%s%s",
    464463              //        cmp->leftdir,
    465464              //        cmp->leftdir[strlen(cmp->leftdir) - 1] == '\\' ?
    466               //        NullStr : "\\",
    467               //        pci->pszDisplayName);
    468             else
    469               BldFullPathName(pszNewName, cmp->rightdir, pci->pszDisplayName);
    470               //sprintf(newname, "%s%s%s",
     465              //        NullStr : "\\",
     466              //        pci->pszDisplayName);
     467            else
     468              BldFullPathName(szNewName, cmp->rightdir, pci->pszDisplayName);
     469              //sprintf(szNewName, "%s%s%s",
    471470              //        cmp->rightdir,
    472471             //         cmp->rightdir[strlen(cmp->rightdir) - 1] == '\\' ?
    473              //         NullStr : "\\",
     472             // NullStr : "\\",
    474473             //         pci->pszDisplayName);
    475474            // Make directory if required
    476             strcpy(dirname, newname);
    477             p = strrchr(dirname, '\\');
     475            strcpy(szDirName, szNewName);
     476            p = strrchr(szDirName, '\\');
    478477            if (p) {
    479               if (p > dirname + 2)
     478              if (p > szDirName + 2)
    480479                p++;
    481480              *p = 0;
    482               if (IsFile(dirname) == -1)
    483                 MassMkdir(hwndMain, dirname);
     481              if (IsFile(szDirName) == -1)
     482                MassMkdir(hwndMain, szDirName);
    484483            }
    485             rc = docopyf(MOVE, pci->pszFileName, "%s", newname);
    486             if (!rc && stricmp(pci->pszFileName, newname)) {
     484            rc = docopyf(MOVE, pci->pszFileName, "%s", szNewName);
     485            if (!rc && stricmp(pci->pszFileName, szNewName)) {
    487486              WinSendMsg(hwndCnrS, CM_SETRECORDEMPHASIS, MPFROMP(pci),
    488487                         MPFROM2SHORT(FALSE, CRA_SELECTED));
     
    491490                           MPFROM2SHORT(FALSE, CRA_SELECTED));
    492491              FreeCnrItemData(pciD);
    493               pciD->pszFileName = xstrdup(newname, pszSrcFile, __LINE__);
     492              pciD->pszFileName = xstrdup(szNewName, pszSrcFile, __LINE__);
    494493              if (hwndCnrS == WinWindowFromID(cmp->hwnd, COMP_RIGHTDIR)) {
    495494                pciD->pszDisplayName = pciD->pszFileName + strlen(cmp->leftdir);
     
    502501                  pciD->pszDisplayName++;
    503502              }
    504               // 02 Aug 07 SHL fixme to know Longname transfer is correct?
     503              // 02 Aug 07 SHL fixme to know if LongName transfer is correct?
    505504              pciD->pszLongName = pci->pszLongName;
    506505              if (pciD->pszSubject != NullStr) {
     
    510509              pciD->attrFile = pci->attrFile;
    511510              pciD->pszDispAttr = pci->pszDispAttr;
    512               pciD->flags = CNRITEM_EXISTS;     // 04 Aug 07 SHL
     511              pciD->flags = 0;          // Just on one side
    513512              pciD->date = pci->date;
    514513              pciD->time = pci->time;
     
    544543                             __LINE__,
    545544                             GetPString(IDS_COMPMOVEFAILEDTEXT),
    546                              pci->pszFileName, newname);
     545                             pci->pszFileName, szNewName);
    547546              if (rc == MBID_CANCEL)    // Cause loop to break
    548547                pciNextS = NULL;
     
    551550
    552551          case IDM_COPY:
    553             if (hwndCnrS == WinWindowFromID(cmp->hwnd, COMP_RIGHTDIR))
    554               BldFullPathName(pszNewName, cmp->leftdir, pci->pszDisplayName);
    555               //sprintf(newname, "%s%s%s",
     552            if (hwndCnrS == WinWindowFromID(cmp->hwnd, COMP_RIGHTDIR))
     553              BldFullPathName(szNewName, cmp->leftdir, pci->pszDisplayName);
     554              //sprintf(szNewName, "%s%s%s",
    556555              //        cmp->leftdir,
    557556              //        cmp->leftdir[strlen(cmp->leftdir) - 1] == '\\' ?
    558               //        NullStr : "\\",
     557              //        NullStr : "\\",
    559558              //         pci->pszDisplayName);
    560             else
    561               BldFullPathName(pszNewName, cmp->rightdir, pci->pszDisplayName);
    562               //sprintf(newname, "%s%s%s",
     559            else
     560              BldFullPathName(szNewName, cmp->rightdir, pci->pszDisplayName);
     561              //sprintf(szNewName, "%s%s%s",
    563562              //        cmp->rightdir,
    564563              //        cmp->rightdir[strlen(cmp->rightdir) - 1] == '\\' ?
    565               //        NullStr : "\\",
     564              //        NullStr : "\\",
    566565              //        pci->pszDisplayName);
    567566            // Make directory if required
    568             strcpy(dirname, newname);
    569             p = strrchr(dirname, '\\');
     567            strcpy(szDirName, szNewName);
     568            p = strrchr(szDirName, '\\');
    570569            if (p) {
    571               if (p > dirname + 2)
     570              if (p > szDirName + 2)
    572571                p++;
    573572              *p = 0;
    574               if (IsFile(dirname) == -1)
    575                 MassMkdir(hwndMain, dirname);
     573              if (IsFile(szDirName) == -1)
     574                MassMkdir(hwndMain, szDirName);
    576575            }
    577             rc = docopyf(COPY, pci->pszFileName, "%s", newname);
     576            rc = docopyf(COPY, pci->pszFileName, "%s", szNewName);
    578577            if (rc) {
    579578              rc = Dos_Error(MB_ENTERCANCEL,
     
    583582                             __LINE__,
    584583                             GetPString(IDS_COMPCOPYFAILEDTEXT),
    585                              pci->pszFileName, newname);
     584                             pci->pszFileName, szNewName);
    586585              if (rc == MBID_CANCEL)
    587586                pciNextS = NULL;                // Cause loop to break
     
    594593                           MPFROM2SHORT(FALSE, CRA_SELECTED));
    595594              FreeCnrItemData(pciD);
    596               pciD->pszFileName = xstrdup(newname, pszSrcFile, __LINE__);
     595              pciD->pszFileName = xstrdup(szNewName, pszSrcFile, __LINE__);
    597596              if (hwndCnrS == WinWindowFromID(cmp->hwnd, COMP_RIGHTDIR)) {
    598597                pciD->pszDisplayName = pciD->pszFileName + strlen(cmp->leftdir);
     
    607606              pciD->attrFile = pci->attrFile;
    608607              pciD->pszDispAttr = pci->pszDispAttr;
    609               pciD->flags = CNRITEM_EXISTS;
     608              pciD->flags = CNRITEM_EXISTS;     // Now on both sides
    610609              pciD->date = pci->date;
    611610              pciD->time = pci->time;
     
    617616              pciD->easize = pci->easize;
    618617
    619               // 02 Aug 07 SHL fixme to know why subject cleared?
     618              // Forget status until we regenerate it
    620619              if (pci->pszSubject != NullStr) {
    621620                xfree(pci->pszSubject);
    622621                pci->pszSubject = NullStr;
    623622              }
    624               // 02 Aug 07 SHL fixme to know why - should already be set?
    625               // pci->flags = CNRITEM_EXISTS;
     623              pci->flags = CNRITEM_EXISTS;
    626624
    627625              WinSendMsg(hwndCnrS, CM_INVALIDATERECORD, MPFROMP(&pci),
     
    817815  HWND hwndLeft, hwndRight;
    818816  CHAR szBuf[CCHMAXPATH];
    819   PSZ pszBuf = szBuf;
    820817  CNRINFO cnri;
    821 
    822818
    823819  if (!cmp) {
     
    847843      INT numallocl = 0;
    848844      INT numallocr = 0;
    849       INT lenl;                         // Directory prefix length
    850       INT lenr;
     845      UINT lenl;                        // Directory prefix length
     846      UINT lenr;
    851847      UINT recsNeeded;
    852848      PCNRITEM pcilFirst;
     
    942938
    943939          if (*cmp->rightdir) {
    944             lenr = strlen(cmp->rightdir) +
    945               (cmp->rightdir[strlen(cmp->rightdir) - 1] != '\\');
     940            lenr = strlen(cmp->rightdir);
     941            if (cmp->rightdir[strlen(cmp->rightdir) - 1] != '\\')
     942              lenr++;
    946943            while (!feof(fp)) {
    947944              if (!xfgets_bstripcr
     
    11001097
    11011098          if (x <= 0) {
    1102             // File appears on left side
    1103             BldFullPathName(pszBuf, cmp->leftdir, filesl[l]->fname);
     1099            // File appears on left side
     1100            BldFullPathName(szBuf, cmp->leftdir, filesl[l]->fname);
    11041101            //sprintf(szBuf, "%s%s%s", cmp->leftdir,
    11051102            //        (cmp->leftdir[strlen(cmp->leftdir) - 1] == '\\') ?
    11061103            //        NullStr : "\\", filesl[l]->fname);
    1107             pcil->pszFileName = xstrdup(pszBuf, pszSrcFile, __LINE__);
     1104            pcil->pszFileName = xstrdup(szBuf, pszSrcFile, __LINE__);
    11081105            pcil->pszDisplayName = pcil->pszFileName + lenl;
    11091106            pcil->attrFile = filesl[l]->attrFile;
     
    11351132              }
    11361133            }
    1137             pcil->flags |= CNRITEM_EXISTS;
    11381134          } // if on left
    11391135
    11401136          if (x >= 0) {
    1141             // File appears on right side
    1142             //BldFullPathName(pszBuf, cmp->rightdir, filesl[r]->fname);
    1143             sprintf(szBuf, "%s%s%s", cmp->rightdir,
    1144                     (cmp->rightdir[strlen(cmp->rightdir) - 1] == '\\') ?
    1145                     NullStr : "\\", filesr[r]->fname);
    1146             pcir->pszFileName = xstrdup(pszBuf, pszSrcFile, __LINE__);  // 31 Jul 07 SHL
     1137            // File appears on right side
     1138            BldFullPathName(szBuf, cmp->rightdir, filesl[r]->fname);
     1139            //sprintf(szBuf, "%s%s%s", cmp->rightdir,
     1140            //        (cmp->rightdir[strlen(cmp->rightdir) - 1] == '\\') ?
     1141            //        NullStr : "\\", filesr[r]->fname);
     1142            pcir->pszFileName = xstrdup(szBuf, pszSrcFile, __LINE__);   // 31 Jul 07 SHL
    11471143            pcir->pszDisplayName = pcir->pszFileName + lenr;
    11481144            pcir->attrFile = filesr[r]->attrFile;
     
    11761172              }
    11771173            }
    1178             pcir->flags |= CNRITEM_EXISTS;
    11791174          } // if on right
    11801175
    11811176          if (x == 0) {
    11821177            // File appears on both sides
    1183             pch = pszBuf;
     1178            pcil->flags |= CNRITEM_EXISTS;
     1179            pcir->flags |= CNRITEM_EXISTS;
     1180            pch = szBuf;
    11841181            // Subject field holds status messages
    11851182            *pch = 0;
     
    12111208              pcil->flags |= CNRITEM_NEWER;
    12121209              pcir->flags |= CNRITEM_OLDER;
    1213               if (pch != pszBuf) {
     1210              if (pch != szBuf) {
    12141211                strcpy(pch, ", ");
    12151212                pch += 2;
     
    12331230              pcil->flags |= CNRITEM_OLDER;
    12341231              pcir->flags |= CNRITEM_NEWER;
    1235               if (pch != pszBuf) {
     1232              if (pch != szBuf) {
    12361233                strcpy(pch, ", ");
    12371234                pch += 2;
     
    12401237              pch += 5;
    12411238            }
    1242             // fixme to know why not displayed - defect?
    1243             pcil->pszSubject = pszBuf ?
    1244                                  xstrdup(pszBuf, pszSrcFile, __LINE__) :
     1239            pcil->pszSubject = *szBuf ?
     1240                                 xstrdup(szBuf, pszSrcFile, __LINE__) :
    12451241                                 NullStr;
    12461242
     
    21692165                      FM3ModHandle, WALK2_FRAME,
    21702166                      MPFROMP(&wa)) &&
    2171             !IsFile(wa.szCurrentPath1) && !IsFile(wa.szCurrentPath2)) {
     2167            !IsFile(wa.szCurrentPath1) &&
     2168            !IsFile(wa.szCurrentPath2)) {
    21722169          strcpy(cmp->leftdir, wa.szCurrentPath1);
    21732170          strcpy(cmp->rightdir, wa.szCurrentPath2);
Note: See TracChangeset for help on using the changeset viewer.