/*++ Copyright (c) 1990 Microsoft Corporation Module Name: Support Abstract: Miscelaneous support functions for the XCopy directory copy utility. All functions that are not involved directly in the copy process go here. Author: Ramon Juan San Andres (ramonsa) 02-May-1991 Revision History: --*/ #include "ulib.hxx" #include "system.hxx" #include "xcopy.hxx" VOID XCOPY::DisplayMessageAndExit ( IN MSGID MsgId, IN PWSTRING String, IN ULONG ExitCode ) /*++ Routine Description: Displays a message and exits the program with the supplied error code. We support a maximum of one string parameter for the message. Arguments: MsgId - Supplies the Id of the message to display. String - Supplies a string parameter for the message. ExitCode - Supplies the exit code with which to exit. Return Value: None. Notes: --*/ { // // XCopy first displays the error message (if any) and then // displays the number of files copied. // if ( MsgId != 0 ) { if ( String ) { DisplayMessage( MsgId, ERROR_MESSAGE, "%W", String ); } else { DisplayMessage( MsgId, ERROR_MESSAGE ); } } if ( _DontCopySwitch ) { DisplayMessage( XCOPY_MESSAGE_FILES, NORMAL_MESSAGE, "%d", _FilesCopied ); } else if ( !_StructureOnlySwitch ) { DisplayMessage( XCOPY_MESSAGE_FILES_COPIED, NORMAL_MESSAGE, "%d", _FilesCopied ); } ExitProgram( ExitCode ); } PWSTRING XCOPY::QueryMessageString ( IN MSGID MsgId ) /*++ Routine Description: Obtains a string object initialized to the contents of some message Arguments: MsgId - Supplies ID of the message Return Value: PWSTRING - Pointer to initialized string object Notes: --*/ { PWSTRING String; if ( ((String = NEW DSTRING) == NULL ) || !(SYSTEM::QueryResourceString( String, MsgId, "" )) ) { DisplayMessageAndExit( XCOPY_ERROR_NO_MEMORY, NULL, EXIT_MISC_ERROR ); } return String; } VOID XCOPY::ExitWithError( IN DWORD ErrorCode ) /*++ Routine Description: Displays a message based on a WIN32 error code, and exits. Arguments: ErrorCode - Supplies Windows error code Return Value: none --*/ { MSGID ReadWriteMsgId = 0; switch ( ErrorCode ) { case ERROR_DISK_FULL: ReadWriteMsgId = XCOPY_ERROR_DISK_FULL; break; case ERROR_WRITE_PROTECT: ReadWriteMsgId = XCOPY_ERROR_WRITE_PROTECT; break; case ERROR_ACCESS_DENIED: ReadWriteMsgId = XCOPY_ERROR_ACCESS_DENIED; break; case ERROR_SHARING_VIOLATION: ReadWriteMsgId = XCOPY_ERROR_SHARING_VIOLATION; break; case ERROR_TOO_MANY_OPEN_FILES: ReadWriteMsgId = XCOPY_ERROR_TOO_MANY_OPEN_FILES; break; case ERROR_LOCK_VIOLATION: ReadWriteMsgId = XCOPY_ERROR_LOCK_VIOLATION; break; case ERROR_CANNOT_MAKE: ReadWriteMsgId = XCOPY_ERROR_CANNOT_MAKE; break; default: break; } if ( ReadWriteMsgId != 0 ) { DisplayMessageAndExit( ReadWriteMsgId, NULL, EXIT_READWRITE_ERROR ); } Fatal( EXIT_MISC_ERROR, XCOPY_ERROR_EXTENDED, "%d", ErrorCode ); }