1*0b57cec5SDimitry Andric //===- FuzzerUtilLinux.cpp - Misc utils for Linux. ------------------------===// 2*0b57cec5SDimitry Andric // 3*0b57cec5SDimitry Andric // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 4*0b57cec5SDimitry Andric // See https://llvm.org/LICENSE.txt for license information. 5*0b57cec5SDimitry Andric // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 6*0b57cec5SDimitry Andric // 7*0b57cec5SDimitry Andric //===----------------------------------------------------------------------===// 8*0b57cec5SDimitry Andric // Misc utils for Linux. 9*0b57cec5SDimitry Andric //===----------------------------------------------------------------------===// 10*0b57cec5SDimitry Andric #include "FuzzerDefs.h" 11*0b57cec5SDimitry Andric #if LIBFUZZER_LINUX || LIBFUZZER_NETBSD || LIBFUZZER_FREEBSD || \ 12480093f4SDimitry Andric LIBFUZZER_OPENBSD || LIBFUZZER_EMSCRIPTEN 13*0b57cec5SDimitry Andric #include "FuzzerCommand.h" 14*0b57cec5SDimitry Andric 15*0b57cec5SDimitry Andric #include <stdlib.h> 16*0b57cec5SDimitry Andric #include <sys/types.h> 17*0b57cec5SDimitry Andric #include <sys/wait.h> 18480093f4SDimitry Andric #include <unistd.h> 19*0b57cec5SDimitry Andric 20*0b57cec5SDimitry Andric 21*0b57cec5SDimitry Andric namespace fuzzer { 22*0b57cec5SDimitry Andric 23*0b57cec5SDimitry Andric int ExecuteCommand(const Command &Cmd) { 24*0b57cec5SDimitry Andric std::string CmdLine = Cmd.toString(); 25*0b57cec5SDimitry Andric int exit_code = system(CmdLine.c_str()); 26*0b57cec5SDimitry Andric if (WIFEXITED(exit_code)) 27*0b57cec5SDimitry Andric return WEXITSTATUS(exit_code); 28*0b57cec5SDimitry Andric return exit_code; 29*0b57cec5SDimitry Andric } 30*0b57cec5SDimitry Andric 31480093f4SDimitry Andric void DiscardOutput(int Fd) { 32480093f4SDimitry Andric FILE* Temp = fopen("/dev/null", "w"); 33480093f4SDimitry Andric if (!Temp) 34480093f4SDimitry Andric return; 35480093f4SDimitry Andric dup2(fileno(Temp), Fd); 36480093f4SDimitry Andric fclose(Temp); 37480093f4SDimitry Andric } 38480093f4SDimitry Andric 39*0b57cec5SDimitry Andric } // namespace fuzzer 40*0b57cec5SDimitry Andric 41*0b57cec5SDimitry Andric #endif 42