Changeset 783 for trunk/dll/comp.c
- Timestamp:
- Aug 14, 2007, 6:09:54 AM (18 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/dll/comp.c
r775 r783 31 31 07 Aug 07 SHL COMP_COLLECT: Avoid collecting empty entries when nothing selected 32 32 06 Aug 07 GKY Reduce DosSleep times (ticket 148) 33 33 13 Aug 07 SHL Sync code with other FilesToGet usage 34 13 Aug 07 SHL Move #pragma alloc_text to end for OpenWatcom compat 34 35 35 36 ***********************************************************************/ … … 37 38 #define INCL_DOS 38 39 #define INCL_WIN 40 #define INCL_DOSERRORS 39 41 #define INCL_GPI 40 42 #define INCL_LONGLONG … … 52 54 #include "fm3dlg.h" 53 55 #include "fm3str.h" 54 55 #pragma alloc_text(COMPAREDIR,FillCnrsThread,FillDirList,CompNames,BldFullPathName)56 #pragma alloc_text(COMPAREDIR1,CompareDlgProc)57 #pragma alloc_text(COMPAREDIR2,SelectCnrsThread,ActionCnrThread)58 #pragma alloc_text(COMPAREFILE,CFileDlgProc,CompareFilesThread)59 #pragma alloc_text(SNAPSHOT,SnapShot,StartSnap)60 56 61 57 typedef struct … … 92 88 //=== SnapShot() Write directory tree to file and recurse if requested === 93 89 94 static VOID SnapShot(char *path, FILE * 90 static VOID SnapShot(char *path, FILE *fp, BOOL recurse) 95 91 { 96 FILEFINDBUF4 *fb;92 PFILEFINDBUF4 pffb; 97 93 char *mask, *enddir; 98 94 HDIR hdir = HDIR_CREATE; 99 ULONG nm = 1; 100 101 fb = xmalloc(sizeof(FILEFINDBUF4), pszSrcFile, __LINE__); 102 if (fb) { 95 ULONG ulFindCnt; 96 97 // 13 Aug 07 SHL fimxe to use FileToGet 98 pffb = xmalloc(sizeof(FILEFINDBUF4), pszSrcFile, __LINE__); 99 if (pffb) { 103 100 mask = xmalloc(CCHMAXPATH, pszSrcFile, __LINE__); 104 101 if (mask) { 105 sprintf(mask, 106 "%s%s*", 107 path, (path[strlen(path) - 1] != '\\') ? "\\" : NullStr); 102 BldFullPathName(mask, path, "*"); 103 // sprintf(mask, 104 // "%s%s*", 105 // path, (path[strlen(path) - 1] != '\\') ? "\\" : NullStr); 108 106 enddir = strrchr(mask, '\\'); 109 107 enddir++; 108 ulFindCnt = 1; 109 // 13 Aug 07 SHL fixme to report errors 110 110 if (!DosFindFirst(mask, 111 111 &hdir, … … 113 113 FILE_ARCHIVED | FILE_READONLY | FILE_HIDDEN | 114 114 FILE_SYSTEM, 115 fb, sizeof(FILEFINDBUF4), &nm, FIL_QUERYEASIZE)) {115 pffb, sizeof(FILEFINDBUF4), &ulFindCnt, FIL_QUERYEASIZE)) { 116 116 do { 117 strcpy(enddir, fb->achName);118 if (!( fb->attrFile & FILE_DIRECTORY))117 strcpy(enddir, pffb->achName); 118 if (!(pffb->attrFile & FILE_DIRECTORY)) 119 119 fprintf(fp, 120 120 "\"%s\",%u,%lu,%04u/%02u/%02u,%02u:%02u:%02u,%lu,%lu,N\n", 121 121 mask, 122 122 enddir - mask, 123 fb->cbFile,124 ( fb->fdateLastWrite.year + 1980),125 fb->fdateLastWrite.month,126 fb->fdateLastWrite.day,127 fb->ftimeLastWrite.hours,128 fb->ftimeLastWrite.minutes,129 fb->ftimeLastWrite.twosecs,130 fb->attrFile, (fb->cbList > 4) ? (fb->cbList / 2) : 0);123 pffb->cbFile, 124 (pffb->fdateLastWrite.year + 1980), 125 pffb->fdateLastWrite.month, 126 pffb->fdateLastWrite.day, 127 pffb->ftimeLastWrite.hours, 128 pffb->ftimeLastWrite.minutes, 129 pffb->ftimeLastWrite.twosecs, 130 pffb->attrFile, (pffb->cbList > 4) ? (pffb->cbList / 2) : 0); 131 131 // Skip . and .. 132 132 else if (recurse && 133 ( fb->achName[0] != '.' ||134 ( fb->achName[1] &&135 ( fb->achName[1] != '.' ||fb->achName[2])))) {133 (pffb->achName[0] != '.' || 134 (pffb->achName[1] && 135 (pffb->achName[1] != '.' || pffb->achName[2])))) { 136 136 SnapShot(mask, fp, recurse); 137 137 } 138 nm= 1;139 } while (!DosFindNext(hdir, fb, sizeof(FILEFINDBUF4), &nm));138 ulFindCnt = 1; 139 } while (!DosFindNext(hdir, pffb, sizeof(FILEFINDBUF4), &ulFindCnt)); 140 140 DosFindClose(hdir); 141 141 } 142 142 free(mask); 143 143 } 144 free( fb);144 free(pffb); 145 145 } 146 146 } … … 683 683 HMQ hmq; 684 684 685 if (!cmp) 685 if (!cmp) { 686 Runtime_Error(pszSrcFile, __LINE__, "no data"); 686 687 return; 688 } 687 689 688 690 DosError(FERR_DISABLEHARDERR); … … 729 731 FILELIST ***list, INT *numfiles, INT *numalloc) 730 732 { 731 732 BYTE *fb;733 733 CHAR *enddir; 734 734 ULONG x; 735 735 CHAR *maskstr; 736 FILEFINDBUF4 *ffb4, *pffb; 736 PFILEFINDBUF4 pffbArray; 737 PFILEFINDBUF4 pffbFile; 737 738 HDIR hDir; 738 ULONG nm, fl = 0, ulM = FilesToGet; 739 ULONG ulFindCnt; 740 ULONG ulBufBytes = sizeof(FILEFINDBUF4) * FilesToGet; 739 741 APIRET rc; 740 742 … … 744 746 } 745 747 746 //if (!recurse)747 // ulM = FilesToGet;748 748 maskstr = xmalloc(CCHMAXPATH, pszSrcFile, __LINE__); 749 749 if (!maskstr) 750 750 return; 751 ffb4 = xmalloc(sizeof(FILEFINDBUF4) * ulM, pszSrcFile, __LINE__);752 if (! ffb4) {751 pffbArray = xmalloc(ulBufBytes, pszSrcFile, __LINE__); 752 if (!pffbArray) { 753 753 free(maskstr); 754 754 return; … … 765 765 *(enddir + 1) = 0; 766 766 hDir = HDIR_CREATE; 767 nm = ulM;768 if (recurse)769 fl = FILE_DIRECTORY;770 767 DosError(FERR_DISABLEHARDERR); 768 ulFindCnt = FilesToGet; 771 769 rc = DosFindFirst(maskstr, &hDir, 772 (FILE_NORMAL | FILE_READONLY | FILE_ARCHIVED | 773 FILE_SYSTEM | FILE_HIDDEN) | fl, 774 ffb4, sizeof(FILEFINDBUF4) * nm, &nm, FIL_QUERYEASIZE); 770 FILE_NORMAL | FILE_READONLY | FILE_ARCHIVED | 771 FILE_SYSTEM | FILE_HIDDEN | 772 (recurse ? FILE_DIRECTORY : 0), 773 pffbArray, ulBufBytes, &ulFindCnt, FIL_QUERYEASIZE); 775 774 if (!rc) { 776 while (!rc) { 777 fb = (BYTE *) ffb4; 778 x = 0; 779 while (x < nm) { 780 pffb = (FILEFINDBUF4 *) fb; 781 if (pffb->attrFile & FILE_DIRECTORY) { 775 do { 776 pffbFile = pffbArray; 777 for (x = 0; x < ulFindCnt; x++) { 778 if (pffbFile->attrFile & FILE_DIRECTORY) { 782 779 // Skip . and .. 783 780 if (recurse && 784 (pffb ->achName[0] != '.' ||785 (pffb ->achName[1] &&786 (pffb ->achName[1] != '.' || pffb->achName[2])))) {781 (pffbFile->achName[0] != '.' || 782 (pffbFile->achName[1] && 783 (pffbFile->achName[1] != '.' || pffbFile->achName[2])))) { 787 784 if (fForceUpper) 788 strupr(pffb ->achName);785 strupr(pffbFile->achName); 789 786 else if (fForceLower) 790 strlwr(pffb ->achName);791 memcpy(enddir, pffb ->achName, pffb->cchName + 1);787 strlwr(pffbFile->achName); 788 memcpy(enddir, pffbFile->achName, pffbFile->cchName + 1); 792 789 FillDirList(maskstr, skiplen, recurse, list, numfiles, numalloc); 793 790 } … … 795 792 else { 796 793 if (fForceUpper) 797 strupr(pffb ->achName);794 strupr(pffbFile->achName); 798 795 else if (fForceLower) 799 strlwr(pffb ->achName);800 memcpy(enddir, pffb ->achName, pffb->cchName + 1);801 if (AddToFileList 802 (maskstr + skiplen, pffb, list, numfiles, numalloc))796 strlwr(pffbFile->achName); 797 memcpy(enddir, pffbFile->achName, pffbFile->cchName + 1); 798 if (AddToFileList(maskstr + skiplen, 799 pffbFile, list, numfiles, numalloc)) { 803 800 goto Abort; 804 } 805 fb += pffb->oNextEntryOffset; 806 x++; 807 } 808 nm = ulM; 801 } 802 } 803 pffbFile = (PFILEFINDBUF4)((PBYTE)pffbFile + pffbFile->oNextEntryOffset); 804 } // for 809 805 DosError(FERR_DISABLEHARDERR); 810 rc = DosFindNext(hDir, ffb4, sizeof(FILEFINDBUF4) * nm, &nm); 811 } 812 Abort: 806 ulFindCnt = FilesToGet; 807 rc = DosFindNext(hDir, pffbArray, ulBufBytes, &ulFindCnt); 808 } while (!rc); 809 810 Abort: 811 813 812 DosFindClose(hDir); 814 813 DosSleep(1); 815 814 } 815 816 if (rc && rc != ERROR_NO_MORE_FILES) { 817 Dos_Error(MB_ENTER, rc, HWND_DESKTOP, pszSrcFile, __LINE__, 818 GetPString(IDS_CANTFINDDIRTEXT), maskstr); 819 } 820 816 821 free(maskstr); 817 free( ffb4);822 free(pffbArray); 818 823 } 819 824 … … 2500 2505 return WinDefDlgProc(hwnd, msg, mp1, mp2); 2501 2506 } 2507 2508 #pragma alloc_text(COMPAREDIR,FillCnrsThread,FillDirList,CompNames,BldFullPathName) 2509 #pragma alloc_text(COMPAREDIR1,CompareDlgProc) 2510 #pragma alloc_text(COMPAREDIR2,SelectCnrsThread,ActionCnrThread) 2511 #pragma alloc_text(COMPAREFILE,CFileDlgProc,CompareFilesThread) 2512 #pragma alloc_text(SNAPSHOT,SnapShot,StartSnap) 2513
Note:
See TracChangeset
for help on using the changeset viewer.