[NTVDM]
authorAleksandar Andrejevic <aandrejevic@reactos.org>
Mon, 22 Jul 2013 20:21:46 +0000 (20:21 +0000)
committerAleksandar Andrejevic <aandrejevic@reactos.org>
Mon, 22 Jul 2013 20:21:46 +0000 (20:21 +0000)
Add the program name after the environment block.

svn path=/branches/ntvdm/; revision=59559

subsystems/ntvdm/dos.c

index d6a9d2f..37b0de4 100644 (file)
@@ -54,7 +54,7 @@ static VOID DosCombineFreeBlocks(WORD StartBlock)
     }
 }
 
-static WORD DosCopyEnvironmentBlock(WORD SourceSegment)
+static WORD DosCopyEnvironmentBlock(WORD SourceSegment, LPCSTR ProgramName)
 {
     PCHAR Ptr, SourceBuffer, DestBuffer = NULL;
     ULONG TotalSize = 0;
@@ -70,6 +70,9 @@ static WORD DosCopyEnvironmentBlock(WORD SourceSegment)
     }
     TotalSize++;
 
+    /* Add the string buffer size */
+    TotalSize += strlen(ProgramName) + 1;
+
     /* Allocate the memory for the environment block */
     DestSegment = DosAllocateMemory((TotalSize + 0x0F) >> 4, NULL);
     if (!DestSegment) return 0;
@@ -91,7 +94,10 @@ static WORD DosCopyEnvironmentBlock(WORD SourceSegment)
     }
 
     /* Set the final zero */
-    *DestBuffer = 0;
+    *(DestBuffer++) = 0;
+
+    /* Copy the program name after the environment block */
+    strcpy(DestBuffer, ProgramName);
 
     return DestSegment;
 }
@@ -846,7 +852,8 @@ BOOLEAN DosCreateProcess(LPCSTR CommandLine, WORD EnvBlock)
         /* No, copy the one from the parent */
         EnvBlock = DosCopyEnvironmentBlock((CurrentPsp != SYSTEM_PSP)
                                            ? SEGMENT_TO_PSP(CurrentPsp)->EnvBlock
-                                           : SYSTEM_ENV_BLOCK);
+                                           : SYSTEM_ENV_BLOCK,
+                                           ProgramFilePath);
     }
 
     /* Check if this is an EXE file or a COM file */