29 lines
1.4 KiB
Diff
29 lines
1.4 KiB
Diff
|
diff --git a/src/debug.cpp b/src/debug.cpp
|
||
|
index fa63a3b..1e8f554 100644
|
||
|
--- a/src/debug.cpp
|
||
|
+++ b/src/debug.cpp
|
||
|
@@ -1494,6 +1494,14 @@ std::string game_info::operating_system()
|
||
|
}
|
||
|
|
||
|
#if !defined(__CYGWIN__) && !defined (__ANDROID__) && ( defined (__linux__) || defined(unix) || defined(__unix__) || defined(__unix) || ( defined(__APPLE__) && defined(__MACH__) ) || defined(BSD) ) // linux; unix; MacOs; BSD
|
||
|
+ //
|
||
|
+class FILEDeleter
|
||
|
+{
|
||
|
+ public:
|
||
|
+ void operator()( FILE *f ) const noexcept {
|
||
|
+ pclose( f );
|
||
|
+ }
|
||
|
+};
|
||
|
/** Execute a command with the shell by using `popen()`.
|
||
|
* @param command The full command to execute.
|
||
|
* @note The output buffer is limited to 512 characters.
|
||
|
@@ -1504,7 +1512,7 @@ static std::string shell_exec( const std::string &command )
|
||
|
std::vector<char> buffer( 512 );
|
||
|
std::string output;
|
||
|
try {
|
||
|
- std::unique_ptr<FILE, decltype( &pclose )> pipe( popen( command.c_str(), "r" ), pclose );
|
||
|
+ std::unique_ptr<FILE, FILEDeleter> pipe( popen( command.c_str(), "r" ) );
|
||
|
if( pipe ) {
|
||
|
while( fgets( buffer.data(), buffer.size(), pipe.get() ) != nullptr ) {
|
||
|
output += buffer.data();
|