[ros-diffs] [cfinck] 30698: [FORMATTING] - Fix the indentation mess - Fix some typos in comments No code changes

cfinck at svn.reactos.org cfinck at svn.reactos.org
Fri Nov 23 17:21:10 CET 2007


Author: cfinck
Date: Fri Nov 23 19:21:10 2007
New Revision: 30698

URL: http://svn.reactos.org/svn/reactos?rev=30698&view=rev
Log:
[FORMATTING]
- Fix the indentation mess
- Fix some typos in comments

No code changes

Modified:
    trunk/reactos/base/shell/cmd/copy.c

Modified: trunk/reactos/base/shell/cmd/copy.c
URL: http://svn.reactos.org/svn/reactos/trunk/reactos/base/shell/cmd/copy.c?rev=30698&r1=30697&r2=30698&view=diff
==============================================================================
--- trunk/reactos/base/shell/cmd/copy.c (original)
+++ trunk/reactos/base/shell/cmd/copy.c Fri Nov 23 19:21:10 2007
@@ -37,838 +37,817 @@
 
 enum
 {
-	COPY_ASCII       = 0x001,   /* /A  */
-	COPY_DECRYPT     = 0x004,   /* /D  */
-	COPY_VERIFY      = 0x008,   /* /V  : Dummy, Never will be Impleneted */
-	COPY_SHORTNAME   = 0x010,   /* /N  : Dummy, Never will be Impleneted */
-	COPY_NO_PROMPT   = 0x020,   /* /Y  */
-	COPY_PROMPT      = 0x040,   /* /-Y */
-	COPY_RESTART     = 0x080,   /* /Z  */
-	COPY_BINARY      = 0x100,   /* /B  */
+    COPY_ASCII       = 0x001,   /* /A  */
+    COPY_DECRYPT     = 0x004,   /* /D  */
+    COPY_VERIFY      = 0x008,   /* /V  : Dummy, Never will be Impleneted */
+    COPY_SHORTNAME   = 0x010,   /* /N  : Dummy, Never will be Impleneted */
+    COPY_NO_PROMPT   = 0x020,   /* /Y  */
+    COPY_PROMPT      = 0x040,   /* /-Y */
+    COPY_RESTART     = 0x080,   /* /Z  */
+    COPY_BINARY      = 0x100,   /* /B  */
 };
 
 INT
 copy (TCHAR source[MAX_PATH],
-	  TCHAR dest[MAX_PATH],
-	  INT append,
-	  DWORD lpdwFlags,
-	  BOOL bTouch)
+      TCHAR dest[MAX_PATH],
+      INT append,
+      DWORD lpdwFlags,
+      BOOL bTouch)
 {
-	TCHAR szMsg[RC_STRING_MAX_SIZE];
-	FILETIME srctime,NewFileTime;
-	HANDLE hFileSrc;
-	HANDLE hFileDest;
-	LPBYTE buffer;
-	DWORD  dwAttrib;
-	DWORD  dwRead;
-	DWORD  dwWritten;
-	BOOL   bEof = FALSE;
-	TCHAR TrueDest[MAX_PATH];
-	TCHAR TempSrc[MAX_PATH];
-	TCHAR * FileName;
-	SYSTEMTIME CurrentTime;
-
-	/* Check Breaker */
-	if(CheckCtrlBreak(BREAK_INPUT))
-		return 0;
-
-#ifdef _DEBUG
-	DebugPrintf (_T("checking mode\n"));
-#endif
-
-	if(bTouch)
-	{
-	hFileSrc = CreateFile (source, GENERIC_WRITE, FILE_SHARE_READ,
-		NULL, OPEN_EXISTING, 0, NULL);
-	if (hFileSrc == INVALID_HANDLE_VALUE)
-	{
-		LoadString(CMD_ModuleHandle, STRING_COPY_ERROR1, szMsg, RC_STRING_MAX_SIZE);
-		ConOutPrintf(szMsg, source);
+    TCHAR szMsg[RC_STRING_MAX_SIZE];
+    FILETIME srctime,NewFileTime;
+    HANDLE hFileSrc;
+    HANDLE hFileDest;
+    LPBYTE buffer;
+    DWORD  dwAttrib;
+    DWORD  dwRead;
+    DWORD  dwWritten;
+    BOOL   bEof = FALSE;
+    TCHAR TrueDest[MAX_PATH];
+    TCHAR TempSrc[MAX_PATH];
+    TCHAR * FileName;
+    SYSTEMTIME CurrentTime;
+
+    /* Check Breaker */
+    if(CheckCtrlBreak(BREAK_INPUT))
+        return 0;
+
+#ifdef _DEBUG
+    DebugPrintf (_T("checking mode\n"));
+#endif
+
+    if(bTouch)
+    {
+        hFileSrc = CreateFile (source, GENERIC_WRITE, FILE_SHARE_READ,
+            NULL, OPEN_EXISTING, 0, NULL);
+        if (hFileSrc == INVALID_HANDLE_VALUE)
+        {
+            LoadString(CMD_ModuleHandle, STRING_COPY_ERROR1, szMsg, RC_STRING_MAX_SIZE);
+            ConOutPrintf(szMsg, source);
+            nErrorLevel = 1;
+            return 0;
+        }
+
+        GetSystemTime(&CurrentTime);
+        SystemTimeToFileTime(&CurrentTime, &NewFileTime);
+        if(SetFileTime(hFileSrc,(LPFILETIME) NULL, (LPFILETIME) NULL, &NewFileTime))
+        {
+            CloseHandle(hFileSrc);
+            nErrorLevel = 1;
+            return 1;
+
+        }
+        else
+        {
+            CloseHandle(hFileSrc);
+            return 0;
+        }
+    }
+
+    dwAttrib = GetFileAttributes (source);
+
+    hFileSrc = CreateFile (source, GENERIC_READ, FILE_SHARE_READ,
+        NULL, OPEN_EXISTING, 0, NULL);
+    if (hFileSrc == INVALID_HANDLE_VALUE)
+    {
+        LoadString(CMD_ModuleHandle, STRING_COPY_ERROR1, szMsg, RC_STRING_MAX_SIZE);
+        ConOutPrintf(szMsg, source);
         nErrorLevel = 1;
-		return 0;
-	}
-
-		GetSystemTime(&CurrentTime);
-		SystemTimeToFileTime(&CurrentTime, &NewFileTime);
-		if(SetFileTime(hFileSrc,(LPFILETIME) NULL, (LPFILETIME) NULL, &NewFileTime))
-		{
-			CloseHandle(hFileSrc);
-			nErrorLevel = 1;
-			return 1;
-
-		}
-		else
-		{
-			CloseHandle(hFileSrc);
-			return 0;
-		}
-	}
-
-	dwAttrib = GetFileAttributes (source);
-
-	hFileSrc = CreateFile (source, GENERIC_READ, FILE_SHARE_READ,
-		NULL, OPEN_EXISTING, 0, NULL);
-	if (hFileSrc == INVALID_HANDLE_VALUE)
-	{
-		LoadString(CMD_ModuleHandle, STRING_COPY_ERROR1, szMsg, RC_STRING_MAX_SIZE);
-		ConOutPrintf(szMsg, source);
+        return 0;
+    }
+
+#ifdef _DEBUG
+    DebugPrintf (_T("getting time\n"));
+#endif
+
+    GetFileTime (hFileSrc, &srctime, NULL, NULL);
+
+#ifdef _DEBUG
+    DebugPrintf (_T("copy: flags has %s\n"),
+        lpdwFlags & COPY_ASCII ? "ASCII" : "BINARY");
+#endif
+
+    /* Check to see if /D or /Z are true, if so we need a middle
+       man to copy the file too to allow us to use CopyFileEx later */
+    if(lpdwFlags & COPY_DECRYPT)
+    {
+        GetEnvironmentVariable(_T("TEMP"),TempSrc,MAX_PATH);
+        _tcscat(TempSrc,_T("\\"));
+        FileName = _tcsrchr(source,_T('\\'));
+        FileName++;
+        _tcscat(TempSrc,FileName);
+        /* This is needed to be on the end to prevent an error
+           if the user did "copy /D /Z foo bar then it would be copied
+           too %TEMP%\foo here and when %TEMP%\foo when it sets it up
+           for COPY_RESTART, this would mean it is copying to itself
+           which would error when it tried to open the handles for ReadFile
+           and WriteFile */
+        _tcscat(TempSrc,_T(".decrypt"));
+        if(!CopyFileEx(source, TempSrc, NULL, NULL, FALSE, COPY_FILE_ALLOW_DECRYPTED_DESTINATION))
+        {
+            nErrorLevel = 1;
+            return 0;
+        }
+        _tcscpy(source, TempSrc);
+    }
+
+
+    if(lpdwFlags & COPY_RESTART)
+    {
+        _tcscpy(TrueDest, dest);
+        GetEnvironmentVariable(_T("TEMP"),dest,MAX_PATH);
+        _tcscat(dest,_T("\\"));
+        FileName = _tcsrchr(TrueDest,_T('\\'));
+        FileName++;
+        _tcscat(dest,FileName);
+    }
+
+
+    if (!IsExistingFile (dest))
+    {
+#ifdef _DEBUG
+        DebugPrintf (_T("opening/creating\n"));
+#endif
+        hFileDest =
+            CreateFile (dest, GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, 0, NULL);
+    }
+    else if (!append)
+    {
+#ifdef _DEBUG
+        DebugPrintf (_T("SetFileAttributes (%s, FILE_ATTRIBUTE_NORMAL);\n"), dest);
+#endif
+        SetFileAttributes (dest, FILE_ATTRIBUTE_NORMAL);
+
+#ifdef _DEBUG
+        DebugPrintf (_T("DeleteFile (%s);\n"), dest);
+#endif
+        DeleteFile (dest);
+
+        hFileDest =	CreateFile (dest, GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, 0, NULL);
+    }
+    else
+    {
+        LONG lFilePosHigh = 0;
+
+        if (!_tcscmp (dest, source))
+        {
+            CloseHandle (hFileSrc);
+            return 0;
+        }
+
+#ifdef _DEBUG
+        DebugPrintf (_T("opening/appending\n"));
+#endif
+        SetFileAttributes (dest, FILE_ATTRIBUTE_NORMAL);
+
+        hFileDest =
+            CreateFile (dest, GENERIC_WRITE, 0, NULL, OPEN_EXISTING, 0, NULL);
+
+        /* Move to end of file to start writing */
+        SetFilePointer (hFileDest, 0, &lFilePosHigh,FILE_END);
+    }
+
+
+    if (hFileDest == INVALID_HANDLE_VALUE)
+    {
+        CloseHandle (hFileSrc);
+        ConOutResPuts(STRING_ERROR_PATH_NOT_FOUND);
         nErrorLevel = 1;
-		return 0;
-	}
-
-#ifdef _DEBUG
-	DebugPrintf (_T("getting time\n"));
-#endif
-
-	GetFileTime (hFileSrc, &srctime, NULL, NULL);
-
-#ifdef _DEBUG
-	DebugPrintf (_T("copy: flags has %s\n"),
-		lpdwFlags & COPY_ASCII ? "ASCII" : "BINARY");
-#endif
-
-	/* Check to see if /D or /Z are true, if so we need a middle
-	   man to copy the file too to allow us to use CopyFileEx later */
-	if(lpdwFlags & COPY_DECRYPT)
-	{
-		GetEnvironmentVariable(_T("TEMP"),TempSrc,MAX_PATH);
-		_tcscat(TempSrc,_T("\\"));
-		FileName = _tcsrchr(source,_T('\\'));
-		FileName++;
-		_tcscat(TempSrc,FileName);
-		/* This is needed to be on the end to prevent an error
-		   if the user did "copy /D /Z foo bar then it would be copied
-		   too %TEMP%\foo here and when %TEMP%\foo when it sets it up
-		   for COPY_RESTART, this would mean it is copying to itself
-		   which would error when it tried to open the handles for ReadFile
-		   and WriteFile */
-		_tcscat(TempSrc,_T(".decrypt"));
-		if(!CopyFileEx(source, TempSrc, NULL, NULL, FALSE, COPY_FILE_ALLOW_DECRYPTED_DESTINATION))
-		{
-		   nErrorLevel = 1;
-		   return 0;
-		}
-		_tcscpy(source, TempSrc);
-	}
-
-
-	if(lpdwFlags & COPY_RESTART)
-	{
-		_tcscpy(TrueDest, dest);
-		GetEnvironmentVariable(_T("TEMP"),dest,MAX_PATH);
-		_tcscat(dest,_T("\\"));
-		FileName = _tcsrchr(TrueDest,_T('\\'));
-		FileName++;
-		_tcscat(dest,FileName);
-	}
-
-
-	if (!IsExistingFile (dest))
-	{
-#ifdef _DEBUG
-		DebugPrintf (_T("opening/creating\n"));
-#endif
-		hFileDest =
-			CreateFile (dest, GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, 0, NULL);
-	}
-	else if (!append)
-	{
-#ifdef _DEBUG
-		DebugPrintf (_T("SetFileAttributes (%s, FILE_ATTRIBUTE_NORMAL);\n"), dest);
-#endif
-		SetFileAttributes (dest, FILE_ATTRIBUTE_NORMAL);
-
-#ifdef _DEBUG
-		DebugPrintf (_T("DeleteFile (%s);\n"), dest);
-#endif
-		DeleteFile (dest);
-
-		hFileDest =	CreateFile (dest, GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, 0, NULL);
-	}
-	else
-	{
-		LONG lFilePosHigh = 0;
-
-		if (!_tcscmp (dest, source))
-		{
-			CloseHandle (hFileSrc);
-			return 0;
-		}
-
-#ifdef _DEBUG
-		DebugPrintf (_T("opening/appending\n"));
-#endif
-		SetFileAttributes (dest, FILE_ATTRIBUTE_NORMAL);
-
-		hFileDest =
-			CreateFile (dest, GENERIC_WRITE, 0, NULL, OPEN_EXISTING, 0, NULL);
-
-		/* Move to end of file to start writing */
-		SetFilePointer (hFileDest, 0, &lFilePosHigh,FILE_END);
-	}
-
-
-		if (hFileDest == INVALID_HANDLE_VALUE)
-	{
-		CloseHandle (hFileSrc);
-		ConOutResPuts(STRING_ERROR_PATH_NOT_FOUND);
+        return 0;
+    }
+
+    /* A page-aligned buffer usually give more speed */
+    buffer = (LPBYTE)VirtualAlloc(NULL, BUFF_SIZE, MEM_COMMIT, PAGE_READWRITE);
+    if (buffer == NULL)
+    {
+        CloseHandle (hFileDest);
+        CloseHandle (hFileSrc);
+        ConOutResPuts(STRING_ERROR_OUT_OF_MEMORY);
         nErrorLevel = 1;
-		return 0;
-	}
-
-	/* A page-aligned buffer usually give more speed */
-	buffer = (LPBYTE)VirtualAlloc(NULL, BUFF_SIZE, MEM_COMMIT, PAGE_READWRITE);
-	if (buffer == NULL)
-	{
-		CloseHandle (hFileDest);
-		CloseHandle (hFileSrc);
-		ConOutResPuts(STRING_ERROR_OUT_OF_MEMORY);
-        nErrorLevel = 1;
-		return 0;
-	}
-
-	do
-	{
-
-		ReadFile (hFileSrc, buffer, BUFF_SIZE, &dwRead, NULL);
-		if (lpdwFlags & COPY_ASCII)
-		{
-			LPBYTE pEof = memchr(buffer, 0x1A, dwRead);
-			if (pEof != NULL)
-			{
-				bEof = TRUE;
-				dwRead = pEof-buffer+1;
-				break;
-			}
-		}
-
-		if (dwRead == 0)
-			break;
-
-		WriteFile (hFileDest, buffer, dwRead, &dwWritten, NULL);
-		if (dwWritten != dwRead || CheckCtrlBreak(BREAK_INPUT))
-		{
-			ConOutResPuts(STRING_COPY_ERROR3);
-
-			cmd_free (buffer);
-			CloseHandle (hFileDest);
-			CloseHandle (hFileSrc);
-			nErrorLevel = 1;
-			return 0;
-		}
-	}
-	while (!bEof);
-
-#ifdef _DEBUG
-	DebugPrintf (_T("setting time\n"));
-#endif
-	SetFileTime (hFileDest, &srctime, NULL, NULL);
-
-	if ((lpdwFlags & COPY_ASCII) && !bEof)
-	{
-		/* we're dealing with ASCII files! */
-		buffer[0] = 0x1A;
-#ifdef _DEBUG
-		DebugPrintf (_T("appending ^Z\n"));
-#endif
-		WriteFile (hFileDest, buffer, sizeof(CHAR), &dwWritten, NULL);
-	}
-
-	VirtualFree (buffer, 0, MEM_RELEASE);
-	CloseHandle (hFileDest);
-	CloseHandle (hFileSrc);
-
-#ifdef _DEBUG
-	DebugPrintf (_T("setting mode\n"));
-#endif
-	SetFileAttributes (dest, dwAttrib);
-
-	/* Now finish off the copy if needed with CopyFileEx */
-	if(lpdwFlags & COPY_RESTART)
-	{
-		if(!CopyFileEx(dest, TrueDest, NULL, NULL, FALSE, COPY_FILE_RESTARTABLE))
-		{
-		   nErrorLevel = 1;
-		   DeleteFile(dest);
-           return 0;
-		}
-		/* Take care of file in the temp folder */
-		DeleteFile(dest);
-
-	}
-
-	if(lpdwFlags & COPY_DECRYPT)
-	   DeleteFile(TempSrc);
-
-	return 1;
+        return 0;
+    }
+
+    do
+    {
+        ReadFile (hFileSrc, buffer, BUFF_SIZE, &dwRead, NULL);
+        if (lpdwFlags & COPY_ASCII)
+        {
+            LPBYTE pEof = memchr(buffer, 0x1A, dwRead);
+            if (pEof != NULL)
+            {
+                bEof = TRUE;
+                dwRead = pEof-buffer+1;
+                break;
+            }
+        }
+
+        if (dwRead == 0)
+            break;
+
+        WriteFile (hFileDest, buffer, dwRead, &dwWritten, NULL);
+        if (dwWritten != dwRead || CheckCtrlBreak(BREAK_INPUT))
+        {
+            ConOutResPuts(STRING_COPY_ERROR3);
+
+            cmd_free (buffer);
+            CloseHandle (hFileDest);
+            CloseHandle (hFileSrc);
+            nErrorLevel = 1;
+            return 0;
+        }
+    }
+    while (!bEof);
+
+#ifdef _DEBUG
+    DebugPrintf (_T("setting time\n"));
+#endif
+    SetFileTime (hFileDest, &srctime, NULL, NULL);
+
+    if ((lpdwFlags & COPY_ASCII) && !bEof)
+    {
+        /* we're dealing with ASCII files! */
+        buffer[0] = 0x1A;
+#ifdef _DEBUG
+        DebugPrintf (_T("appending ^Z\n"));
+#endif
+        WriteFile (hFileDest, buffer, sizeof(CHAR), &dwWritten, NULL);
+    }
+
+    VirtualFree (buffer, 0, MEM_RELEASE);
+    CloseHandle (hFileDest);
+    CloseHandle (hFileSrc);
+
+#ifdef _DEBUG
+    DebugPrintf (_T("setting mode\n"));
+#endif
+    SetFileAttributes (dest, dwAttrib);
+
+    /* Now finish off the copy if needed with CopyFileEx */
+    if(lpdwFlags & COPY_RESTART)
+    {
+        if(!CopyFileEx(dest, TrueDest, NULL, NULL, FALSE, COPY_FILE_RESTARTABLE))
+        {
+            nErrorLevel = 1;
+            DeleteFile(dest);
+            return 0;
+        }
+        /* Take care of file in the temp folder */
+        DeleteFile(dest);
+
+    }
+
+    if(lpdwFlags & COPY_DECRYPT)
+        DeleteFile(TempSrc);
+
+    return 1;
 }
 
 
 static INT CopyOverwrite (LPTSTR fn)
 {
-	/*ask the user if they want to override*/
-	TCHAR szMsg[RC_STRING_MAX_SIZE];
-	INT res;
-	LoadString(CMD_ModuleHandle, STRING_COPY_HELP1, szMsg, RC_STRING_MAX_SIZE);
-	ConOutPrintf(szMsg,fn);
-	res = FilePromptYNA (_T(""));
-	return res;
+    /*ask the user if they want to override*/
+    TCHAR szMsg[RC_STRING_MAX_SIZE];
+    INT res;
+    LoadString(CMD_ModuleHandle, STRING_COPY_HELP1, szMsg, RC_STRING_MAX_SIZE);
+    ConOutPrintf(szMsg,fn);
+    res = FilePromptYNA (_T(""));
+    return res;
 }
 
 
 INT cmd_copy (LPTSTR cmd, LPTSTR param)
 {
-	TCHAR szMsg[RC_STRING_MAX_SIZE];
-	LPTSTR *arg;
-	INT argc, i, nFiles, nOverwrite = 0, nSrc = -1, nDes = -1;
-	/* this is the path up to the folder of the src and dest ie C:\windows\ */
-	TCHAR szDestPath[MAX_PATH];
-	TCHAR szSrcPath[MAX_PATH];
-	DWORD dwFlags = 0;
-	/* If this is the type of copy where we are adding files */
-	BOOL bAppend = FALSE;
-	WIN32_FIND_DATA findBuffer;
-	HANDLE hFile;
-	BOOL bTouch = FALSE;
-	/* Used when something like "copy c*.exe d*.exe" during the process of
-	   figuring out the new name */
-	TCHAR tmpName[MAX_PATH] = _T("");
-	/* Pointer to keep track of how far through the append input(file1+file2+file3) we are */
-	TCHAR  * appendPointer = _T("\0");
-	/* The full path to src and dest.  This has drive letter, folders, and filename */
-	TCHAR tmpDestPath[MAX_PATH];
-	TCHAR tmpSrcPath[MAX_PATH];
-	/* A bool on weather or not the destination name will be taking from the input */
-	BOOL bSrcName = FALSE;
-	/* Seems like a waste but it is a pointer used to copy from input to PreserveName */
-	TCHAR * UseThisName;
-	/* Stores the name( i.e. blah.txt or blah*.txt) which later we might need */
-	TCHAR PreserveName[MAX_PATH];
-   /* for CMDCOPY env */
-   TCHAR *evar;
-   int size;
-	TCHAR * szTouch;
-	BOOL bDone = FALSE;
-
-
-  /*Show help/usage info*/
-	if (!_tcsncmp (param, _T("/?"), 2))
-	{
-		ConOutResPaging(TRUE, STRING_COPY_HELP2);
-		return 0;
-	}
-
-  nErrorLevel = 0;
-
-  /* Get the envor value if it exists */
-  evar = cmd_alloc(512 * sizeof(TCHAR));
-  if (evar==NULL) size = 0;
-  else
-  {
-   size = GetEnvironmentVariable (_T("COPYCMD"), evar, 512);
-  }
-  if (size > 512)
-  {
-    evar = cmd_realloc(evar,size * sizeof(TCHAR) );
-    if (evar!=NULL)
-    {
-      size = GetEnvironmentVariable (_T("COPYCMD"), evar, size);
-      }
+    TCHAR szMsg[RC_STRING_MAX_SIZE];
+    LPTSTR *arg;
+    INT argc, i, nFiles, nOverwrite = 0, nSrc = -1, nDes = -1;
+    /* this is the path up to the folder of the src and dest ie C:\windows\ */
+    TCHAR szDestPath[MAX_PATH];
+    TCHAR szSrcPath[MAX_PATH];
+    DWORD dwFlags = 0;
+    /* If this is the type of copy where we are adding files */
+    BOOL bAppend = FALSE;
+    WIN32_FIND_DATA findBuffer;
+    HANDLE hFile;
+    BOOL bTouch = FALSE;
+    /* Used when something like "copy c*.exe d*.exe" during the process of
+       figuring out the new name */
+    TCHAR tmpName[MAX_PATH] = _T("");
+    /* Pointer to keep track of how far through the append input(file1+file2+file3) we are */
+    TCHAR  * appendPointer = _T("\0");
+    /* The full path to src and dest.  This has drive letter, folders, and filename */
+    TCHAR tmpDestPath[MAX_PATH];
+    TCHAR tmpSrcPath[MAX_PATH];
+    /* A bool on weather or not the destination name will be taking from the input */
+    BOOL bSrcName = FALSE;
+    /* Seems like a waste but it is a pointer used to copy from input to PreserveName */
+    TCHAR * UseThisName;
+    /* Stores the name( i.e. blah.txt or blah*.txt) which later we might need */
+    TCHAR PreserveName[MAX_PATH];
+    /* for CMDCOPY env */
+    TCHAR *evar;
+    int size;
+    TCHAR * szTouch;
+    BOOL bDone = FALSE;
+
+
+    /* Show help/usage info */
+    if (!_tcsncmp (param, _T("/?"), 2))
+    {
+        ConOutResPaging(TRUE, STRING_COPY_HELP2);
+        return 0;
+    }
+
+    nErrorLevel = 0;
+
+    /* Get the envor value if it exists */
+    evar = cmd_alloc(512 * sizeof(TCHAR));
+    if (evar == NULL)
+        size = 0;
     else
-    {
-      size=0;
-    }
-  }
-
-  /* check see if we did get any env variable */
-  if (size !=0)
-  {
-    int t=0;
-    /* scan and set the flags */
-    for (t=0;t<size;t++)
-    {
-      if (_tcsncicmp(_T("/A"),&evar[t],2)==0)
-      {
-        dwFlags |=COPY_ASCII;
-        t++;
-      }
-
-      else if (_tcsncicmp(_T("/B"),&evar[t],2)==0)
-      {
-        dwFlags |= COPY_BINARY;
-        t++;
-      }
-      else if (_tcsncicmp(_T("/D"),&evar[t],2)==0)
-      {
-        dwFlags |= COPY_DECRYPT;
-        t++;
-      }
-
-			else if (_tcsncicmp(_T("/V"),&evar[t],2)==0)
-      {
-        dwFlags |= COPY_VERIFY;
-        t++;
-      }
-
-			else if (_tcsncicmp(_T("/N"),&evar[t],2)==0)
-      {
-        dwFlags |= COPY_SHORTNAME;
-        t++;
-      }
-
-      else if (_tcsncicmp(_T("/Y"),&evar[t],2)==0)
-      {
+        size = GetEnvironmentVariable (_T("COPYCMD"), evar, 512);
+
+    if (size > 512)
+    {
+        evar = cmd_realloc(evar,size * sizeof(TCHAR) );
+        if (evar!=NULL)
+            size = GetEnvironmentVariable (_T("COPYCMD"), evar, size);
+        else
+            size=0;
+    }
+
+    /* check see if we did get any env variable */
+    if (size !=0)
+    {
+        int t=0;
+        /* scan and set the flags */
+        for (t=0;t<size;t++)
+        {
+            if (_tcsncicmp(_T("/A"),&evar[t],2) == 0)
+            {
+                dwFlags |=COPY_ASCII;
+                t++;
+            }
+            else if (_tcsncicmp(_T("/B"),&evar[t],2) == 0)
+            {
+                dwFlags |= COPY_BINARY;
+                t++;
+            }
+            else if (_tcsncicmp(_T("/D"),&evar[t],2) == 0)
+            {
+                dwFlags |= COPY_DECRYPT;
+                t++;
+            }
+            else if (_tcsncicmp(_T("/V"),&evar[t],2) == 0)
+            {
+                dwFlags |= COPY_VERIFY;
+                t++;
+            }
+            else if (_tcsncicmp(_T("/N"),&evar[t],2) == 0)
+            {
+                dwFlags |= COPY_SHORTNAME;
+                t++;
+            }
+            else if (_tcsncicmp(_T("/Y"),&evar[t],2) == 0)
+            {
+                dwFlags |= COPY_NO_PROMPT;
+                t++;
+            }
+            else if (_tcsncicmp(_T("/-Y"),&evar[t],3) == 0)
+            {
+                dwFlags |= COPY_PROMPT;
+                t+=2;
+            }
+            else if (_tcsncicmp(_T("/Z"),&evar[t],2) == 0)
+            {
+                dwFlags |= COPY_PROMPT;
+                t++;
+            }
+        }
+    }
+    cmd_free(evar);
+
+
+    /* Split the user input into array */
+    arg = split (param, &argc, FALSE);
+    nFiles = argc;
+
+
+    /* Read switches and count files */
+    for (i = 0; i < argc; i++)
+    {
+        if (*arg[i] == _T('/'))
+        {
+            if (_tcslen(arg[i]) >= 2)
+            {
+                switch (_totupper(arg[i][1]))
+                {
+                    case _T('A'):
+                        dwFlags |= COPY_ASCII;
+                        break;
+
+                    case _T('B'):
+                        dwFlags |= COPY_BINARY;
+                        break;
+
+                    case _T('D'):
+                        dwFlags |= COPY_DECRYPT;
+                        break;
+
+                    case _T('V'):
+                        dwFlags |= COPY_VERIFY;
+                        break;
+
+                    case _T('N'):
+                        dwFlags |= COPY_SHORTNAME;
+                        break;
+
+                    case _T('Y'):
+                        dwFlags |= COPY_NO_PROMPT;
+                        dwFlags &= ~COPY_PROMPT;
+                        break;
+
+                    case _T('-'):
+                        if(_tcslen(arg[i]) >= 3)
+                            if(_totupper(arg[i][2]) == _T('Y'))
+                            {
+                                dwFlags &= ~COPY_NO_PROMPT;
+                                dwFlags |= COPY_PROMPT;
+                            }
+
+                            break;
+
+                    case _T('Z'):
+                        dwFlags |= COPY_RESTART;
+                        break;
+
+                    default:
+                        /* Invalid switch */
+                        LoadString(CMD_ModuleHandle, STRING_ERROR_INVALID_SWITCH, szMsg, RC_STRING_MAX_SIZE);
+                        ConOutPrintf(szMsg, _totupper(arg[i][1]));
+                        nErrorLevel = 1;
+                        return 1;
+                        break;
+                }
+            }
+            /* If it was a switch, subtract from total arguments */
+            nFiles--;
+        }
+        else
+        {
+            /* If it isn't a switch then it is the source or destination */
+            if(nSrc == -1)
+            {
+                nSrc = i;
+            }
+            else if(*arg[i] == _T('+') || *arg[i] == _T(','))
+            {
+                /* Add these onto the source string
+                   this way we can do all checks
+                    directly on source string later on */
+                _tcscat(arg[nSrc],arg[i]);
+                nFiles--;
+            }
+            else if(nDes == -1)
+            {
+                nDes = i;
+            }
+        }
+    }
+
+    /* keep quiet within batch files */
+    if (bc != NULL)
+        {
         dwFlags |= COPY_NO_PROMPT;
-        t++;
-      }
-
-      else if (_tcsncicmp(_T("/-Y"),&evar[t],3)==0)
-      {
-        dwFlags |= COPY_PROMPT;
-        t+=2;
-      }
-
-      else if (_tcsncicmp(_T("/Z"),&evar[t],2)==0)
-      {
-        dwFlags |= COPY_PROMPT;
-        t++;
-      }
-    }
-  }
-  cmd_free(evar);
-
-
-  /*Split the user input into array*/
-	arg = split (param, &argc, FALSE);
-	nFiles = argc;
-
-
-	/*Read switches and count files*/
-	for (i = 0; i < argc; i++)
-	{
-		if (*arg[i] == _T('/'))
-		{
-			if (_tcslen(arg[i]) >= 2)
-			{
-				switch (_totupper(arg[i][1]))
-				{
-
-				case _T('A'):
-					dwFlags |= COPY_ASCII;
-					break;
-
-				case _T('B'):
-					dwFlags |= COPY_BINARY;
-					break;
-
-				case _T('D'):
-					dwFlags |= COPY_DECRYPT;
-					break;
-
-				case _T('V'):
-					dwFlags |= COPY_VERIFY;
-					break;
-
-				case _T('N'):
-					dwFlags |= COPY_SHORTNAME;
-					break;
-
-				case _T('Y'):
-					dwFlags |= COPY_NO_PROMPT;
-					dwFlags &= ~COPY_PROMPT;
-					break;
-
-				case _T('-'):
-					if(_tcslen(arg[i]) >= 3)
-						if(_totupper(arg[i][2]) == _T('Y'))
-						{
-							dwFlags &= ~COPY_NO_PROMPT;
-							dwFlags |= COPY_PROMPT;
-						}
-
-						break;
-
-				case _T('Z'):
-					dwFlags |= COPY_RESTART;
-					break;
-
-				default:
-					/* invaild switch */
-                    LoadString(CMD_ModuleHandle, STRING_ERROR_INVALID_SWITCH, szMsg, RC_STRING_MAX_SIZE);
-	                ConOutPrintf(szMsg, _totupper(arg[i][1]));
-					nErrorLevel = 1;
-					return 1;
-					break;
-				}
-			}
-			/*If it was a switch, subtract from total arguments*/
-			nFiles--;
-		}
-		else
-		{
-			/*if it isnt a switch then it is the source or destination*/
-			if(nSrc == -1)
-			{
-				nSrc = i;
-			}
-			else if(*arg[i] == _T('+') || *arg[i] == _T(','))
-			{
-				/* Add these onto the source string
-				   this way we can do all checks
-					directly on source string later on */
-				_tcscat(arg[nSrc],arg[i]);
-				nFiles--;
-			}
-			else if(nDes == -1)
-			{
-				nDes = i;
-			}
-
-		}
-	}
-
-	/* keep quiet within batch files */
-	if (bc != NULL)
-        {
-		dwFlags |= COPY_NO_PROMPT;
-		dwFlags &= ~COPY_PROMPT;
-        }
-
-	if(nFiles < 1)
-	{
-		/* There is not enough files, there has to be at least 1 */
-		ConOutResPuts(STRING_ERROR_REQ_PARAM_MISSING);
-		freep (arg);
-		return 1;
-	}
-
-	if(nFiles > 2)
-	{
-		/* there is too many file names in command */
+        dwFlags &= ~COPY_PROMPT;
+        }
+
+    if(nFiles < 1)
+    {
+        /* There are not enough files, there has to be at least 1 */
+        ConOutResPuts(STRING_ERROR_REQ_PARAM_MISSING);
+        freep (arg);
+        return 1;
+    }
+
+    if(nFiles > 2)
+    {
+        /* There are too many file names in command */
         LoadString(CMD_ModuleHandle, STRING_ERROR_TOO_MANY_PARAMETERS, szMsg, RC_STRING_MAX_SIZE);
-	    ConErrPrintf(szMsg,_T(""));
+        ConErrPrintf(szMsg,_T(""));
         nErrorLevel = 1;
-		freep (arg);
-		return 1;
-	}
-
-	if(((_tcschr (arg[nSrc], _T('+')) != NULL) ||
-		(_tcschr (arg[nSrc], _T('*')) != NULL && _tcschr (arg[nDes], _T('*')) == NULL) ||
-		(IsExistingDirectory (arg[nSrc]) && (_tcschr (arg[nDes], _T('*')) == NULL && !IsExistingDirectory (arg[nDes])))
-		))
-	{
-		/* There is a + in the source filename, this means
-		that there is more then one file being put into
-		one file. */
-		bAppend = TRUE;
-		if(_tcschr (arg[nSrc], _T('+')) != NULL)
-		   appendPointer = arg[nSrc];
-	}
-
-	/* Reusing the number of files variable */
-	nFiles = 0;
-
-	do
-	{
-	/* Set up the string that is the path to the destination */
-	if(nDes != -1)
-	{
-		if(_tcslen(arg[nDes]) == 2 && arg[nDes][1] == _T(':'))
-		{
-			GetRootPath(arg[nDes],szDestPath,MAX_PATH);
-		}
-		else
-		/* If the user entered two file names then form the full string path*/
-		GetFullPathName (arg[nDes], MAX_PATH, szDestPath, NULL);
-
-	}
-	else
-	{
-		/* If no destination was entered then just use
-		the current directory as the destination */
-		GetCurrentDirectory (MAX_PATH, szDestPath);
-	}
-
-
-	/* Get the full string of the path to the source file*/
-	if(_tcschr (arg[nSrc], _T('+')) != NULL)
-	{
-		_tcscpy(tmpName,_T("\0"));
-		/* Loop through the source file name and copy all
-		the chars one at a time until it gets too + */
-		while(TRUE)
-		{
-			if(!_tcsncmp (appendPointer,_T("+"),1) || !_tcsncmp (appendPointer,_T("\0"),1))
-			{
-				/* Now that the pointer is on the + we
-				   need to go to the start of the next filename */
-				if(!_tcsncmp (appendPointer,_T("+"),1))
-				   appendPointer++;
-				else
-					bDone = TRUE;
-				break;
-
-			}
-
-			_tcsncat(tmpName,appendPointer,1);
-			appendPointer++;
-
-		}
-		/* Finish the string off with a null char */
-		_tcsncat(tmpName,_T("\0"),1);
-
-		if(_tcschr (arg[nSrc], _T(',')) != NULL)
-			{
-				/* Only time there is a , in the source is when they are using touch
-				   Cant have a destination and can only have on ,, at the end of the string
-					Cant have more then one file name */
-				szTouch = _tcsstr (arg[nSrc], _T("+"));
-				if(_tcsncmp (szTouch,_T("+,,\0"),4) || nDes != -1)
-				{
-					LoadString(CMD_ModuleHandle, STRING_ERROR_INVALID_PARAM_FORMAT, szMsg, RC_STRING_MAX_SIZE);
-					ConErrPrintf(szMsg,arg[nSrc]);
-					nErrorLevel = 1;
-					freep (arg);
-					return 1;
-				}
-				bTouch = TRUE;
-				bDone = TRUE;
-			}
-
-		if(_tcslen(tmpName) == 2)
-		{
-			if(tmpName[1] == _T(':'))
-			{
-
-				GetRootPath(tmpName,szSrcPath,MAX_PATH);
-			}
-		}
-		else
-		/* Get the full path to first file in the string of file names */
-		GetFullPathName (tmpName, MAX_PATH, szSrcPath, NULL);
-	}
-	else
-	{
-		bDone = TRUE;
-		if(_tcslen(arg[nSrc]) == 2 && arg[nSrc][1] == _T(':'))
-		{
-			GetRootPath(arg[nSrc],szSrcPath,MAX_PATH);
-		}
-		else
-		/* Get the full path of the source file */
-		GetFullPathName (arg[nSrc], MAX_PATH, szSrcPath, NULL);
-
-	}
-
-	/* From this point on, we can assume that the shortest path is 3 letters long
-	and that would be [DriveLetter]:\ */
-
-	/* If there is no * in the path name and it is a folder
-	then we will need to add a wildcard to the pathname
-	so FindFirstFile comes up with all the files in that
-	folder */
-	if(_tcschr (szSrcPath, _T('*')) == NULL &&
-		IsExistingDirectory (szSrcPath))
-	{
-		/* If it doesnt have a \ at the end already then on needs to be added */
-		if(szSrcPath[_tcslen(szSrcPath) -  1] != _T('\\'))
-			_tcscat (szSrcPath, _T("\\"));
-		/* Add a wildcard after the \ */
-		_tcscat (szSrcPath, _T("*"));
-	}
-	/* Make sure there is an ending slash to the path if the dest is a folder */
-	if(_tcschr (szDestPath, _T('*')) == NULL &&
-		IsExistingDirectory(szDestPath))
-	{
-		if(szDestPath[_tcslen(szDestPath) -  1] != _T('\\'))
-			_tcscat (szDestPath, _T("\\"));
-	}
-
-
-	/* Get a list of all the files */
-	hFile = FindFirstFile (szSrcPath, &findBuffer);
-
-
-	/* We need to figure out what the name of the file in the is going to be */
-	if((szDestPath[_tcslen(szDestPath) -  1] == _T('*') && szDestPath[_tcslen(szDestPath) -  2] == _T('\\')) ||
-		szDestPath[_tcslen(szDestPath) -  1] == _T('\\'))
-	{
-		/* In this case we will be using the same name as the source file
-		for the destination file because destination is a folder */
-		bSrcName = TRUE;
-	}
-	else
-	{
-		/* Save the name the user entered */
-		UseThisName = _tcsrchr(szDestPath,_T('\\'));
-		UseThisName++;
-		_tcscpy(PreserveName,UseThisName);
-	}
-
-	/* Strip the paths back to the folder they are in */
-	for(i = (_tcslen(szSrcPath) -  1); i > -1; i--)
-		if(szSrcPath[i] != _T('\\'))
-			szSrcPath[i] = _T('\0');
-		else
-			break;
-
-	for(i = (_tcslen(szDestPath) -  1); i > -1; i--)
-		if(szDestPath[i] != _T('\\'))
-			szDestPath[i] = _T('\0');
-		else
-			break;
-
-		do
-		{
-			/* Check Breaker */
-			if(CheckCtrlBreak(BREAK_INPUT))
-			{
-				freep(arg);
-				return 1;
-			}
-			/* Set the override to yes each new file */
-			nOverwrite = 1;
-
-			/* If it couldnt open the file handle, print out the error */
-			if(hFile == INVALID_HANDLE_VALUE)
-			{
-				ConOutFormatMessage (GetLastError(), szSrcPath);
-				freep (arg);
-				nErrorLevel = 1;
-				return 1;
-			}
-
-			/* Ignore the . and .. files */
-			if(!_tcscmp (findBuffer.cFileName, _T("."))  ||
-				!_tcscmp (findBuffer.cFileName, _T(".."))||
-				findBuffer.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)
-				continue;
-
-			/* Copy the base folder over to a tmp string */
-			_tcscpy(tmpDestPath,szDestPath);
-
-			/* Can't put a file into a folder that isnt there */
-			if(!IsExistingDirectory(szDestPath))
-			{
-				ConOutFormatMessage (GetLastError (), szSrcPath);
-				freep (arg);
-				nErrorLevel = 1;
-				return 1;
-			}
-			/* Copy over the destination path name */
-			if(bSrcName)
-				_tcscat (tmpDestPath, findBuffer.cFileName);
-			else
-			{
-				/* If there is no wildcard you can use the name the user entered */
-				if(_tcschr (PreserveName, _T('*')) == NULL)
-				{
-					_tcscat (tmpDestPath, PreserveName);
-				}
-				else
-				{
-					/* The following lines of copy were written by someone else
-					(most likely Eric Khoul) and it was taken from ren.c */
-					LPTSTR p,q,r;
-					TCHAR DoneFile[MAX_PATH];
-					/* build destination file name */
-					p = findBuffer.cFileName;
-					q = PreserveName;
-					r = DoneFile;
-					while(*q != 0)
-					{
-						if (*q == '*')
-						{
-							q++;
-							while (*p != 0 && *p != *q)
-							{
-								*r = *p;
-								p++;
-								r++;
-							}
-						}
-						else if (*q == '?')
-						{
-							q++;
-							if (*p != 0)
-							{
-								*r = *p;
-								p++;
-								r++;
-							}
-						}
-						else
-						{
-							*r = *q;
-							if (*p != 0)
-								p++;
-							q++;
-							r++;
-						}
-					}
-					*r = 0;
-					/* Add the filename to the tmp string path */
-					_tcscat (tmpDestPath, DoneFile);
-
-				}
-			}
-
-
-			/* Build the string path to the source file */
-			_tcscpy(tmpSrcPath,szSrcPath);
-			_tcscat (tmpSrcPath, findBuffer.cFileName);
-
-			/* Check to see if the file is the same file */
-			if(!bTouch && !_tcscmp (tmpSrcPath, tmpDestPath))
-            {
-			    LoadString(CMD_ModuleHandle, STRING_COPY_ERROR2, szMsg, RC_STRING_MAX_SIZE);
-			    ConOutPrintf(szMsg);
+        freep (arg);
+        return 1;
+    }
+
+    if(((_tcschr (arg[nSrc], _T('+')) != NULL) ||
+        (_tcschr (arg[nSrc], _T('*')) != NULL && _tcschr (arg[nDes], _T('*')) == NULL) ||
+        (IsExistingDirectory (arg[nSrc]) && (_tcschr (arg[nDes], _T('*')) == NULL && !IsExistingDirectory (arg[nDes])))
+        ))
+    {
+        /* There is a + in the source filename, this means
+        that there is more then one file being put into
+        one file. */
+        bAppend = TRUE;
+        if(_tcschr (arg[nSrc], _T('+')) != NULL)
+            appendPointer = arg[nSrc];
+    }
+
+    /* Reusing the number of files variable */
+    nFiles = 0;
+
+    do
+    {
+        /* Set up the string that is the path to the destination */
+        if(nDes != -1)
+        {
+            if(_tcslen(arg[nDes]) == 2 && arg[nDes][1] == _T(':'))
+            {
+                GetRootPath(arg[nDes],szDestPath,MAX_PATH);
+            }
+            else
+                /* If the user entered two file names then form the full string path */
+                GetFullPathName (arg[nDes], MAX_PATH, szDestPath, NULL);
+        }
+        else
+        {
+            /* If no destination was entered then just use
+            the current directory as the destination */
+            GetCurrentDirectory (MAX_PATH, szDestPath);
+        }
+
+        /* Get the full string of the path to the source file */
+        if(_tcschr (arg[nSrc], _T('+')) != NULL)
+        {
+            _tcscpy(tmpName,_T("\0"));
+            /* Loop through the source file name and copy all
+            the chars one at a time until it gets too + */
+            while(TRUE)
+            {
+                if(!_tcsncmp (appendPointer,_T("+"),1) || !_tcsncmp (appendPointer,_T("\0"),1))
+                {
+                    /* Now that the pointer is on the + we
+                       need to go to the start of the next filename */
+                    if(!_tcsncmp (appendPointer,_T("+"),1))
+                       appendPointer++;
+                    else
+                        bDone = TRUE;
+                    break;
+                }
+
+                _tcsncat(tmpName,appendPointer,1);
+                appendPointer++;
+            }
+
+            /* Finish the string off with a null char */
+            _tcsncat(tmpName,_T("\0"),1);
+
+            if(_tcschr (arg[nSrc], _T(',')) != NULL)
+            {
+                /* Only time there is a , in the source is when they are using touch
+                   Cant have a destination and can only have on ,, at the end of the string
+                    Cant have more then one file name */
+                szTouch = _tcsstr (arg[nSrc], _T("+"));
+                if(_tcsncmp (szTouch,_T("+,,\0"),4) || nDes != -1)
+                {
+                    LoadString(CMD_ModuleHandle, STRING_ERROR_INVALID_PARAM_FORMAT, szMsg, RC_STRING_MAX_SIZE);
+                    ConErrPrintf(szMsg,arg[nSrc]);
+                    nErrorLevel = 1;
+                    freep (arg);
+                    return 1;
+                }
+                bTouch = TRUE;
+                bDone = TRUE;
+            }
+
+            if(_tcslen(tmpName) == 2)
+            {
+                if(tmpName[1] == _T(':'))
+                {
+                    GetRootPath(tmpName,szSrcPath,MAX_PATH);
+                }
+            }
+            else
+                /* Get the full path to first file in the string of file names */
+                GetFullPathName (tmpName, MAX_PATH, szSrcPath, NULL);
+        }
+        else
+        {
+            bDone = TRUE;
+            if(_tcslen(arg[nSrc]) == 2 && arg[nSrc][1] == _T(':'))
+            {
+                GetRootPath(arg[nSrc],szSrcPath,MAX_PATH);
+            }
+            else
+                /* Get the full path of the source file */
+                GetFullPathName (arg[nSrc], MAX_PATH, szSrcPath, NULL);
+        }
+
+        /* From this point on, we can assume that the shortest path is 3 letters long
+        and that would be [DriveLetter]:\ */
+
+        /* If there is no * in the path name and it is a folder
+        then we will need to add a wildcard to the pathname
+        so FindFirstFile comes up with all the files in that
+        folder */
+        if(_tcschr (szSrcPath, _T('*')) == NULL &&
+            IsExistingDirectory (szSrcPath))
+        {
+            /* If it doesnt have a \ at the end already then on needs to be added */
+            if(szSrcPath[_tcslen(szSrcPath) -  1] != _T('\\'))
+                _tcscat (szSrcPath, _T("\\"));
+            /* Add a wildcard after the \ */
+            _tcscat (szSrcPath, _T("*"));
+        }
+        /* Make sure there is an ending slash to the path if the dest is a folder */
+        if(_tcschr (szDestPath, _T('*')) == NULL &&
+            IsExistingDirectory(szDestPath))
+        {
+            if(szDestPath[_tcslen(szDestPath) -  1] != _T('\\'))
+                _tcscat (szDestPath, _T("\\"));
+        }
+
+        /* Get a list of all the files */
+        hFile = FindFirstFile (szSrcPath, &findBuffer);
+
+        /* We need to figure out what the name of the file in the is going to be */
+        if((szDestPath[_tcslen(szDestPath) -  1] == _T('*') && szDestPath[_tcslen(szDestPath) -  2] == _T('\\')) ||
+            szDestPath[_tcslen(szDestPath) -  1] == _T('\\'))
+        {
+            /* In this case we will be using the same name as the source file
+            for the destination file because destination is a folder */
+            bSrcName = TRUE;
+        }
+        else
+        {
+            /* Save the name the user entered */
+            UseThisName = _tcsrchr(szDestPath,_T('\\'));
+            UseThisName++;
+            _tcscpy(PreserveName,UseThisName);
+        }
+
+        /* Strip the paths back to the folder they are in */
+        for(i = (_tcslen(szSrcPath) -  1); i > -1; i--)
+            if(szSrcPath[i] != _T('\\'))
+                szSrcPath[i] = _T('\0');
+            else
+                break;
+
+        for(i = (_tcslen(szDestPath) -  1); i > -1; i--)
+            if(szDestPath[i] != _T('\\'))
+                szDestPath[i] = _T('\0');
+            else
+                break;
+
+        do
+        {
+            /* Check Breaker */
+            if(CheckCtrlBreak(BREAK_INPUT))
+            {
+                freep(arg);
+                return 1;
+            }
+            /* Set the override to yes each new file */
+            nOverwrite = 1;
+
+            /* If it couldnt open the file handle, print out the error */
+            if(hFile == INVALID_HANDLE_VALUE)
+            {
+                ConOutFormatMessage (GetLastError(), szSrcPath);
+                freep (arg);
+                nErrorLevel = 1;
+                return 1;
+            }
+
+            /* Ignore the . and .. files */
+            if(!_tcscmp (findBuffer.cFileName, _T("."))  ||
+                !_tcscmp (findBuffer.cFileName, _T(".."))||
+                findBuffer.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)
+                continue;
+
+            /* Copy the base folder over to a tmp string */
+            _tcscpy(tmpDestPath,szDestPath);
+
+            /* Can't put a file into a folder that isnt there */
+            if(!IsExistingDirectory(szDestPath))
+            {
+                ConOutFormatMessage (GetLastError (), szSrcPath);
+                freep (arg);
+                nErrorLevel = 1;
+                return 1;
+            }
+            /* Copy over the destination path name */
+            if(bSrcName)
+                _tcscat (tmpDestPath, findBuffer.cFileName);
+            else
+            {
+                /* If there is no wildcard you can use the name the user entered */
+                if(_tcschr (PreserveName, _T('*')) == NULL)
+                {
+                    _tcscat (tmpDestPath, PreserveName);
+                }
+                else
+                {
+                    /* The following lines of copy were written by someone else
+                    (most likely Eric Khoul) and it was taken from ren.c */
+                    LPTSTR p,q,r;
+                    TCHAR DoneFile[MAX_PATH];
+                    /* build destination file name */
+                    p = findBuffer.cFileName;
+                    q = PreserveName;
+                    r = DoneFile;
+                    while(*q != 0)
+                    {
+                        if (*q == '*')
+                        {
+                            q++;
+                            while (*p != 0 && *p != *q)
+                            {
+                                *r = *p;
+                                p++;
+                                r++;
+                            }
+                        }
+                        else if (*q == '?')
+                        {
+                            q++;
+                            if (*p != 0)
+                            {
+                                *r = *p;
+                                p++;
+                                r++;
+                            }
+                        }
+                        else
+                        {
+                            *r = *q;
+                            if (*p != 0)
+                                p++;
+                            q++;
+                            r++;
+                        }
+                    }
+                    *r = 0;
+                    /* Add the filename to the tmp string path */
+                    _tcscat (tmpDestPath, DoneFile);
+                }
+            }
+
+            /* Build the string path to the source file */
+            _tcscpy(tmpSrcPath,szSrcPath);
+            _tcscat (tmpSrcPath, findBuffer.cFileName);
+
+            /* Check to see if the file is the same file */
+            if(!bTouch && !_tcscmp (tmpSrcPath, tmpDestPath))
+            {
+                LoadString(CMD_ModuleHandle, STRING_COPY_ERROR2, szMsg, RC_STRING_MAX_SIZE);
+                ConOutPrintf(szMsg);
 
                 nErrorLevel = 1;
                 break;
             }
 
-			/* Handle any overriding / prompting that needs to be done */
-			if(((!(dwFlags & COPY_NO_PROMPT) && IsExistingFile (tmpDestPath)) || dwFlags & COPY_PROMPT) && !bTouch)
-				nOverwrite = CopyOverwrite(tmpDestPath);
-			if(nOverwrite == PROMPT_NO || nOverwrite == PROMPT_BREAK)
-				continue;
-			if(nOverwrite == PROMPT_ALL || (nOverwrite == PROMPT_YES && bAppend))
-				dwFlags |= COPY_NO_PROMPT;
-
-			/* Tell weather the copy was successful or not */
-			if(copy(tmpSrcPath,tmpDestPath, bAppend, dwFlags, bTouch))
-			{
-				nFiles++;
-				/* only print source name when more then one file */
-				if(_tcschr (arg[nSrc], _T('+')) != NULL || _tcschr (arg[nSrc], _T('*')) != NULL)
-					ConOutPrintf(_T("%s\n"),findBuffer.cFileName);
-				//LoadString(CMD_ModuleHandle, STRING_MOVE_ERROR1, szMsg, RC_STRING_MAX_SIZE);
-			}
-			else
-			{
-				/* print out the error message */
-				LoadString(CMD_ModuleHandle, STRING_COPY_ERROR3, szMsg, RC_STRING_MAX_SIZE);
-				ConOutPrintf(szMsg);
-				ConOutFormatMessage (GetLastError(), szSrcPath);
-				nErrorLevel = 1;
-			}
-
-		/* Loop through all wildcard files */
-		}while(FindNextFile (hFile, &findBuffer));
-	/* Loop through all files in src string with a + */
-	}while(!bDone);
-
-	/* print out the number of files copied */
-	LoadString(CMD_ModuleHandle, STRING_COPY_FILE, szMsg, RC_STRING_MAX_SIZE);
-	ConOutPrintf(szMsg, nFiles);
-
-	FindClose(hFile);
-  if (arg!=NULL)
-      freep(arg);
-
-	return 0;
+            /* Handle any overriding / prompting that needs to be done */
+            if(((!(dwFlags & COPY_NO_PROMPT) && IsExistingFile (tmpDestPath)) || dwFlags & COPY_PROMPT) && !bTouch)
+                nOverwrite = CopyOverwrite(tmpDestPath);
+            if(nOverwrite == PROMPT_NO || nOverwrite == PROMPT_BREAK)
+                continue;
+            if(nOverwrite == PROMPT_ALL || (nOverwrite == PROMPT_YES && bAppend))
+                dwFlags |= COPY_NO_PROMPT;
+
+            /* Tell weather the copy was successful or not */
+            if(copy(tmpSrcPath,tmpDestPath, bAppend, dwFlags, bTouch))
+            {
+                nFiles++;
+                /* only print source name when more then one file */
+                if(_tcschr (arg[nSrc], _T('+')) != NULL || _tcschr (arg[nSrc], _T('*')) != NULL)
+                    ConOutPrintf(_T("%s\n"),findBuffer.cFileName);
+                //LoadString(CMD_ModuleHandle, STRING_MOVE_ERROR1, szMsg, RC_STRING_MAX_SIZE);
+            }
+            else
+            {
+                /* print out the error message */
+                LoadString(CMD_ModuleHandle, STRING_COPY_ERROR3, szMsg, RC_STRING_MAX_SIZE);
+                ConOutPrintf(szMsg);
+                ConOutFormatMessage (GetLastError(), szSrcPath);
+                nErrorLevel = 1;
+            }
+
+        /* Loop through all wildcard files */
+        } while(FindNextFile (hFile, &findBuffer));
+
+    /* Loop through all files in src string with a + */
+    } while(!bDone);
+
+    /* print out the number of files copied */
+    LoadString(CMD_ModuleHandle, STRING_COPY_FILE, szMsg, RC_STRING_MAX_SIZE);
+    ConOutPrintf(szMsg, nFiles);
+
+    FindClose(hFile);
+
+    if (arg != NULL)
+        freep(arg);
+
+    return 0;
 }
 
-
 #endif /* INCLUDE_CMD_COPY */




More information about the Ros-diffs mailing list