ReactOS  0.4.15-dev-3207-ga415bd4
fc.c File Reference
#include "fc.h"
#include <stdio.h>
#include <strsafe.h>
#include <shlwapi.h>
Include dependency graph for fc.c:

Go to the source code of this file.

Macros

#define ConInitStdStreams()   /* empty */
 
#define StdOut   stdout
 
#define StdErr   stderr
 
#define IS_DOTS(pch)   ((*(pch) == L'.') && (((pch)[1] == 0) || (((pch)[1] == L'.') && ((pch)[2] == 0))))
 
#define HasWildcard(filename)   ((wcschr((filename), L'*') != NULL) || (wcschr((filename), L'?') != NULL))
 

Functions

void ConPuts (FILE *fp, LPCWSTR psz)
 
void ConPrintf (FILE *fp, LPCWSTR psz,...)
 
void ConResPuts (FILE *fp, UINT nID)
 
void ConResPrintf (FILE *fp, UINT nID,...)
 
FCRET NoDifference (VOID)
 
FCRET Different (LPCWSTR file0, LPCWSTR file1)
 
FCRET LongerThan (LPCWSTR file0, LPCWSTR file1)
 
FCRET OutOfMemory (VOID)
 
FCRET CannotRead (LPCWSTR file)
 
FCRET InvalidSwitch (VOID)
 
FCRET ResyncFailed (VOID)
 
VOID PrintCaption (LPCWSTR file)
 
VOID PrintEndOfDiff (VOID)
 
VOID PrintDots (VOID)
 
VOID PrintLineW (const FILECOMPARE *pFC, DWORD lineno, LPCWSTR psz)
 
VOID PrintLineA (const FILECOMPARE *pFC, DWORD lineno, LPCSTR psz)
 
HANDLE DoOpenFileForInput (LPCWSTR file)
 
static FCRET BinaryFileCompare (FILECOMPARE *pFC)
 
static FCRET TextFileCompare (FILECOMPARE *pFC)
 
static BOOL IsBinaryExt (LPCWSTR filename)
 
static FCRET FileCompare (FILECOMPARE *pFC)
 
static BOOL IsTitleWild (LPCWSTR filename)
 
static FCRET FileCompareOneSideWild (const FILECOMPARE *pFC, BOOL bWildRight)
 
static FCRET FileCompareWildTitle (const FILECOMPARE *pFC)
 
static FCRET FileCompareBothWild (const FILECOMPARE *pFC)
 
static FCRET WildcardFileCompare (FILECOMPARE *pFC)
 
int wmain (int argc, WCHAR **argv)
 
int main (int argc, char **argv)
 

Macro Definition Documentation

◆ ConInitStdStreams

#define ConInitStdStreams ( )    /* empty */

Definition at line 13 of file fc.c.

◆ HasWildcard

#define HasWildcard (   filename)    ((wcschr((filename), L'*') != NULL) || (wcschr((filename), L'?') != NULL))

Definition at line 362 of file fc.c.

◆ IS_DOTS

#define IS_DOTS (   pch)    ((*(pch) == L'.') && (((pch)[1] == 0) || (((pch)[1] == L'.') && ((pch)[2] == 0))))

Definition at line 360 of file fc.c.

◆ StdErr

#define StdErr   stderr

Definition at line 15 of file fc.c.

◆ StdOut

#define StdOut   stdout

Definition at line 14 of file fc.c.

Function Documentation

◆ BinaryFileCompare()

static FCRET BinaryFileCompare ( FILECOMPARE pFC)
static

Definition at line 128 of file fc.c.

129 {
130  FCRET ret;
131  HANDLE hFile0, hFile1, hMapping0 = NULL, hMapping1 = NULL;
132  LPBYTE pb0 = NULL, pb1 = NULL;
133  LARGE_INTEGER ib, cb0, cb1, cbCommon;
134  DWORD cbView, ibView;
135  BOOL fDifferent = FALSE;
136 
137  hFile0 = DoOpenFileForInput(pFC->file[0]);
138  if (hFile0 == INVALID_HANDLE_VALUE)
139  return FCRET_CANT_FIND;
140  hFile1 = DoOpenFileForInput(pFC->file[1]);
141  if (hFile1 == INVALID_HANDLE_VALUE)
142  {
143  CloseHandle(hFile0);
144  return FCRET_CANT_FIND;
145  }
146 
147  do
148  {
149  if (_wcsicmp(pFC->file[0], pFC->file[1]) == 0)
150  {
151  ret = NoDifference();
152  break;
153  }
154  if (!GetFileSizeEx(hFile0, &cb0))
155  {
156  ret = CannotRead(pFC->file[0]);
157  break;
158  }
159  if (!GetFileSizeEx(hFile1, &cb1))
160  {
161  ret = CannotRead(pFC->file[1]);
162  break;
163  }
164  cbCommon.QuadPart = min(cb0.QuadPart, cb1.QuadPart);
165  if (cbCommon.QuadPart > 0)
166  {
167  hMapping0 = CreateFileMappingW(hFile0, NULL, PAGE_READONLY,
168  cb0.HighPart, cb0.LowPart, NULL);
169  if (hMapping0 == NULL)
170  {
171  ret = CannotRead(pFC->file[0]);
172  break;
173  }
174  hMapping1 = CreateFileMappingW(hFile1, NULL, PAGE_READONLY,
175  cb1.HighPart, cb1.LowPart, NULL);
176  if (hMapping1 == NULL)
177  {
178  ret = CannotRead(pFC->file[1]);
179  break;
180  }
181 
183  for (ib.QuadPart = 0; ib.QuadPart < cbCommon.QuadPart; )
184  {
185  cbView = (DWORD)min(cbCommon.QuadPart - ib.QuadPart, MAX_VIEW_SIZE);
186  pb0 = MapViewOfFile(hMapping0, FILE_MAP_READ, ib.HighPart, ib.LowPart, cbView);
187  pb1 = MapViewOfFile(hMapping1, FILE_MAP_READ, ib.HighPart, ib.LowPart, cbView);
188  if (!pb0 || !pb1)
189  {
190  ret = OutOfMemory();
191  break;
192  }
193  for (ibView = 0; ibView < cbView; ++ib.QuadPart, ++ibView)
194  {
195  if (pb0[ibView] == pb1[ibView])
196  continue;
197 
198  fDifferent = TRUE;
199  if (cbCommon.QuadPart > MAXDWORD)
200  {
201  ConPrintf(StdOut, L"%016I64X: %02X %02X\n", ib.QuadPart,
202  pb0[ibView], pb1[ibView]);
203  }
204  else
205  {
206  ConPrintf(StdOut, L"%08lX: %02X %02X\n", ib.LowPart,
207  pb0[ibView], pb1[ibView]);
208  }
209  }
210  UnmapViewOfFile(pb0);
211  UnmapViewOfFile(pb1);
212  pb0 = pb1 = NULL;
213  }
214  if (ret != FCRET_IDENTICAL)
215  break;
216  }
217 
218  if (cb0.QuadPart < cb1.QuadPart)
219  ret = LongerThan(pFC->file[1], pFC->file[0]);
220  else if (cb0.QuadPart > cb1.QuadPart)
221  ret = LongerThan(pFC->file[0], pFC->file[1]);
222  else if (fDifferent)
223  ret = Different(pFC->file[0], pFC->file[1]);
224  else
225  ret = NoDifference();
226  } while (0);
227 
228  UnmapViewOfFile(pb0);
229  UnmapViewOfFile(pb1);
230  CloseHandle(hMapping0);
231  CloseHandle(hMapping1);
232  CloseHandle(hFile0);
233  CloseHandle(hFile1);
234  return ret;
235 }
#define CloseHandle
Definition: compat.h:598
#define MapViewOfFile
Definition: compat.h:604
FCRET Different(LPCWSTR file0, LPCWSTR file1)
Definition: fc.c:52
#define TRUE
Definition: types.h:120
#define INVALID_HANDLE_VALUE
Definition: compat.h:590
LPCWSTR file[2]
Definition: fc.h:67
FCRET
Definition: fc.h:23
#define DWORD
Definition: nt_native.h:44
unsigned char * LPBYTE
Definition: typedefs.h:53
#define FALSE
Definition: types.h:117
unsigned int BOOL
Definition: ntddk_ex.h:94
#define MAXDWORD
#define FILE_MAP_READ
Definition: compat.h:635
HANDLE DoOpenFileForInput(LPCWSTR file)
Definition: fc.c:118
#define CreateFileMappingW(a, b, c, d, e, f)
Definition: compat.h:603
unsigned long DWORD
Definition: ntddk_ex.h:95
#define GetFileSizeEx
Definition: compat.h:616
int ret
static const WCHAR L[]
Definition: oid.c:1250
FCRET CannotRead(LPCWSTR file)
Definition: fc.c:70
ULONG LowPart
Definition: typedefs.h:106
FCRET OutOfMemory(VOID)
Definition: fc.c:64
void ConPrintf(FILE *fp, LPCWSTR psz,...)
Definition: fc.c:20
#define min(a, b)
Definition: monoChain.cc:55
#define NULL
Definition: types.h:112
#define PAGE_READONLY
Definition: compat.h:138
FCRET NoDifference(VOID)
Definition: fc.c:46
#define StdOut
Definition: fc.c:14
FCRET LongerThan(LPCWSTR file0, LPCWSTR file1)
Definition: fc.c:58
#define UnmapViewOfFile
Definition: compat.h:605
_Check_return_ _CRTIMP int __cdecl _wcsicmp(_In_z_ const wchar_t *_Str1, _In_z_ const wchar_t *_Str2)
LONGLONG QuadPart
Definition: typedefs.h:114
#define MAX_VIEW_SIZE
Definition: fc.h:96

Referenced by FileCompare().

◆ CannotRead()

FCRET CannotRead ( LPCWSTR  file)

Definition at line 70 of file fc.c.

71 {
73  return FCRET_INVALID;
74 }
#define IDS_CANNOT_READ
Definition: resource.h:6
void ConResPrintf(FILE *fp, UINT nID,...)
Definition: fc.c:33
#define StdErr
Definition: fc.c:15
Definition: fci.c:126

Referenced by BinaryFileCompare(), and TextFileCompare().

◆ ConPrintf()

void ConPrintf ( FILE fp,
LPCWSTR  psz,
  ... 
)

Definition at line 20 of file fc.c.

21  {
22  va_list va;
23  va_start(va, psz);
24  vfwprintf(fp, psz, va);
25  va_end(va);
26  }
#define va_end(ap)
Definition: acmsvcex.h:90
_Check_return_opt_ _CRTIMP int __cdecl vfwprintf(_Inout_ FILE *_File, _In_z_ _Printf_format_string_ const wchar_t *_Format, va_list _ArgList)
char * va_list
Definition: acmsvcex.h:78
va_start(ap, x)

Referenced by BinaryFileCompare(), CheckLogOrSourceExistence(), ChkdskCallback(), cmdAccounts(), cmdContinue(), CmdFindAppEnum(), cmdGroup(), cmdHelpMsg(), cmdLocalGroup(), cmdPause(), cmdShare(), cmdStop(), cmdUser(), DisplayError(), DisplayGroup(), DisplayLocalGroup(), DisplayServerConfig(), DisplayServerStatistics(), DisplayShare(), DisplayUser(), DisplayWorkstationConfig(), DisplayWorkstationStatistics(), download_file(), DrawTree(), DumpSubstedDrives(), EnumerateConnections(), EnumerateDevices(), EnumerateGroups(), EnumerateLocalGroups(), EnumerateRunningServices(), EnumerateShares(), EnumerateUsers(), ErrorMessage(), FindString(), FormatExCallback(), HandleFindCommand(), HandleInfoCommand(), hash_file(), PrintAllJobs(), PrintAttribute(), PrintCaption(), PrintDateTime(), PrintError(), PrintErrorMessage(), PrintFileDacl(), PrintHelpCommand(), PrintHorizontalLine(), PrintLineA(), PrintLineW(), PrintLocalTime(), PrintLogonHours(), PrintNum(), PrintParserError(), PrintSpace(), PrintString(), PrintWin32Error(), SetParallelState(), ShowParallelStatus(), ShowTcpTable(), ShowUdpTable(), StartOneService(), Usage(), WherePrintPath(), wmain(), and write_status().

◆ ConPuts()

void ConPuts ( FILE fp,
LPCWSTR  psz 
)

Definition at line 16 of file fc.c.

17  {
18  fputws(psz, fp);
19  }
_Check_return_opt_ _CRTIMP int __cdecl fputws(_In_z_ const wchar_t *_Str, _Inout_ FILE *_File)

Referenced by active_main(), automount_main(), break_main(), CBindStatusCallback_OnProgress(), ChkdskCallback(), cmdAccounts(), cmdComputer(), cmdConfig(), cmdContinue(), cmdGroup(), cmdHelp(), cmdHelpMsg(), cmdLocalGroup(), cmdPause(), cmdShare(), cmdStart(), cmdStatistics(), cmdStop(), cmdSyntax(), cmdUser(), ConClearScreen(), CtrlCIntercept(), DisplayGroup(), DisplayLocalGroup(), DisplayServerConfig(), DisplayTableHeader(), DisplayUser(), DisplayWorkstationConfig(), EnumerateDevices(), EnumerateGroups(), EnumerateLocalGroups(), EnumerateRunningServices(), EnumerateShares(), EnumerateUsers(), EnumProcessAndPrint(), FileCompare(), FileCompareBothWild(), FileCompareOneSideWild(), FileCompareWildTitle(), HandleInfoCommand(), hash_file(), help_cmdlist(), InputWait(), ListDisk(), ListPartition(), ListVdisk(), ParseCmdline(), Ping(), print_usage(), PrintDaclsOfFiles(), PrintDots(), PrintEndOfDiff(), PrintError(), PrintFileDacl(), PrintHeader(), PrintLogonHours(), PrintMessageString(), PrintMessageStringV(), PrintNetMessage(), PrintPaddedMessageString(), PrintPadding(), PrintSplitLine(), PrintWin32Error(), PromptYesNo(), ReadPassword(), repair_main(), ShowConsoleCPStatus(), ShowConsoleStatus(), ShowHeader(), ShowParallelStatus(), ShowSerialStatus(), UnderlinedResPrintf(), unimplemented(), wmain(), and write_status().

◆ ConResPrintf()

void ConResPrintf ( FILE fp,
UINT  nID,
  ... 
)

Definition at line 33 of file fc.c.

34  {
35  va_list va;
36  WCHAR sz[MAX_PATH];
37  va_start(va, nID);
38  LoadStringW(NULL, nID, sz, _countof(sz));
39  vfwprintf(fp, sz, va);
40  va_end(va);
41  }
int WINAPI LoadStringW(_In_opt_ HINSTANCE hInstance, _In_ UINT uID, _Out_writes_to_(cchBufferMax, return+1) LPWSTR lpBuffer, _In_ int cchBufferMax)
#define va_end(ap)
Definition: acmsvcex.h:90
_Check_return_opt_ _CRTIMP int __cdecl vfwprintf(_Inout_ FILE *_File, _In_z_ _Printf_format_string_ const wchar_t *_Format, va_list _ArgList)
char * va_list
Definition: acmsvcex.h:78
__wchar_t WCHAR
Definition: xmlstorage.h:180
#define _countof(array)
Definition: sndvol32.h:68
#define MAX_PATH
Definition: compat.h:34
va_start(ap, x)
#define NULL
Definition: types.h:112

Referenced by AddJob(), AddSubst(), CannotRead(), CBindStatusCallback_OnProgress(), CheckLogOrSourceExistence(), ChkdskCallback(), Confirm(), ConFormatMessage(), ConsoleCtrlHandler(), DeleteJob(), DeleteSubst(), Different(), DoOpenFileForInput(), EnumerateDevices(), FileCompare(), FileCompareBothWild(), FileCompareOneSideWild(), FileCompareWildTitle(), FormatExCallback(), HandleInfoCommand(), InputWait(), ListDisk(), ListPartition(), LongerThan(), ParseArgument(), ParseCmdLine(), Ping(), print_err(), PrintAllJobs(), PrintError(), PrintJobDetails(), PrintStats(), ResolveTarget(), RunScript(), SelectDisk(), SelectPartition(), SerialPortQuery(), SetConsoleCPState(), SetConsoleState(), SetConsoleStateOld(), SetSerialState(), ShowConsoleCPStatus(), ShowConsoleStatus(), ShowEthernetStatistics(), ShowHeader(), ShowIcmpStatistics(), ShowIpStatistics(), ShowParallelStatus(), ShowSerialStatus(), ShowTcpStatistics(), ShowTcpTable(), ShowUdpStatistics(), Usage(), WhereDoOption(), WhereGetVariable(), WhereParseCommandLine(), WherePrintPath(), WlanPrintCurrentStatus(), WlanScan(), and wmain().

◆ ConResPuts()

void ConResPuts ( FILE fp,
UINT  nID 
)

Definition at line 27 of file fc.c.

28  {
29  WCHAR sz[MAX_PATH];
30  LoadStringW(NULL, nID, sz, _countof(sz));
31  fputws(sz, fp);
32  }
int WINAPI LoadStringW(_In_opt_ HINSTANCE hInstance, _In_ UINT uID, _Out_writes_to_(cchBufferMax, return+1) LPWSTR lpBuffer, _In_ int cchBufferMax)
_Check_return_opt_ _CRTIMP int __cdecl fputws(_In_z_ const wchar_t *_Str, _Inout_ FILE *_File)
__wchar_t WCHAR
Definition: xmlstorage.h:180
#define _countof(array)
Definition: sndvol32.h:68
#define MAX_PATH
Definition: compat.h:34
#define NULL
Definition: types.h:112

Referenced by _tmain(), AddSubst(), CheckLogOrSourceExistence(), ChkdskCallback(), DisplayOutput(), DisplayTableHeader(), FormatExCallback(), help_cmdlist(), help_main(), InputWait(), InterpretMain(), InvalidSwitch(), list_main(), ListDisk(), ListPartition(), ListVolume(), NoDifference(), online_main(), OutOfMemory(), ParseArguments(), ParseCmdAndExecute(), ParseCmdline(), ParseCommandLine(), PrintFileDacl(), PrintHelpCommand(), PrintPaddedResourceString(), PrintParserError(), PrintWin32Error(), PromptYesNo(), rescan_main(), ResyncFailed(), select_main(), SelectDisk(), SelectPartition(), SetConsoleCPState(), SetConsoleState(), SetConsoleStateOld(), ShowEthernetStatistics(), ShowHeader(), ShowIcmpStatistics(), ShowIpStatistics(), ShowParallelStatus(), ShowTcpStatistics(), ShowUdpStatistics(), ShowUdpTable(), WhereDoOption(), WhereError(), WhereParseCommandLine(), WildcardFileCompare(), WlanConnect(), WlanDisconnect(), WlanPrintCurrentStatus(), WlanScan(), and wmain().

◆ Different()

FCRET Different ( LPCWSTR  file0,
LPCWSTR  file1 
)

Definition at line 52 of file fc.c.

53 {
54  ConResPrintf(StdOut, IDS_DIFFERENT, file0, file1);
55  return FCRET_DIFFERENT;
56 }
void ConResPrintf(FILE *fp, UINT nID,...)
Definition: fc.c:33
#define StdOut
Definition: fc.c:14
#define IDS_DIFFERENT
Definition: resource.h:11

Referenced by BinaryFileCompare(), and Finalize().

◆ DoOpenFileForInput()

HANDLE DoOpenFileForInput ( LPCWSTR  file)

Definition at line 118 of file fc.c.

119 {
122  {
124  }
125  return hFile;
126 }
#define INVALID_HANDLE_VALUE
Definition: compat.h:590
#define FILE_SHARE_READ
Definition: compat.h:136
#define OPEN_EXISTING
Definition: compat.h:634
void ConResPrintf(FILE *fp, UINT nID,...)
Definition: fc.c:33
#define GENERIC_READ
Definition: compat.h:135
_In_ HANDLE hFile
Definition: mswsock.h:90
#define NULL
Definition: types.h:112
#define CreateFileW
Definition: compat.h:600
#define IDS_CANNOT_OPEN
Definition: resource.h:8
#define StdErr
Definition: fc.c:15
Definition: fci.c:126

Referenced by BinaryFileCompare(), and TextFileCompare().

◆ FileCompare()

static FCRET FileCompare ( FILECOMPARE pFC)
static

Definition at line 340 of file fc.c.

341 {
342  FCRET ret;
343  ConResPrintf(StdOut, IDS_COMPARING, pFC->file[0], pFC->file[1]);
344 
345  if (!(pFC->dwFlags & FLAG_L) &&
346  ((pFC->dwFlags & FLAG_B) || IsBinaryExt(pFC->file[0]) || IsBinaryExt(pFC->file[1])))
347  {
348  ret = BinaryFileCompare(pFC);
349  }
350  else
351  {
352  ret = TextFileCompare(pFC);
353  }
354 
355  ConPuts(StdOut, L"\n");
356  return ret;
357 }
static FCRET TextFileCompare(FILECOMPARE *pFC)
Definition: fc.c:237
static BOOL IsBinaryExt(LPCWSTR filename)
Definition: fc.c:309
LPCWSTR file[2]
Definition: fc.h:67
FCRET
Definition: fc.h:23
void ConPuts(FILE *fp, LPCWSTR psz)
Definition: fc.c:16
DWORD dwFlags
Definition: fc.h:64
#define FLAG_L
Definition: fc.h:52
void ConResPrintf(FILE *fp, UINT nID,...)
Definition: fc.c:33
static FCRET BinaryFileCompare(FILECOMPARE *pFC)
Definition: fc.c:128
int ret
static const WCHAR L[]
Definition: oid.c:1250
#define IDS_COMPARING
Definition: resource.h:7
#define FLAG_B
Definition: fc.h:50
#define StdOut
Definition: fc.c:14

Referenced by FileCompareBothWild(), FileCompareOneSideWild(), FileCompareWildTitle(), and WildcardFileCompare().

◆ FileCompareBothWild()

static FCRET FileCompareBothWild ( const FILECOMPARE pFC)
static

Definition at line 474 of file fc.c.

475 {
477  WIN32_FIND_DATAW find0, find1;
478  HANDLE hFind0, hFind1;
479  WCHAR szPath0[MAX_PATH], szPath1[MAX_PATH];
480  FILECOMPARE fc;
481 
482  hFind0 = FindFirstFileW(pFC->file[0], &find0);
483  if (hFind0 == INVALID_HANDLE_VALUE)
484  {
486  ConPuts(StdOut, L"\n");
487  return FCRET_CANT_FIND;
488  }
489  hFind1 = FindFirstFileW(pFC->file[1], &find1);
490  if (hFind1 == INVALID_HANDLE_VALUE)
491  {
492  CloseHandle(hFind0);
494  ConPuts(StdOut, L"\n");
495  return FCRET_CANT_FIND;
496  }
497  StringCbCopyW(szPath0, sizeof(szPath0), pFC->file[0]);
498  StringCbCopyW(szPath1, sizeof(szPath1), pFC->file[1]);
499 
500  fc = *pFC;
501  fc.file[0] = szPath0;
502  fc.file[1] = szPath1;
503  do
504  {
505  while (IS_DOTS(find0.cFileName))
506  {
507  if (!FindNextFileW(hFind0, &find0))
508  goto quit;
509  }
510  while (IS_DOTS(find1.cFileName))
511  {
512  if (!FindNextFileW(hFind1, &find1))
513  goto quit;
514  }
515 
516  // replace file title
517  PathRemoveFileSpecW(szPath0);
518  PathRemoveFileSpecW(szPath1);
519  PathAppendW(szPath0, find0.cFileName);
520  PathAppendW(szPath1, find1.cFileName);
521 
522  switch (FileCompare(&fc))
523  {
524  case FCRET_IDENTICAL:
525  break;
526  case FCRET_DIFFERENT:
527  if (ret != FCRET_INVALID)
529  break;
530  default:
531  ret = FCRET_INVALID;
532  break;
533  }
534  } while (FindNextFileW(hFind0, &find0) && FindNextFileW(hFind1, &find1));
535 quit:
536  CloseHandle(hFind0);
537  CloseHandle(hFind1);
538  return ret;
539 }
BOOL WINAPI FindNextFileW(IN HANDLE hFindFile, OUT LPWIN32_FIND_DATAW lpFindFileData)
Definition: find.c:382
BOOL WINAPI PathRemoveFileSpecW(LPWSTR lpszPath)
Definition: path.c:629
#define CloseHandle
Definition: compat.h:598
Definition: fc.h:62
void quit(int argc, const char *argv[])
Definition: cmds.c:1606
#define INVALID_HANDLE_VALUE
Definition: compat.h:590
LPCWSTR file[2]
Definition: fc.h:67
FCRET
Definition: fc.h:23
BOOL WINAPI PathAppendW(LPWSTR lpszPath, LPCWSTR lpszAppend)
Definition: path.c:126
void ConPuts(FILE *fp, LPCWSTR psz)
Definition: fc.c:16
void ConResPrintf(FILE *fp, UINT nID,...)
Definition: fc.c:33
__wchar_t WCHAR
Definition: xmlstorage.h:180
static FCRET FileCompare(FILECOMPARE *pFC)
Definition: fc.c:340
#define MAX_PATH
Definition: compat.h:34
PFOR_CONTEXT fc
Definition: for.c:57
int ret
static const WCHAR L[]
Definition: oid.c:1250
#define StdOut
Definition: fc.c:14
#define IS_DOTS(pch)
Definition: fc.c:360
STRSAFEAPI StringCbCopyW(STRSAFE_LPWSTR pszDest, size_t cbDest, STRSAFE_LPCWSTR pszSrc)
Definition: strsafe.h:166
#define IDS_CANNOT_OPEN
Definition: resource.h:8
HANDLE WINAPI FindFirstFileW(IN LPCWSTR lpFileName, OUT LPWIN32_FIND_DATAW lpFindFileData)
Definition: find.c:320
#define StdErr
Definition: fc.c:15

Referenced by WildcardFileCompare().

◆ FileCompareOneSideWild()

static FCRET FileCompareOneSideWild ( const FILECOMPARE pFC,
BOOL  bWildRight 
)
static

Definition at line 371 of file fc.c.

372 {
375  HANDLE hFind;
377  FILECOMPARE fc;
378 
379  hFind = FindFirstFileW(pFC->file[bWildRight], &find);
380  if (hFind == INVALID_HANDLE_VALUE)
381  {
382  ConResPrintf(StdErr, IDS_CANNOT_OPEN, pFC->file[bWildRight]);
383  ConPuts(StdOut, L"\n");
384  return FCRET_CANT_FIND;
385  }
386  StringCbCopyW(szPath, sizeof(szPath), pFC->file[bWildRight]);
387 
388  fc = *pFC;
389  fc.file[!bWildRight] = pFC->file[!bWildRight];
390  fc.file[bWildRight] = szPath;
391  do
392  {
393  if (IS_DOTS(find.cFileName))
394  continue;
395 
396  // replace file title
398  PathAppendW(szPath, find.cFileName);
399 
400  switch (FileCompare(&fc))
401  {
402  case FCRET_IDENTICAL:
403  break;
404  case FCRET_DIFFERENT:
405  if (ret != FCRET_INVALID)
407  break;
408  default:
409  ret = FCRET_INVALID;
410  break;
411  }
412  } while (FindNextFileW(hFind, &find));
413 
414  FindClose(hFind);
415  return ret;
416 }
BOOL WINAPI FindNextFileW(IN HANDLE hFindFile, OUT LPWIN32_FIND_DATAW lpFindFileData)
Definition: find.c:382
BOOL WINAPI PathRemoveFileSpecW(LPWSTR lpszPath)
Definition: path.c:629
Definition: fc.h:62
#define INVALID_HANDLE_VALUE
Definition: compat.h:590
LPCWSTR file[2]
Definition: fc.h:67
FCRET
Definition: fc.h:23
BOOL WINAPI PathAppendW(LPWSTR lpszPath, LPCWSTR lpszAppend)
Definition: path.c:126
void ConPuts(FILE *fp, LPCWSTR psz)
Definition: fc.c:16
void ConResPrintf(FILE *fp, UINT nID,...)
Definition: fc.c:33
__wchar_t WCHAR
Definition: xmlstorage.h:180
static FCRET FileCompare(FILECOMPARE *pFC)
Definition: fc.c:340
#define MAX_PATH
Definition: compat.h:34
PFOR_CONTEXT fc
Definition: for.c:57
int ret
static const WCHAR L[]
Definition: oid.c:1250
LPCWSTR szPath
Definition: env.c:37
static TAGID TAGID find
Definition: db.cpp:155
#define StdOut
Definition: fc.c:14
#define IS_DOTS(pch)
Definition: fc.c:360
STRSAFEAPI StringCbCopyW(STRSAFE_LPWSTR pszDest, size_t cbDest, STRSAFE_LPCWSTR pszSrc)
Definition: strsafe.h:166
#define IDS_CANNOT_OPEN
Definition: resource.h:8
HANDLE WINAPI FindFirstFileW(IN LPCWSTR lpFileName, OUT LPWIN32_FIND_DATAW lpFindFileData)
Definition: find.c:320
#define StdErr
Definition: fc.c:15
BOOL WINAPI FindClose(HANDLE hFindFile)
Definition: find.c:502

Referenced by WildcardFileCompare().

◆ FileCompareWildTitle()

static FCRET FileCompareWildTitle ( const FILECOMPARE pFC)
static

Definition at line 418 of file fc.c.

419 {
422  HANDLE hFind;
423  WCHAR szPath0[MAX_PATH], szPath1[MAX_PATH];
424  FILECOMPARE fc;
425  LPWSTR pch;
426 
427  hFind = FindFirstFileW(pFC->file[0], &find);
428  if (hFind == INVALID_HANDLE_VALUE)
429  {
431  ConPuts(StdOut, L"\n");
432  return FCRET_CANT_FIND;
433  }
434  StringCbCopyW(szPath0, sizeof(szPath0), pFC->file[0]);
435  StringCbCopyW(szPath1, sizeof(szPath1), pFC->file[1]);
436  pch = PathFindExtensionW(pFC->file[1]);
437 
438  fc = *pFC;
439  fc.file[0] = szPath0;
440  fc.file[1] = szPath1;
441  do
442  {
443  if (IS_DOTS(find.cFileName))
444  continue;
445 
446  // replace file title
447  PathRemoveFileSpecW(szPath0);
448  PathRemoveFileSpecW(szPath1);
449  PathAppendW(szPath0, find.cFileName);
450  PathAppendW(szPath1, find.cFileName);
451 
452  // replace dot extension
453  PathRemoveExtensionW(szPath1);
454  PathAddExtensionW(szPath1, pch);
455 
456  switch (FileCompare(&fc))
457  {
458  case FCRET_IDENTICAL:
459  break;
460  case FCRET_DIFFERENT:
461  if (ret != FCRET_INVALID)
463  break;
464  default:
465  ret = FCRET_INVALID;
466  break;
467  }
468  } while (FindNextFileW(hFind, &find));
469 
470  FindClose(hFind);
471  return ret;
472 }
BOOL WINAPI FindNextFileW(IN HANDLE hFindFile, OUT LPWIN32_FIND_DATAW lpFindFileData)
Definition: find.c:382
BOOL WINAPI PathRemoveFileSpecW(LPWSTR lpszPath)
Definition: path.c:629
Definition: fc.h:62
#define INVALID_HANDLE_VALUE
Definition: compat.h:590
LPCWSTR file[2]
Definition: fc.h:67
FCRET
Definition: fc.h:23
#define pch(ap)
Definition: match.c:418
BOOL WINAPI PathAppendW(LPWSTR lpszPath, LPCWSTR lpszAppend)
Definition: path.c:126
void ConPuts(FILE *fp, LPCWSTR psz)
Definition: fc.c:16
BOOL WINAPI PathAddExtensionW(LPWSTR lpszPath, LPCWSTR lpszExtension)
Definition: path.c:2637
void WINAPI PathRemoveExtensionW(LPWSTR lpszPath)
Definition: path.c:823
LPWSTR WINAPI PathFindExtensionW(LPCWSTR lpszPath)
Definition: path.c:447
void ConResPrintf(FILE *fp, UINT nID,...)
Definition: fc.c:33
__wchar_t WCHAR
Definition: xmlstorage.h:180
static FCRET FileCompare(FILECOMPARE *pFC)
Definition: fc.c:340
#define MAX_PATH
Definition: compat.h:34
PFOR_CONTEXT fc
Definition: for.c:57
int ret
static const WCHAR L[]
Definition: oid.c:1250
static TAGID TAGID find
Definition: db.cpp:155
#define StdOut
Definition: fc.c:14
WCHAR * LPWSTR
Definition: xmlstorage.h:184
#define IS_DOTS(pch)
Definition: fc.c:360
STRSAFEAPI StringCbCopyW(STRSAFE_LPWSTR pszDest, size_t cbDest, STRSAFE_LPCWSTR pszSrc)
Definition: strsafe.h:166
#define IDS_CANNOT_OPEN
Definition: resource.h:8
HANDLE WINAPI FindFirstFileW(IN LPCWSTR lpFileName, OUT LPWIN32_FIND_DATAW lpFindFileData)
Definition: find.c:320
#define StdErr
Definition: fc.c:15
BOOL WINAPI FindClose(HANDLE hFindFile)
Definition: find.c:502

Referenced by WildcardFileCompare().

◆ InvalidSwitch()

FCRET InvalidSwitch ( VOID  )

Definition at line 76 of file fc.c.

77 {
79  return FCRET_INVALID;
80 }
void ConResPuts(FILE *fp, UINT nID)
Definition: fc.c:27
#define IDS_INVALID_SWITCH
Definition: resource.h:7
#define StdErr
Definition: fc.c:15

Referenced by wmain().

◆ IsBinaryExt()

static BOOL IsBinaryExt ( LPCWSTR  filename)
static

Definition at line 309 of file fc.c.

310 {
311  // Don't change this array. This is by design.
312  // See also: https://docs.microsoft.com/en-us/windows-server/administration/windows-commands/fc
313  static const LPCWSTR s_exts[] = { L"EXE", L"COM", L"SYS", L"OBJ", L"LIB", L"BIN" };
314  size_t iext;
315  LPCWSTR pch, ext, pch0 = wcsrchr(filename, L'\\'), pch1 = wcsrchr(filename, L'/');
316  if (!pch0 && !pch1)
317  pch = filename;
318  else if (!pch0 && pch1)
319  pch = pch1;
320  else if (pch0 && !pch1)
321  pch = pch0;
322  else if (pch0 < pch1)
323  pch = pch1;
324  else
325  pch = pch0;
326 
327  ext = wcsrchr(pch, L'.');
328  if (ext)
329  {
330  ++ext;
331  for (iext = 0; iext < _countof(s_exts); ++iext)
332  {
333  if (_wcsicmp(ext, s_exts[iext]) == 0)
334  return TRUE;
335  }
336  }
337  return FALSE;
338 }
const WCHAR * LPCWSTR
Definition: xmlstorage.h:185
#define TRUE
Definition: types.h:120
const char * filename
Definition: ioapi.h:135
#define pch(ap)
Definition: match.c:418
#define FALSE
Definition: types.h:117
char ext[3]
Definition: mkdosfs.c:358
#define _countof(array)
Definition: sndvol32.h:68
static const WCHAR L[]
Definition: oid.c:1250
#define wcsrchr
Definition: compat.h:16
_Check_return_ _CRTIMP int __cdecl _wcsicmp(_In_z_ const wchar_t *_Str1, _In_z_ const wchar_t *_Str2)

Referenced by FileCompare().

◆ IsTitleWild()

static BOOL IsTitleWild ( LPCWSTR  filename)
inlinestatic

Definition at line 365 of file fc.c.

366 {
368  return (pch && *pch == L'*' && pch[1] == L'.' && !HasWildcard(&pch[2]));
369 }
const WCHAR * LPCWSTR
Definition: xmlstorage.h:185
const char * filename
Definition: ioapi.h:135
#define pch(ap)
Definition: match.c:418
LPWSTR WINAPI PathFindFileNameW(LPCWSTR lpszPath)
Definition: path.c:394
static const WCHAR L[]
Definition: oid.c:1250
#define HasWildcard(filename)
Definition: fc.c:362

Referenced by WildcardFileCompare().

◆ LongerThan()

FCRET LongerThan ( LPCWSTR  file0,
LPCWSTR  file1 
)

Definition at line 58 of file fc.c.

59 {
60  ConResPrintf(StdOut, IDS_LONGER_THAN, file0, file1);
61  return FCRET_DIFFERENT;
62 }
#define IDS_LONGER_THAN
Definition: resource.h:3
void ConResPrintf(FILE *fp, UINT nID,...)
Definition: fc.c:33
#define StdOut
Definition: fc.c:14

Referenced by BinaryFileCompare().

◆ main()

int main ( int argc  ,
char **  argv 
)

Definition at line 665 of file fc.c.

666 {
667  INT my_argc;
668  LPWSTR *my_argv = CommandLineToArgvW(GetCommandLineW(), &my_argc);
669  INT ret = wmain(my_argc, my_argv);
670  LocalFree(my_argv);
671  return ret;
672 }
int32_t INT
Definition: typedefs.h:58
int wmain(int argc, WCHAR **argv)
Definition: fc.c:577
LPWSTR WINAPI GetCommandLineW(VOID)
Definition: proc.c:2014
LPWSTR *WINAPI CommandLineToArgvW(LPCWSTR lpCmdline, int *numargs)
Definition: shell32_main.c:80
int ret
HLOCAL NTAPI LocalFree(HLOCAL hMem)
Definition: heapmem.c:1577
WCHAR * LPWSTR
Definition: xmlstorage.h:184

◆ NoDifference()

FCRET NoDifference ( VOID  )

Definition at line 46 of file fc.c.

47 {
49  return FCRET_IDENTICAL;
50 }
#define IDS_NO_DIFFERENCE
Definition: resource.h:2
void ConResPuts(FILE *fp, UINT nID)
Definition: fc.c:27
#define StdOut
Definition: fc.c:14

Referenced by BinaryFileCompare(), Finalize(), and TextFileCompare().

◆ OutOfMemory()

FCRET OutOfMemory ( VOID  )

Definition at line 64 of file fc.c.

65 {
67  return FCRET_INVALID;
68 }
#define IDS_OUT_OF_MEMORY
Definition: resource.h:5
void ConResPuts(FILE *fp, UINT nID)
Definition: fc.c:27
#define StdErr
Definition: fc.c:15

Referenced by BinaryFileCompare().

◆ PrintCaption()

VOID PrintCaption ( LPCWSTR  file)

Definition at line 88 of file fc.c.

89 {
90  ConPrintf(StdOut, L"***** %ls\n", file);
91 }
static const WCHAR L[]
Definition: oid.c:1250
void ConPrintf(FILE *fp, LPCWSTR psz,...)
Definition: fc.c:20
#define StdOut
Definition: fc.c:14
Definition: fci.c:126

Referenced by ShowDiff().

◆ PrintDots()

VOID PrintDots ( VOID  )

Definition at line 98 of file fc.c.

99 {
100  ConPuts(StdOut, L"...\n");
101 }
void ConPuts(FILE *fp, LPCWSTR psz)
Definition: fc.c:16
static const WCHAR L[]
Definition: oid.c:1250
#define StdOut
Definition: fc.c:14

Referenced by ShowDiff().

◆ PrintEndOfDiff()

VOID PrintEndOfDiff ( VOID  )

Definition at line 93 of file fc.c.

94 {
95  ConPuts(StdOut, L"*****\n\n");
96 }
void ConPuts(FILE *fp, LPCWSTR psz)
Definition: fc.c:16
static const WCHAR L[]
Definition: oid.c:1250
#define StdOut
Definition: fc.c:14

Referenced by Finalize(), and TextCompare().

◆ PrintLineA()

VOID PrintLineA ( const FILECOMPARE pFC,
DWORD  lineno,
LPCSTR  psz 
)

Definition at line 110 of file fc.c.

111 {
112  if (pFC->dwFlags & FLAG_N)
113  ConPrintf(StdOut, L"%5d: %hs\n", lineno, psz);
114  else
115  ConPrintf(StdOut, L"%hs\n", psz);
116 }
#define FLAG_N
Definition: fc.h:54
DWORD dwFlags
Definition: fc.h:64
static const WCHAR L[]
Definition: oid.c:1250
void ConPrintf(FILE *fp, LPCWSTR psz,...)
Definition: fc.c:20
#define StdOut
Definition: fc.c:14

◆ PrintLineW()

VOID PrintLineW ( const FILECOMPARE pFC,
DWORD  lineno,
LPCWSTR  psz 
)

Definition at line 103 of file fc.c.

104 {
105  if (pFC->dwFlags & FLAG_N)
106  ConPrintf(StdOut, L"%5d: %ls\n", lineno, psz);
107  else
108  ConPrintf(StdOut, L"%ls\n", psz);
109 }
#define FLAG_N
Definition: fc.h:54
DWORD dwFlags
Definition: fc.h:64
static const WCHAR L[]
Definition: oid.c:1250
void ConPrintf(FILE *fp, LPCWSTR psz,...)
Definition: fc.c:20
#define StdOut
Definition: fc.c:14

◆ ResyncFailed()

FCRET ResyncFailed ( VOID  )

Definition at line 82 of file fc.c.

83 {
85  return FCRET_DIFFERENT;
86 }
void ConResPuts(FILE *fp, UINT nID)
Definition: fc.c:27
#define StdOut
Definition: fc.c:14
#define IDS_RESYNC_FAILED
Definition: resource.h:13

Referenced by TextCompare().

◆ TextFileCompare()

static FCRET TextFileCompare ( FILECOMPARE pFC)
static

Definition at line 237 of file fc.c.

238 {
239  FCRET ret;
240  HANDLE hFile0, hFile1, hMapping0 = NULL, hMapping1 = NULL;
241  LARGE_INTEGER cb0, cb1;
242  BOOL fUnicode = !!(pFC->dwFlags & FLAG_U);
243 
244  hFile0 = DoOpenFileForInput(pFC->file[0]);
245  if (hFile0 == INVALID_HANDLE_VALUE)
246  return FCRET_CANT_FIND;
247  hFile1 = DoOpenFileForInput(pFC->file[1]);
248  if (hFile1 == INVALID_HANDLE_VALUE)
249  {
250  CloseHandle(hFile0);
251  return FCRET_CANT_FIND;
252  }
253 
254  do
255  {
256  if (_wcsicmp(pFC->file[0], pFC->file[1]) == 0)
257  {
258  ret = NoDifference();
259  break;
260  }
261  if (!GetFileSizeEx(hFile0, &cb0))
262  {
263  ret = CannotRead(pFC->file[0]);
264  break;
265  }
266  if (!GetFileSizeEx(hFile1, &cb1))
267  {
268  ret = CannotRead(pFC->file[1]);
269  break;
270  }
271  if (cb0.QuadPart == 0 && cb1.QuadPart == 0)
272  {
273  ret = NoDifference();
274  break;
275  }
276  if (cb0.QuadPart > 0)
277  {
278  hMapping0 = CreateFileMappingW(hFile0, NULL, PAGE_READONLY,
279  cb0.HighPart, cb0.LowPart, NULL);
280  if (hMapping0 == NULL)
281  {
282  ret = CannotRead(pFC->file[0]);
283  break;
284  }
285  }
286  if (cb1.QuadPart > 0)
287  {
288  hMapping1 = CreateFileMappingW(hFile1, NULL, PAGE_READONLY,
289  cb1.HighPart, cb1.LowPart, NULL);
290  if (hMapping1 == NULL)
291  {
292  ret = CannotRead(pFC->file[1]);
293  break;
294  }
295  }
296  if (fUnicode)
297  ret = TextCompareW(pFC, &hMapping0, &cb0, &hMapping1, &cb1);
298  else
299  ret = TextCompareA(pFC, &hMapping0, &cb0, &hMapping1, &cb1);
300  } while (0);
301 
302  CloseHandle(hMapping0);
303  CloseHandle(hMapping1);
304  CloseHandle(hFile0);
305  CloseHandle(hFile1);
306  return ret;
307 }
#define FLAG_U
Definition: fc.h:57
#define CloseHandle
Definition: compat.h:598
#define INVALID_HANDLE_VALUE
Definition: compat.h:590
FCRET TextCompareA(FILECOMPARE *pFC, HANDLE *phMapping0, const LARGE_INTEGER *pcb0, HANDLE *phMapping1, const LARGE_INTEGER *pcb1)
LPCWSTR file[2]
Definition: fc.h:67
FCRET
Definition: fc.h:23
DWORD dwFlags
Definition: fc.h:64
unsigned int BOOL
Definition: ntddk_ex.h:94
HANDLE DoOpenFileForInput(LPCWSTR file)
Definition: fc.c:118
#define CreateFileMappingW(a, b, c, d, e, f)
Definition: compat.h:603
#define GetFileSizeEx
Definition: compat.h:616
int ret
FCRET CannotRead(LPCWSTR file)
Definition: fc.c:70
ULONG LowPart
Definition: typedefs.h:106
FCRET TextCompareW(FILECOMPARE *pFC, HANDLE *phMapping0, const LARGE_INTEGER *pcb0, HANDLE *phMapping1, const LARGE_INTEGER *pcb1)
#define NULL
Definition: types.h:112
#define PAGE_READONLY
Definition: compat.h:138
FCRET NoDifference(VOID)
Definition: fc.c:46
_Check_return_ _CRTIMP int __cdecl _wcsicmp(_In_z_ const wchar_t *_Str1, _In_z_ const wchar_t *_Str2)
LONGLONG QuadPart
Definition: typedefs.h:114

Referenced by FileCompare().

◆ WildcardFileCompare()

static FCRET WildcardFileCompare ( FILECOMPARE pFC)
static

Definition at line 541 of file fc.c.

542 {
543  BOOL fWild0, fWild1;
544 
545  if (pFC->dwFlags & FLAG_HELP)
546  {
548  return FCRET_INVALID;
549  }
550 
551  if (!pFC->file[0] || !pFC->file[1])
552  {
554  return FCRET_INVALID;
555  }
556 
557  fWild0 = HasWildcard(pFC->file[0]);
558  fWild1 = HasWildcard(pFC->file[1]);
559  if (fWild0 && fWild1)
560  {
561  if (IsTitleWild(pFC->file[0]) && IsTitleWild(pFC->file[1]))
562  return FileCompareWildTitle(pFC);
563  else
564  return FileCompareBothWild(pFC);
565  }
566  else if (fWild0)
567  {
568  return FileCompareOneSideWild(pFC, FALSE);
569  }
570  else if (fWild1)
571  {
572  return FileCompareOneSideWild(pFC, TRUE);
573  }
574  return FileCompare(pFC);
575 }
static BOOL IsTitleWild(LPCWSTR filename)
Definition: fc.c:365
#define TRUE
Definition: types.h:120
LPCWSTR file[2]
Definition: fc.h:67
#define IDS_USAGE
Definition: resource.h:3
DWORD dwFlags
Definition: fc.h:64
#define FALSE
Definition: types.h:117
unsigned int BOOL
Definition: ntddk_ex.h:94
static FCRET FileCompareOneSideWild(const FILECOMPARE *pFC, BOOL bWildRight)
Definition: fc.c:371
void ConResPuts(FILE *fp, UINT nID)
Definition: fc.c:27
static FCRET FileCompare(FILECOMPARE *pFC)
Definition: fc.c:340
static FCRET FileCompareWildTitle(const FILECOMPARE *pFC)
Definition: fc.c:418
#define IDS_NEEDS_FILES
Definition: resource.h:9
#define FLAG_HELP
Definition: fc.h:60
#define StdOut
Definition: fc.c:14
#define HasWildcard(filename)
Definition: fc.c:362
static FCRET FileCompareBothWild(const FILECOMPARE *pFC)
Definition: fc.c:474
#define StdErr
Definition: fc.c:15

Referenced by wmain().

◆ wmain()

int wmain ( int  argc,
WCHAR **  argv 
)

Definition at line 577 of file fc.c.

578 {
579  FILECOMPARE fc = { .dwFlags = 0, .n = 100, .nnnn = 2 };
580  PWCHAR endptr;
581  INT i;
582 
583  /* Initialize the Console Standard Streams */
585 
586  for (i = 1; i < argc; ++i)
587  {
588  if (argv[i][0] != L'/')
589  {
590  if (!fc.file[0])
591  fc.file[0] = argv[i];
592  else if (!fc.file[1])
593  fc.file[1] = argv[i];
594  else
595  return InvalidSwitch();
596  continue;
597  }
598  switch (towupper(argv[i][1]))
599  {
600  case L'A':
601  fc.dwFlags |= FLAG_A;
602  break;
603  case L'B':
604  fc.dwFlags |= FLAG_B;
605  break;
606  case L'C':
607  fc.dwFlags |= FLAG_C;
608  break;
609  case L'L':
610  if (_wcsicmp(argv[i], L"/L") == 0)
611  {
612  fc.dwFlags |= FLAG_L;
613  }
614  else if (towupper(argv[i][2]) == L'B')
615  {
616  if (iswdigit(argv[i][3]))
617  {
618  fc.dwFlags |= FLAG_LBn;
619  fc.n = wcstoul(&argv[i][3], &endptr, 10);
620  if (endptr == NULL || *endptr != 0)
621  return InvalidSwitch();
622  }
623  else
624  {
625  return InvalidSwitch();
626  }
627  }
628  break;
629  case L'N':
630  fc.dwFlags |= FLAG_N;
631  break;
632  case L'O':
633  if (_wcsicmp(argv[i], L"/OFF") == 0 || _wcsicmp(argv[i], L"/OFFLINE") == 0)
634  {
635  fc.dwFlags |= FLAG_OFFLINE;
636  }
637  break;
638  case L'T':
639  fc.dwFlags |= FLAG_T;
640  break;
641  case L'U':
642  fc.dwFlags |= FLAG_U;
643  break;
644  case L'W':
645  fc.dwFlags |= FLAG_W;
646  break;
647  case L'0': case L'1': case L'2': case L'3': case L'4':
648  case L'5': case L'6': case L'7': case L'8': case L'9':
649  fc.nnnn = wcstoul(&argv[i][1], &endptr, 10);
650  if (endptr == NULL || *endptr != 0)
651  return InvalidSwitch();
652  fc.dwFlags |= FLAG_nnnn;
653  break;
654  case L'?':
655  fc.dwFlags |= FLAG_HELP;
656  break;
657  default:
658  return InvalidSwitch();
659  }
660  }
661  return WildcardFileCompare(&fc);
662 }
#define FLAG_U
Definition: fc.h:57
static int argc
Definition: ServiceArgs.c:12
FCRET InvalidSwitch(VOID)
Definition: fc.c:76
Definition: fc.h:62
#define FLAG_N
Definition: fc.h:54
#define FLAG_LBn
Definition: fc.h:53
#define iswdigit(_c)
Definition: ctype.h:667
#define FLAG_T
Definition: fc.h:56
uint16_t * PWCHAR
Definition: typedefs.h:56
_Check_return_ unsigned long __cdecl wcstoul(_In_z_ const wchar_t *_Str, _Out_opt_ _Deref_post_z_ wchar_t **_EndPtr, _In_ int _Radix)
#define argv
Definition: mplay32.c:18
int32_t INT
Definition: typedefs.h:58
#define FLAG_nnnn
Definition: fc.h:59
static FCRET WildcardFileCompare(FILECOMPARE *pFC)
Definition: fc.c:541
#define FLAG_A
Definition: fc.h:49
#define FLAG_L
Definition: fc.h:52
PFOR_CONTEXT fc
Definition: for.c:57
static const WCHAR L[]
Definition: oid.c:1250
#define FLAG_OFFLINE
Definition: fc.h:55
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint i
Definition: glfuncs.h:248
#define FLAG_HELP
Definition: fc.h:60
#define FLAG_B
Definition: fc.h:50
#define NULL
Definition: types.h:112
#define ConInitStdStreams()
Definition: fc.c:13
#define towupper(c)
Definition: wctype.h:99
_Check_return_ _CRTIMP int __cdecl _wcsicmp(_In_z_ const wchar_t *_Str1, _In_z_ const wchar_t *_Str2)
#define FLAG_C
Definition: fc.h:51

Referenced by main().