Windows app that runs Linux command "/bin/uname" and returns 0 if redirected stdout returns "Linux", otherwise non-0 exit code.
Last active
December 11, 2019 09:04
-
-
Save ermshiperete/1e4cb1bc32e5175c369ec3d0d594cef8 to your computer and use it in GitHub Desktop.
ConsoleApplication3
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
.vs/ | |
bin/ | |
obj/ | |
Debug/ | |
Release/ | |
*.user | |
*.ilk | |
*.pdb |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/bin/bash | |
set -e | |
git clean -dxf | |
sed 's/all: $(FONTS)/all:/' -i fonts/Makefile.in || true | |
./configure --without-freetype --disable-tests CC="ccache gcc" | |
make -j6 || make || exit 125 ; git reset --hard | |
./wine /tmp/ConsoleApplication3/ConsoleApplication3 > /tmp/consout && [[ $(grep --count "Unhandled exception" /tmp/consout) -eq 0 ]] && exit 0 || exit 2 |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#include <windows.h> | |
#include <tchar.h> | |
#include <strsafe.h> | |
#define BUFSIZE 4096 | |
HANDLE g_hChildStd_OUT_Rd = NULL; | |
HANDLE g_hChildStd_OUT_Wr = NULL; | |
HANDLE g_hInputFile = NULL; | |
void CreateChildProcess(TCHAR* command, TCHAR* workdDir); | |
int ReadFromPipe(void); | |
void ErrorExit(PTSTR); | |
int filterException(int code, PEXCEPTION_POINTERS ex) { | |
return EXCEPTION_EXECUTE_HANDLER; | |
} | |
int _tmain(int argc, TCHAR* argv[]) | |
{ | |
__try | |
{ | |
SECURITY_ATTRIBUTES saAttr; | |
// Set the bInheritHandle flag so pipe handles are inherited. | |
ZeroMemory(&saAttr, sizeof(SECURITY_ATTRIBUTES)); | |
saAttr.nLength = sizeof(SECURITY_ATTRIBUTES); | |
saAttr.bInheritHandle = TRUE; | |
saAttr.lpSecurityDescriptor = NULL; | |
// Create a pipe for the child process's STDOUT. | |
if (!CreatePipe(&g_hChildStd_OUT_Rd, &g_hChildStd_OUT_Wr, &saAttr, 0)) | |
ErrorExit(TEXT("StdoutRd CreatePipe")); | |
// Ensure the read handle to the pipe for STDOUT is not inherited. | |
if (!SetHandleInformation(g_hChildStd_OUT_Rd, HANDLE_FLAG_INHERIT, 0)) | |
ErrorExit(TEXT("Stdout SetHandleInformation")); | |
// Create the child process. | |
TCHAR cmdString[MAX_PATH]; | |
TCHAR lpTempPathBuffer[MAX_PATH]; | |
GetTempPath(MAX_PATH, lpTempPathBuffer); | |
_tcscpy_s(cmdString, TEXT("/bin/uname")); | |
CreateChildProcess(cmdString, lpTempPathBuffer); | |
// Read from pipe that is the standard output for child process. | |
CloseHandle(g_hChildStd_OUT_Wr); | |
return ReadFromPipe(); | |
} | |
__except(filterException(GetExceptionCode(), GetExceptionInformation())) | |
{ | |
return 2; | |
} | |
} | |
void CreateChildProcess(TCHAR* command, TCHAR* workDir) | |
// Create a child process that uses the previously created pipes for STDIN and STDOUT. | |
{ | |
PROCESS_INFORMATION piProcInfo; | |
STARTUPINFO siStartInfo; | |
BOOL bSuccess = FALSE; | |
// Set up members of the PROCESS_INFORMATION structure. | |
ZeroMemory(&piProcInfo, sizeof(PROCESS_INFORMATION)); | |
// Set up members of the STARTUPINFO structure. | |
// This structure specifies the STDIN and STDOUT handles for redirection. | |
ZeroMemory(&siStartInfo, sizeof(STARTUPINFO)); | |
siStartInfo.cb = sizeof(STARTUPINFO); | |
siStartInfo.hStdError = g_hChildStd_OUT_Wr; | |
siStartInfo.hStdOutput = g_hChildStd_OUT_Wr; | |
// siStartInfo.hStdInput = g_hChildStd_IN_Rd; | |
siStartInfo.dwFlags |= STARTF_USESTDHANDLES; | |
// Create the child process. | |
bSuccess = CreateProcess(NULL, | |
command, // command line | |
NULL, // process security attributes | |
NULL, // primary thread security attributes | |
TRUE, // handles are inherited | |
0, // creation flags | |
NULL, // use parent's environment | |
workDir, | |
&siStartInfo, // STARTUPINFO pointer | |
&piProcInfo); // receives PROCESS_INFORMATION | |
// If an error occurs, exit the application. | |
if (!bSuccess) | |
ErrorExit(TEXT("CreateProcess")); | |
else | |
{ | |
CloseHandle(piProcInfo.hProcess); | |
CloseHandle(piProcInfo.hThread); | |
} | |
} | |
int ReadFromPipe(void) | |
{ | |
DWORD dwRead; | |
CHAR chBuf[BUFSIZE+1]; | |
BOOL bSuccess = FALSE; | |
HANDLE hParentStdOut = GetStdHandle(STD_OUTPUT_HANDLE); | |
ReadFile(g_hChildStd_OUT_Rd, chBuf, BUFSIZE, &dwRead, NULL); | |
if (dwRead < BUFSIZE) | |
chBuf[dwRead] = 0; | |
else | |
chBuf[BUFSIZE] = 0; | |
int diff = strncmp(chBuf, "Linux", 5); | |
return diff == 0 ? 0 : 1; | |
} | |
void ErrorExit(LPTSTR lpszFunction) | |
{ | |
LPVOID lpMsgBuf; | |
LPVOID lpDisplayBuf; | |
DWORD dw = GetLastError(); | |
FormatMessage( | |
FORMAT_MESSAGE_ALLOCATE_BUFFER | | |
FORMAT_MESSAGE_FROM_SYSTEM | | |
FORMAT_MESSAGE_IGNORE_INSERTS, | |
NULL, | |
dw, | |
MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), | |
(LPTSTR)&lpMsgBuf, | |
0, NULL); | |
lpDisplayBuf = (LPVOID)LocalAlloc(LMEM_ZEROINIT, | |
(lstrlen((LPCTSTR)lpMsgBuf) + lstrlen((LPCTSTR)lpszFunction) + 40) * sizeof(TCHAR)); | |
StringCchPrintf((LPTSTR)lpDisplayBuf, | |
LocalSize(lpDisplayBuf) / sizeof(TCHAR), | |
TEXT("%s failed with error %d: %s"), | |
lpszFunction, dw, lpMsgBuf); | |
printf("%ls\n", (LPCTSTR)lpDisplayBuf); | |
LocalFree(lpMsgBuf); | |
LocalFree(lpDisplayBuf); | |
ExitProcess(1); | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<?xml version="1.0" encoding="utf-8"?> | |
<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> | |
<ItemGroup Label="ProjectConfigurations"> | |
<ProjectConfiguration Include="Debug|Win32"> | |
<Configuration>Debug</Configuration> | |
<Platform>Win32</Platform> | |
</ProjectConfiguration> | |
<ProjectConfiguration Include="Release|Win32"> | |
<Configuration>Release</Configuration> | |
<Platform>Win32</Platform> | |
</ProjectConfiguration> | |
<ProjectConfiguration Include="Debug|x64"> | |
<Configuration>Debug</Configuration> | |
<Platform>x64</Platform> | |
</ProjectConfiguration> | |
<ProjectConfiguration Include="Release|x64"> | |
<Configuration>Release</Configuration> | |
<Platform>x64</Platform> | |
</ProjectConfiguration> | |
</ItemGroup> | |
<PropertyGroup Label="Globals"> | |
<VCProjectVersion>16.0</VCProjectVersion> | |
<ProjectGuid>{9968AF04-729B-476D-A4C4-9B04DA3745EC}</ProjectGuid> | |
<Keyword>Win32Proj</Keyword> | |
<RootNamespace>ConsoleApplication2</RootNamespace> | |
<WindowsTargetPlatformVersion>10.0</WindowsTargetPlatformVersion> | |
</PropertyGroup> | |
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" /> | |
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration"> | |
<ConfigurationType>Application</ConfigurationType> | |
<UseDebugLibraries>true</UseDebugLibraries> | |
<PlatformToolset>v142</PlatformToolset> | |
<CharacterSet>Unicode</CharacterSet> | |
</PropertyGroup> | |
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration"> | |
<ConfigurationType>Application</ConfigurationType> | |
<UseDebugLibraries>false</UseDebugLibraries> | |
<PlatformToolset>v142</PlatformToolset> | |
<WholeProgramOptimization>true</WholeProgramOptimization> | |
<CharacterSet>Unicode</CharacterSet> | |
</PropertyGroup> | |
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration"> | |
<ConfigurationType>Application</ConfigurationType> | |
<UseDebugLibraries>true</UseDebugLibraries> | |
<PlatformToolset>v142</PlatformToolset> | |
<CharacterSet>Unicode</CharacterSet> | |
</PropertyGroup> | |
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration"> | |
<ConfigurationType>Application</ConfigurationType> | |
<UseDebugLibraries>false</UseDebugLibraries> | |
<PlatformToolset>v142</PlatformToolset> | |
<WholeProgramOptimization>true</WholeProgramOptimization> | |
<CharacterSet>Unicode</CharacterSet> | |
</PropertyGroup> | |
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" /> | |
<ImportGroup Label="ExtensionSettings"> | |
</ImportGroup> | |
<ImportGroup Label="Shared"> | |
</ImportGroup> | |
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'"> | |
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> | |
</ImportGroup> | |
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|Win32'"> | |
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> | |
</ImportGroup> | |
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|x64'"> | |
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> | |
</ImportGroup> | |
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|x64'"> | |
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> | |
</ImportGroup> | |
<PropertyGroup Label="UserMacros" /> | |
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'"> | |
<LinkIncremental>true</LinkIncremental> | |
<OutDir>$(SolutionDir)</OutDir> | |
</PropertyGroup> | |
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'"> | |
<LinkIncremental>true</LinkIncremental> | |
</PropertyGroup> | |
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'"> | |
<LinkIncremental>false</LinkIncremental> | |
</PropertyGroup> | |
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'"> | |
<LinkIncremental>false</LinkIncremental> | |
</PropertyGroup> | |
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'"> | |
<ClCompile> | |
<PrecompiledHeader> | |
</PrecompiledHeader> | |
<WarningLevel>Level3</WarningLevel> | |
<Optimization>Disabled</Optimization> | |
<SDLCheck>true</SDLCheck> | |
<PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions> | |
<RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary> | |
</ClCompile> | |
<Link> | |
<SubSystem>Console</SubSystem> | |
<GenerateDebugInformation>true</GenerateDebugInformation> | |
</Link> | |
</ItemDefinitionGroup> | |
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'"> | |
<ClCompile> | |
<PrecompiledHeader> | |
</PrecompiledHeader> | |
<WarningLevel>Level3</WarningLevel> | |
<Optimization>Disabled</Optimization> | |
<SDLCheck>true</SDLCheck> | |
<PreprocessorDefinitions>_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions> | |
<ConformanceMode>true</ConformanceMode> | |
</ClCompile> | |
<Link> | |
<SubSystem>Console</SubSystem> | |
<GenerateDebugInformation>true</GenerateDebugInformation> | |
</Link> | |
</ItemDefinitionGroup> | |
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'"> | |
<ClCompile> | |
<PrecompiledHeader> | |
</PrecompiledHeader> | |
<WarningLevel>Level3</WarningLevel> | |
<Optimization>MaxSpeed</Optimization> | |
<FunctionLevelLinking>true</FunctionLevelLinking> | |
<IntrinsicFunctions>true</IntrinsicFunctions> | |
<SDLCheck>true</SDLCheck> | |
<PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions> | |
<ConformanceMode>true</ConformanceMode> | |
</ClCompile> | |
<Link> | |
<SubSystem>Console</SubSystem> | |
<EnableCOMDATFolding>true</EnableCOMDATFolding> | |
<OptimizeReferences>true</OptimizeReferences> | |
<GenerateDebugInformation>true</GenerateDebugInformation> | |
</Link> | |
</ItemDefinitionGroup> | |
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'"> | |
<ClCompile> | |
<PrecompiledHeader> | |
</PrecompiledHeader> | |
<WarningLevel>Level3</WarningLevel> | |
<Optimization>MaxSpeed</Optimization> | |
<FunctionLevelLinking>true</FunctionLevelLinking> | |
<IntrinsicFunctions>true</IntrinsicFunctions> | |
<SDLCheck>true</SDLCheck> | |
<PreprocessorDefinitions>NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions> | |
<ConformanceMode>true</ConformanceMode> | |
</ClCompile> | |
<Link> | |
<SubSystem>Console</SubSystem> | |
<EnableCOMDATFolding>true</EnableCOMDATFolding> | |
<OptimizeReferences>true</OptimizeReferences> | |
<GenerateDebugInformation>true</GenerateDebugInformation> | |
</Link> | |
</ItemDefinitionGroup> | |
<ItemGroup> | |
<ClCompile Include="ConsoleApplication3.cpp" /> | |
</ItemGroup> | |
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" /> | |
<ImportGroup Label="ExtensionTargets"> | |
</ImportGroup> | |
</Project> |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<?xml version="1.0" encoding="utf-8"?> | |
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> | |
<ItemGroup> | |
<Filter Include="Source Files"> | |
<UniqueIdentifier>{4FC737F1-C7A5-4376-A066-2A32D752A2FF}</UniqueIdentifier> | |
<Extensions>cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx</Extensions> | |
</Filter> | |
<Filter Include="Header Files"> | |
<UniqueIdentifier>{93995380-89BD-4b04-88EB-625FBE52EBFB}</UniqueIdentifier> | |
<Extensions>h;hh;hpp;hxx;hm;inl;inc;ipp;xsd</Extensions> | |
</Filter> | |
<Filter Include="Resource Files"> | |
<UniqueIdentifier>{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}</UniqueIdentifier> | |
<Extensions>rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms</Extensions> | |
</Filter> | |
</ItemGroup> | |
<ItemGroup> | |
<ClCompile Include="ConsoleApplication3.cpp"> | |
<Filter>Source Files</Filter> | |
</ClCompile> | |
</ItemGroup> | |
</Project> |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment