浏览代码

Return exit code

Daniele Bartolini 11 年之前
父节点
当前提交
d067b9942b
共有 1 个文件被更改,包括 7 次插入3 次删除
  1. 7 3
      engine/core/os.h

+ 7 - 3
engine/core/os.h

@@ -407,15 +407,16 @@ namespace os
 	/// @a args[0] is the path to the program executable,
 	/// @a args[1, 2, ..., n-1] is a list of arguments to pass to the executable,
 	/// @a args[n] is NULL.
-	inline void execute_process(const char* args[])
+	inline int execute_process(const char* args[])
 	{
 #if CROWN_PLATFORM_POSIX
 		pid_t pid = fork();
 		CE_ASSERT(pid != -1, "fork: errno = %d", errno);
 		if (pid)
 		{
-			int32_t dummy;
-			wait(&dummy);
+			int statval;
+			wait(&statval);
+			return (WIFEXITED(statval)) ? WEXITSTATUS(statval) : 1;
 		}
 		else
 		{
@@ -448,9 +449,12 @@ namespace os
 		CE_ASSERT(err != 0, "CreateProcess: GetLastError = %d", GetLastError());
 		CE_UNUSED(err);
 
+		DWORD exitcode = 1;
 		::WaitForSingleObject(process.hProcess, INFINITE);
+  		GetExitCodeProcess(process.hProcess, &exitcode);
 		CloseHandle(process.hProcess);
 		CloseHandle(process.hThread);
+		return (int)exitcode;
 #endif
 	}
 } // namespace os