bool ScanTree::PrepareMasks() { if (!FileMasks->GetString(CurMask,CurMaskW,sizeof(CurMask))) return(false); #ifdef _WIN_32 UnixSlashToDos(CurMask); #endif char *Name=PointToName(CurMask); if (*Name==0) strcat(CurMask,MASKALL); if (Name[0]=='.' && (Name[1]==0 || (Name[1]=='.' && Name[2]==0))) { AddEndSlash(CurMask); strcat(CurMask,MASKALL); } SpecPathLength=Name-CurMask; // if (SpecPathLength>1) // SpecPathLength--; bool WideName=(*CurMaskW!=0); if (WideName) { wchar *NameW=PointToName(CurMaskW); if (*NameW==0) strcatw(CurMaskW,MASKALLW); if (NameW[0]=='.' && (NameW[1]==0 || (NameW[1]=='.' && NameW[2]==0))) { AddEndSlash(CurMaskW); strcatw(CurMaskW,MASKALLW); } SpecPathLengthW=NameW-CurMaskW; } else { wchar WideMask[NM]; CharToWide(CurMask,WideMask); SpecPathLengthW=PointToName(WideMask)-WideMask; } Depth=0; strcpy(OrigCurMask,CurMask); strcpyw(OrigCurMaskW,CurMaskW); return(true); }
bool ScanTree::GetNextMask() { if (!FileMasks->GetString(CurMask,CurMaskW,ASIZE(CurMask))) return(false); if (*CurMask==0 && *CurMaskW!=0) { // Unicode only mask is present. It is very unlikely in console tools, // but possible if called from GUI WinRAR. We still need to have // ASCII mask, because we use ASCII only mask in some checks later. // So let's convert Unicode to ASCII. WideToChar(CurMaskW,CurMask,ASIZE(CurMask)); } CurMask[ASIZE(CurMask)-1]=0; CurMaskW[ASIZE(CurMaskW)-1]=0; #ifdef _WIN_ALL UnixSlashToDos(CurMask); #endif // We wish to scan entire disk if mask like c:\ is specified // regardless of recursion mode. Use c:\*.* mask when need to scan only // the root directory. ScanEntireDisk=IsDiskLetter(CurMask) && IsPathDiv(CurMask[2]) && CurMask[3]==0; char *Name=PointToName(CurMask); if (*Name==0) strcat(CurMask,MASKALL); if (Name[0]=='.' && (Name[1]==0 || Name[1]=='.' && Name[2]==0)) { AddEndSlash(CurMask); strcat(CurMask,MASKALL); } SpecPathLength=Name-CurMask; bool WideName=(*CurMaskW!=0); if (WideName) { wchar *NameW=PointToName(CurMaskW); if (*NameW==0) wcscat(CurMaskW,MASKALLW); if (NameW[0]=='.' && (NameW[1]==0 || NameW[1]=='.' && NameW[2]==0)) { AddEndSlash(CurMaskW); wcscat(CurMaskW,MASKALLW); } SpecPathLengthW=NameW-CurMaskW; } else { wchar WideMask[NM]; CharToWide(CurMask,WideMask); SpecPathLengthW=PointToName(WideMask)-WideMask; } Depth=0; strcpy(OrigCurMask,CurMask); wcscpy(OrigCurMaskW,CurMaskW); return(true); }