#ifdef COMPILE_FOR_DOS #include #include #include #include #include #include #else #include #include #endif #include #include #include #include #include #define GetFileAttributeError 0xFFFFFFFF #define printval(var, type) printf(#var " = %" #type "\n", var) // macro for debugging #define READ_BUFFER_SIZE (8*1024*sizeof(DWORD)) // 32k blocks #ifdef COMPILE_FOR_DOS #define _strlwr strlwr #define _strdup strdup #define ATTRIBUTE_TYPE unsigned #define FILE_ATTRIBUTE_DIRECTORY _A_SUBDIR #define FILE_ATTRIBUTE_READONLY _A_RDONLY #define FILE_ATTRIBUTE_SYSTEM _A_SYSTEM #define FILE_ATTRIBUTE_HIDDEN _A_HIDDEN #define FILE_ATTRIBUTE_ARCHIVE _A_ARCH #define FILE_ATTRIBUTE_NORMAL _A_NORMAL #define GET_ATTRIBUTES(FileName, Attributes) _dos_getfileattr(FileName, &Attributes) #define GetLastError() errno #define INVALID_HANDLE_VALUE ENOENT #define CloseHandle(file) _dos_close(file) #define DeleteFile(file) unlink(file) #define cFileName name #define dwFileAttributes attrib #else // COMPILE_FOR_NT #define ATTRIBUTE_TYPE DWORD #define GET_ATTRIBUTES(FileName, Attributes) Attributes = GetFileAttributes(FileName) #endif FILE *CheckFile; char CheckFileName[_MAX_PATH]; typedef struct NodeStruct { char *Name; #ifdef COMPILE_FOR_DOS time_t Time; #else FILETIME Time; #endif ATTRIBUTE_TYPE Attributes; struct NodeStruct *Next; DWORD SizeHigh; DWORD SizeLow; char Flag[5]; struct NodeStruct *DiffNode; } *LinkedFileList; /* linked file list */ DWORD ReadBuffer[READ_BUFFER_SIZE/sizeof(DWORD)]; BOOL BinaryCompare (char *file1, char *file2); void CompDir(char *Path1, char *Path2, BOOL Directories); BOOL CompFiles(LinkedFileList File1, LinkedFileList File2, char *Path1, char *Path2); void CompLists(LinkedFileList *AddList, LinkedFileList *DelList, LinkedFileList *DifList, char *Path1, char *Path2, BOOL SameNames, BOOL AppendPath); void CopyNode (char *Destination, LinkedFileList Source, char *FullPathSrc); void CreateFileList(LinkedFileList *list, char *path); void DelNode (char *name); BOOL IsFlag(char *argv); void ParseArgs(int argc, char *argv[]); void PrintFile(LinkedFileList File, char *Path, char *DiffPath); void PrintList(LinkedFileList list); void ProcessAdd(LinkedFileList List, char *String1, char *String2); void ProcessDel(LinkedFileList List, char *String); void ProcessDiff(LinkedFileList List, char *String1, char *String2); void ProcessLists(LinkedFileList AddList, LinkedFileList DelList, LinkedFileList DifList, char *Path1, char *Path2, BOOL AppendPath ); void Usage(void); void AddToList(LinkedFileList Node, LinkedFileList *list); BOOL AnyMatches(char **ExtenList, char *Name, int Length); #ifdef COMPILE_FOR_DOS void CreateNode(LinkedFileList *Node, struct find_t *Buff); BOOL fastcopy( HANDLE hfSrcParm, HANDLE hfDstParm ); BOOL FCopy (char *src, char *dst); #else void CreateNode(LinkedFileList *Node, WIN32_FIND_DATA *Buff); BOOL MakeLink( char *src, char *dst); int NumberOfLinks(char *FileName); #endif BOOL MatchElements(char *Buff, char *Path); void FreeList(LinkedFileList *list); void InsertFront(LinkedFileList Node, LinkedFileList *list); LPSTR MyStrCat(char* firststring, char *secondstring); BOOL Match(char *pat, char* text); void OutOfMem(void); LinkedFileList DeleteFromList(char *Name, LinkedFileList *list); LinkedFileList *FindInList(char *Name, LinkedFileList *List); LinkedFileList RemoveFront(LinkedFileList *list);