2021-05-09 11:30:38 +02:00
|
|
|
/* See LICENSE.txt for the full license governing this code. */
|
2021-04-18 05:35:25 +02:00
|
|
|
/**
|
|
|
|
* \file SDL_visualtest_process.h
|
|
|
|
*
|
|
|
|
* Provides cross-platfrom process launching and termination functionality.
|
|
|
|
*/
|
|
|
|
|
|
|
|
#include <SDL_platform.h>
|
|
|
|
|
|
|
|
#if defined(__WIN32__)
|
2022-07-15 04:00:50 +02:00
|
|
|
#include <windows.h>
|
|
|
|
#include <shlwapi.h>
|
2021-04-18 05:35:25 +02:00
|
|
|
#elif defined(__LINUX__)
|
|
|
|
#include <unistd.h>
|
|
|
|
#else
|
|
|
|
#error "Unsupported platform."
|
|
|
|
#endif
|
|
|
|
|
|
|
|
#ifndef SDL_visualtest_process_h_
|
|
|
|
#define SDL_visualtest_process_h_
|
|
|
|
|
|
|
|
/* Set up for C function definitions, even when using C++ */
|
|
|
|
#ifdef __cplusplus
|
|
|
|
extern "C" {
|
|
|
|
#endif
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Struct to store a platform specific handle to a process.
|
|
|
|
*/
|
|
|
|
typedef struct SDL_ProcessInfo
|
|
|
|
{
|
|
|
|
//#if defined(_WIN32) || defined(__WIN32__)
|
|
|
|
#if defined(__WIN32__)
|
|
|
|
PROCESS_INFORMATION pi;
|
|
|
|
//#elif defined(__linux__)
|
|
|
|
#elif defined(__LINUX__)
|
|
|
|
int pid;
|
|
|
|
#endif
|
|
|
|
} SDL_ProcessInfo;
|
|
|
|
|
|
|
|
/**
|
|
|
|
* This structure stores the exit status (value returned by main()) and
|
|
|
|
* whether the process exited sucessfully or not.
|
|
|
|
*/
|
|
|
|
typedef struct SDL_ProcessExitStatus
|
|
|
|
{
|
|
|
|
int exit_success; /*!< Zero if the process exited successfully */
|
|
|
|
int exit_status; /*!< The exit status of the process. 8-bit value. */
|
|
|
|
} SDL_ProcessExitStatus;
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Launches a process with the given commandline arguments.
|
|
|
|
*
|
|
|
|
* \param file The path to the executable to be launched.
|
|
|
|
* \param args The command line arguments to be passed to the process.
|
|
|
|
* \param pinfo Pointer to an SDL_ProcessInfo object to be populated with
|
|
|
|
* platform specific information about the launched process.
|
|
|
|
*
|
|
|
|
* \return Non-zero on success, zero on failure.
|
|
|
|
*/
|
|
|
|
int SDL_LaunchProcess(char* file, char* args, SDL_ProcessInfo* pinfo);
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Checks if a process is running or not.
|
|
|
|
*
|
|
|
|
* \param pinfo Pointer to SDL_ProcessInfo object of the process that needs to be
|
|
|
|
* checked.
|
|
|
|
*
|
|
|
|
* \return 1 if the process is still running; zero if it is not and -1 if the
|
|
|
|
* status could not be retrieved.
|
|
|
|
*/
|
|
|
|
int SDL_IsProcessRunning(SDL_ProcessInfo* pinfo);
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Kills a currently running process.
|
|
|
|
*
|
|
|
|
* \param pinfo Pointer to a SDL_ProcessInfo object of the process to be terminated.
|
|
|
|
* \param ps Pointer to a SDL_ProcessExitStatus object which will be populated
|
|
|
|
* with the exit status.
|
|
|
|
*
|
|
|
|
* \return 1 on success, 0 on failure.
|
|
|
|
*/
|
|
|
|
int SDL_KillProcess(SDL_ProcessInfo* pinfo, SDL_ProcessExitStatus* ps);
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Cleanly exits the process represented by \c pinfo and stores the exit status
|
|
|
|
* in the exit status object pointed to by \c ps.
|
|
|
|
*
|
|
|
|
* \return 1 on success, 0 on failure.
|
|
|
|
*/
|
|
|
|
int SDL_QuitProcess(SDL_ProcessInfo* pinfo, SDL_ProcessExitStatus* ps);
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Gets the exit status of a process. If the exit status is -1, the process is
|
|
|
|
* still running.
|
|
|
|
*
|
|
|
|
* \param pinfo Pointer to a SDL_ProcessInfo object of the process to be checked.
|
|
|
|
* \param ps Pointer to a SDL_ProcessExitStatus object which will be populated
|
|
|
|
* with the exit status.
|
|
|
|
*
|
|
|
|
* \return 1 on success, 0 on failure.
|
|
|
|
*/
|
|
|
|
int SDL_GetProcessExitStatus(SDL_ProcessInfo* pinfo, SDL_ProcessExitStatus* ps);
|
|
|
|
|
|
|
|
/* Ends C function definitions when using C++ */
|
|
|
|
#ifdef __cplusplus
|
|
|
|
}
|
|
|
|
#endif
|
|
|
|
|
|
|
|
#endif /* SDL_visualtest_process_h_ */
|
|
|
|
|
|
|
|
/* vi: set ts=4 sw=4 expandtab: */
|