[ros-diffs] [jmorlan] 40038: - Allow running a batch file from inside a FOR - A little cleanup

jmorlan at svn.reactos.org jmorlan at svn.reactos.org
Sun Mar 15 16:45:18 CET 2009


Author: jmorlan
Date: Sun Mar 15 18:45:17 2009
New Revision: 40038

URL: http://svn.reactos.org/svn/reactos?rev=40038&view=rev
Log:
- Allow running a batch file from inside a FOR
- A little cleanup

Modified:
    trunk/reactos/base/shell/cmd/batch.c
    trunk/reactos/base/shell/cmd/batch.h
    trunk/reactos/base/shell/cmd/goto.c
    trunk/reactos/base/shell/cmd/internal.c

Modified: trunk/reactos/base/shell/cmd/batch.c
URL: http://svn.reactos.org/svn/reactos/trunk/reactos/base/shell/cmd/batch.c?rev=40038&r1=40037&r2=40038&view=diff
==============================================================================
--- trunk/reactos/base/shell/cmd/batch.c [iso-8859-1] (original)
+++ trunk/reactos/base/shell/cmd/batch.c [iso-8859-1] Sun Mar 15 18:45:17 2009
@@ -88,7 +88,7 @@
 
 	TRACE ("FindArg: (%d)\n", n);
 
-	if (bc == NULL || n < 0 || n > 9)
+	if (n < 0 || n > 9)
 		return NULL;
 
 	n += bc->shiftlevel;
@@ -167,38 +167,32 @@
  * message
  */
 
-VOID ExitBatch (LPTSTR msg)
-{
-	TRACE ("ExitBatch: (\'%s\')\n", debugstr_aw(msg));
-
-	if (bc != NULL)
-	{
-		if (bc->hBatchFile)
-		{
-			CloseHandle (bc->hBatchFile);
-			bc->hBatchFile = INVALID_HANDLE_VALUE;
-		}
-
-		if (bc->raw_params)
-			cmd_free(bc->raw_params);
-
-		if (bc->params)
-			cmd_free(bc->params);
-
-		UndoRedirection(bc->RedirList, NULL);
-		FreeRedirection(bc->RedirList);
-
-		/* Preserve echo state across batch calls */
-		bEcho = bc->bEcho;
-
-		while (bc->setlocal)
-			cmd_endlocal(_T(""));
-
-		bc = bc->prev;
-	}
-
-	if (msg && *msg)
-		ConOutPrintf (_T("%s\n"), msg);
+VOID ExitBatch()
+{
+	TRACE ("ExitBatch\n");
+
+	if (bc->hBatchFile)
+	{
+		CloseHandle (bc->hBatchFile);
+		bc->hBatchFile = INVALID_HANDLE_VALUE;
+	}
+
+	if (bc->raw_params)
+		cmd_free(bc->raw_params);
+
+	if (bc->params)
+		cmd_free(bc->params);
+
+	UndoRedirection(bc->RedirList, NULL);
+	FreeRedirection(bc->RedirList);
+
+	/* Preserve echo state across batch calls */
+	bEcho = bc->bEcho;
+
+	while (bc->setlocal)
+		cmd_endlocal(_T(""));
+
+	bc = bc->prev;
 }
 
 
@@ -212,6 +206,7 @@
 BOOL Batch (LPTSTR fullname, LPTSTR firstword, LPTSTR param, PARSED_COMMAND *Cmd)
 {
 	BATCH_CONTEXT new;
+	LPFOR_CONTEXT saved_fc;
 
 	HANDLE hFile;
 	SetLastError(0);
@@ -227,9 +222,6 @@
 		ConErrResPuts(STRING_BATCH_ERROR);
 		return FALSE;
 	}
-
-	/* Kill any and all FOR contexts */
-	fc = NULL;
 
 	if (bc != NULL && Cmd == bc->current)
 	{
@@ -252,7 +244,7 @@
 			/* Get its SETLOCAL stack so it can be migrated to the new context */
 			setlocal = bc->setlocal;
 			bc->setlocal = NULL;
-			ExitBatch(NULL);
+			ExitBatch();
 		}
 
 		/* Create a new context. This function will not
@@ -285,6 +277,10 @@
 	if (*firstword == _T(':'))
 		cmd_goto(firstword);
 
+	/* If we are calling from inside a FOR, hide the FOR variables */
+	saved_fc = fc;
+	fc = NULL;
+
 	/* If we have created a new context, don't return
 	 * until this batch file has completed. */
 	while (bc == &new && !bExit)
@@ -310,15 +306,13 @@
 
 	TRACE ("Batch: returns TRUE\n");
 
+	fc = saved_fc;
 	return TRUE;
 }
 
 VOID AddBatchRedirection(REDIRECTION **RedirList)
 {
 	REDIRECTION **ListEnd;
-
-	if(!bc)
-		return;
 
 	/* Prepend the list to the batch context's list */
 	ListEnd = RedirList;
@@ -343,17 +337,13 @@
 
 LPTSTR ReadBatchLine ()
 {
-	/* No batch */
-	if (bc == NULL)
-		return NULL;
-
 	TRACE ("ReadBatchLine ()\n");
 
 	/* User halt */
 	if (CheckCtrlBreak (BREAK_BATCHFILE))
 	{
 		while (bc)
-			ExitBatch (NULL);
+			ExitBatch();
 		return NULL;
 	}
 
@@ -361,7 +351,7 @@
 	{
 		TRACE ("ReadBatchLine(): Reached EOF!\n");
 		/* End of file.... */
-		ExitBatch (NULL);
+		ExitBatch();
 		return NULL;
 	}
 

Modified: trunk/reactos/base/shell/cmd/batch.h
URL: http://svn.reactos.org/svn/reactos/trunk/reactos/base/shell/cmd/batch.h?rev=40038&r1=40037&r2=40038&view=diff
==============================================================================
--- trunk/reactos/base/shell/cmd/batch.h [iso-8859-1] (original)
+++ trunk/reactos/base/shell/cmd/batch.h [iso-8859-1] Sun Mar 15 18:45:17 2009
@@ -46,7 +46,7 @@
 
 LPTSTR FindArg (TCHAR, BOOL *);
 LPTSTR BatchParams (LPTSTR, LPTSTR);
-VOID   ExitBatch (LPTSTR);
+VOID   ExitBatch ();
 BOOL   Batch (LPTSTR, LPTSTR, LPTSTR, PARSED_COMMAND *);
 LPTSTR ReadBatchLine();
 VOID AddBatchRedirection(REDIRECTION **);

Modified: trunk/reactos/base/shell/cmd/goto.c
URL: http://svn.reactos.org/svn/reactos/trunk/reactos/base/shell/cmd/goto.c?rev=40038&r1=40037&r2=40038&view=diff
==============================================================================
--- trunk/reactos/base/shell/cmd/goto.c [iso-8859-1] (original)
+++ trunk/reactos/base/shell/cmd/goto.c [iso-8859-1] Sun Mar 15 18:45:17 2009
@@ -38,7 +38,6 @@
 
 INT cmd_goto (LPTSTR param)
 {
-	TCHAR szMsg[RC_STRING_MAX_SIZE];
 	LPTSTR tmp, tmp2;
 	LONG   lNewPosHigh = 0;
 
@@ -58,8 +57,8 @@
 
 	if (*param == _T('\0'))
 	{
-		LoadString(CMD_ModuleHandle, STRING_GOTO_ERROR1, szMsg, RC_STRING_MAX_SIZE);
-		ExitBatch(szMsg);
+		ConErrResPrintf(STRING_GOTO_ERROR1);
+		ExitBatch();
 		return 1;
 	}
 
@@ -117,7 +116,7 @@
 	}
 
 	ConErrResPrintf(STRING_GOTO_ERROR2, param);
-	ExitBatch(NULL);
+	ExitBatch();
 	return 1;
 }
 

Modified: trunk/reactos/base/shell/cmd/internal.c
URL: http://svn.reactos.org/svn/reactos/trunk/reactos/base/shell/cmd/internal.c?rev=40038&r1=40037&r2=40038&view=diff
==============================================================================
--- trunk/reactos/base/shell/cmd/internal.c [iso-8859-1] (original)
+++ trunk/reactos/base/shell/cmd/internal.c [iso-8859-1] Sun Mar 15 18:45:17 2009
@@ -665,7 +665,7 @@
 			param++;
 		if (_istdigit(*param))
 			nErrorLevel = _ttoi(param);
-		ExitBatch (NULL);
+		ExitBatch();
 	}
 
 	else



More information about the Ros-diffs mailing list