int __cdecl main( int argc, char **argv ) { STARTUPINFOW si; PROCESS_INFORMATION pi; static FILE * fp; DWORD dwFileLength; DWORD dwDirLength; DWORD dwSize; size_t cslen; char szReadStringA[256]; char szAbsPathNameA[_MAX_PATH]; WCHAR szDirNameW[_MAX_DIR]; WCHAR absPathBuf[_MAX_PATH]; WCHAR *szAbsPathNameW; if(0 != (PAL_Initialize(argc, argv))) { return ( FAIL ); } ZeroMemory ( &si, sizeof(si) ); si.cb = sizeof(si); ZeroMemory ( &pi, sizeof(pi) ); szAbsPathNameW=&absPathBuf[0]; dwFileLength = wcslen( szChildFileW ); dwDirLength = GetCurrentDirectory(_MAX_PATH, szDirNameW); if (0 == dwDirLength) { Fail ("GetCurrentDirectory call failed. Could not get " "current working directory\n. Exiting.\n"); } dwSize = mkAbsoluteFilenameW( szDirNameW, dwDirLength, szChildFileW, dwFileLength, szAbsPathNameW ); if (0 == dwSize) { Fail ("Palsuite Code: mkAbsoluteFilename() call failed. Could " "not build absolute path name to file\n. Exiting.\n"); } if ( !CreateProcessW ( NULL, szAbsPathNameW, NULL, NULL, FALSE, CREATE_NEW_CONSOLE, NULL, NULL, &si, &pi ) ) { Fail ( "CreateProcess call failed. GetLastError returned %d\n", GetLastError() ); } WaitForSingleObject ( pi.hProcess, INFINITE ); szAbsPathNameW=&absPathBuf[0]; dwFileLength = wcslen( szCommonFileW ); dwSize = mkAbsoluteFilenameW( szDirNameW, dwDirLength, szCommonFileW, dwFileLength, szAbsPathNameW ); /* set the string length for the open call*/ if (0 == dwSize) { Fail ("Palsuite Code: mkAbsoluteFilename() call failed. Could " "not build absolute path name to file\n. Exiting.\n"); } WideCharToMultiByte (CP_ACP, 0, szAbsPathNameW, -1, szAbsPathNameA, (dwSize + 1), NULL, NULL); if ( NULL == ( fp = fopen ( szAbsPathNameA , "r" ) ) ) { Fail ("%s\nunable to open %s\nfor reading. Exiting.\n", argv[0], szAbsPathNameA ); } cslen = strlen ( szCommonStringA ); if ( NULL == fgets( szReadStringA, (cslen + 1), fp )) { /* * A return value of NULL indicates an error condition or an * EOF condition */ Fail ("%s\nunable to read file\n%s\nszReadStringA is %s\n" "Exiting.\n", argv[0], szAbsPathNameA, szReadStringA ); } if ( 0 != strncmp( szReadStringA, szCommonStringA, cslen )) { Fail ("string comparison failed.\n szReadStringA is %s and\n" "szCommonStringA is %s\n", szReadStringA, szCommonStringA ); } else { Trace ("string comparison passed.\n"); } if (0 != (fclose ( fp ))) { Trace ("%s unable to close file %s. This may cause a file pointer " "leak. Continuing.\n", argv[0], szAbsPathNameA ); } /* Close process and thread handle */ CloseHandle ( pi.hProcess ); CloseHandle ( pi.hThread ); PAL_Terminate(); return ( PASS ); }
int __cdecl main( int argc, char **argv ) { static FILE * fp; DWORD dwFileLength; DWORD dwDirLength; DWORD dwSize; char *szAbsPathNameA; WCHAR szDirNameW[_MAX_DIR]; WCHAR szAbsPathNameW[_MAX_PATH]; if(0 != (PAL_Initialize(argc, argv))) { return ( FAIL ); } dwDirLength = GetCurrentDirectory( _MAX_PATH, szDirNameW ); if (0 == dwDirLength) { Fail ("GetCurrentDirectory call failed. Could not get " "current working directory\n. Exiting.\n"); } dwFileLength = wcslen( szCommonFileW ); dwSize = mkAbsoluteFilenameW( szDirNameW, dwDirLength, szCommonFileW, dwFileLength, szAbsPathNameW ); if (0 == dwSize) { Fail ("Palsuite Code: mkAbsoluteFilename() call failed. Could " "not build absolute path name to file\n. Exiting.\n"); } /* set the string length for the open call */ szAbsPathNameA = malloc (dwSize +1); if (NULL == szAbsPathNameA) { Fail ("Unable to malloc (%d) bytes. Exiting\n", (dwSize +1) ); } WideCharToMultiByte (CP_ACP, 0, szAbsPathNameW, -1, szAbsPathNameA, (dwSize + 1), NULL, NULL); if ( NULL == ( fp = fopen ( szAbsPathNameA , "w+" ) ) ) { /* * A return value of NULL indicates an error condition or an * EOF condition */ Fail ("%s unable to open %s for writing. Exiting.\n", argv[0] , szAbsPathNameA ); } free (szAbsPathNameA); if ( 0 >= ( fprintf ( fp, "%s", szCommonStringA ))) { Fail("%s unable to write to %s. Exiting.\n", argv[0] , szAbsPathNameA ); } if (0 != (fclose ( fp ))) { Fail ("%s unable to close file %s. Pid may not be " "written to file. Exiting.\n", argv[0], szAbsPathNameA ); } PAL_Terminate(); return ( PASS ); }