13cab2bb3Spatrick //===- FuzzerUtilLinux.cpp - Misc utils for Linux. ------------------------===// 23cab2bb3Spatrick // 33cab2bb3Spatrick // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 43cab2bb3Spatrick // See https://llvm.org/LICENSE.txt for license information. 53cab2bb3Spatrick // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 63cab2bb3Spatrick // 73cab2bb3Spatrick //===----------------------------------------------------------------------===// 83cab2bb3Spatrick // Misc utils for Linux. 93cab2bb3Spatrick //===----------------------------------------------------------------------===// 101f9cb04fSpatrick #include "FuzzerPlatform.h" 113cab2bb3Spatrick #if LIBFUZZER_LINUX || LIBFUZZER_NETBSD || LIBFUZZER_FREEBSD || \ 12*d89ec533Spatrick LIBFUZZER_EMSCRIPTEN 133cab2bb3Spatrick #include "FuzzerCommand.h" 143cab2bb3Spatrick 153cab2bb3Spatrick #include <stdlib.h> 163cab2bb3Spatrick #include <sys/types.h> 173cab2bb3Spatrick #include <sys/wait.h> 183cab2bb3Spatrick #include <unistd.h> 193cab2bb3Spatrick 203cab2bb3Spatrick 213cab2bb3Spatrick namespace fuzzer { 223cab2bb3Spatrick 233cab2bb3Spatrick int ExecuteCommand(const Command &Cmd) { 243cab2bb3Spatrick std::string CmdLine = Cmd.toString(); 253cab2bb3Spatrick int exit_code = system(CmdLine.c_str()); 263cab2bb3Spatrick if (WIFEXITED(exit_code)) 273cab2bb3Spatrick return WEXITSTATUS(exit_code); 283cab2bb3Spatrick return exit_code; 293cab2bb3Spatrick } 303cab2bb3Spatrick 313cab2bb3Spatrick void DiscardOutput(int Fd) { 323cab2bb3Spatrick FILE* Temp = fopen("/dev/null", "w"); 333cab2bb3Spatrick if (!Temp) 343cab2bb3Spatrick return; 353cab2bb3Spatrick dup2(fileno(Temp), Fd); 363cab2bb3Spatrick fclose(Temp); 373cab2bb3Spatrick } 383cab2bb3Spatrick 393cab2bb3Spatrick } // namespace fuzzer 403cab2bb3Spatrick 413cab2bb3Spatrick #endif 42