Leaked source code of windows server 2003
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

186 lines
3.8 KiB

#include <iostream.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <windows.h>
#include <winbase.h>
const DWORD MaxStrLength = 256;
const char ComponentSectionTitle[] = "[Components]";
/*++
Description:
Program to do setup testing automatically
Argument:
argv[1]: test case directory
argv[2]: Windows NT installation directory, where server is to be installed
argv[3]: generate the test case from a standalone test case
Return value:
None
--*/
void main(int argc, char *argv[])
{
bool bFromStandalone;
char pchTestCaseDir[MaxStrLength];
char pchNTDir[MaxStrLength];
char pchOcFileName[MaxStrLength];
char pchSysocFileName[MaxStrLength];
LPSTR lpBuffer;
if (argc != 3 && argc != 4){
cout << "Usage: " << argv[0] << " TestCaseDir NTDir IfFromStandalone" << endl;
exit(1);
}
if (argc == 4){
bFromStandalone = true;
cout << "Start test from a standalone test case is not supported yet" << endl;
}
else{
bFromStandalone = false;
}
// Now we need to form an absolute path.
// It is assumed that test case directory is relative to the current directory
// and NT directory is an absolute path
strcpy(pchNTDir, argv[2]);
strcpy(pchTestCaseDir, argv[1]);
if (pchNTDir[strlen(pchNTDir)-1] == '\\'){
strcat(pchNTDir, "system32\\");
}
else{
strcat(pchNTDir, "\\system32\\");
}
lpBuffer = (LPSTR)malloc(sizeof(char) * MaxStrLength);
GetCurrentDirectory(MaxStrLength, lpBuffer);
if (lpBuffer[strlen(lpBuffer) - 1] != '\\'){
strcat(lpBuffer, "\\");
}
strcat(lpBuffer, pchTestCaseDir);
strcpy(pchTestCaseDir, lpBuffer);
free(lpBuffer);
if (pchTestCaseDir[strlen(pchTestCaseDir) - 1] != '\\'){
strcat(pchTestCaseDir, "\\");
}
// Now we will open oc.inf from test directory
// and sysoc.inf from NT directory
// and put something from oc.inf into sysoc.inf
strcpy(pchOcFileName, pchTestCaseDir);
strcat(pchOcFileName, "oc.inf");
strcpy(pchSysocFileName, pchNTDir);
strcat(pchSysocFileName, "sysoc.inf");
FILE *pfSysoc, *pfOc, *pfTemp;
if ((pfSysoc = fopen(pchSysocFileName, "r")) == NULL){
cout << "Error opening sysoc.inf " << endl;
exit(1);
}
if ((pfOc = fopen(pchOcFileName, "r")) == NULL){
cout << "Error opening oc.inf " << endl;
exit(1);
}
if ((pfTemp = fopen("temp.inf", "w")) == NULL){
cout << "Error opening temp.inf " << endl;
exit(1);
}
char pchOcLine[MaxStrLength];
char pchSysocLine[MaxStrLength];
bool bNotFound = true;
while (fgets(pchSysocLine, MaxStrLength, pfSysoc) != NULL){
fputs(pchSysocLine, pfTemp);
if (strstr(pchSysocLine, ComponentSectionTitle) != NULL){
// Read from oc.inf and paste important information
bNotFound = true;
while (fgets(pchOcLine, MaxStrLength, pfOc) != NULL){
if (bNotFound){
if (strstr(pchOcLine, ComponentSectionTitle) == NULL){
continue;
}
else{
bNotFound = false;
}
}
else{
if (pchOcLine[0] != '['){
fputs(pchOcLine, pfTemp);
}
else{
bNotFound = true;
}
}
}
fclose(pfOc);
}
}
fclose(pfSysoc);
fclose(pfTemp);
// Now copy the temporary file onto sysoc.inf
char pchCmdLine[MaxStrLength];
sprintf(pchCmdLine, "copy temp.inf %s /Y", pchSysocFileName);
system(pchCmdLine);
system("del temp.inf");
// We are now done with the file stuff
// We will begin copying files
sprintf(pchCmdLine, "copy %s*.dll %s /Y", pchTestCaseDir, pchNTDir);
system(pchCmdLine);
// We will assume it is not from a standalone.
//if (!bFromStandalone || true){
sprintf(pchCmdLine, "copy %s*.inf %s /Y", pchTestCaseDir, pchNTDir);
system(pchCmdLine);
//}
exit(0);
}