10b57cec5SDimitry Andric //===- FuzzerUtilLinux.cpp - Misc utils for Linux. ------------------------===//
20b57cec5SDimitry Andric //
30b57cec5SDimitry Andric // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
40b57cec5SDimitry Andric // See https://llvm.org/LICENSE.txt for license information.
50b57cec5SDimitry Andric // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
60b57cec5SDimitry Andric //
70b57cec5SDimitry Andric //===----------------------------------------------------------------------===//
80b57cec5SDimitry Andric // Misc utils for Linux.
90b57cec5SDimitry Andric //===----------------------------------------------------------------------===//
105ffd83dbSDimitry Andric #include "FuzzerPlatform.h"
110b57cec5SDimitry Andric #if LIBFUZZER_LINUX || LIBFUZZER_NETBSD || LIBFUZZER_FREEBSD ||                \
12*af732203SDimitry Andric     LIBFUZZER_EMSCRIPTEN
130b57cec5SDimitry Andric #include "FuzzerCommand.h"
140b57cec5SDimitry Andric 
150b57cec5SDimitry Andric #include <stdlib.h>
160b57cec5SDimitry Andric #include <sys/types.h>
170b57cec5SDimitry Andric #include <sys/wait.h>
18480093f4SDimitry Andric #include <unistd.h>
190b57cec5SDimitry Andric 
200b57cec5SDimitry Andric 
210b57cec5SDimitry Andric namespace fuzzer {
220b57cec5SDimitry Andric 
ExecuteCommand(const Command & Cmd)230b57cec5SDimitry Andric int ExecuteCommand(const Command &Cmd) {
240b57cec5SDimitry Andric   std::string CmdLine = Cmd.toString();
250b57cec5SDimitry Andric   int exit_code = system(CmdLine.c_str());
260b57cec5SDimitry Andric   if (WIFEXITED(exit_code))
270b57cec5SDimitry Andric     return WEXITSTATUS(exit_code);
280b57cec5SDimitry Andric   return exit_code;
290b57cec5SDimitry Andric }
300b57cec5SDimitry Andric 
DiscardOutput(int Fd)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 
390b57cec5SDimitry Andric } // namespace fuzzer
400b57cec5SDimitry Andric 
410b57cec5SDimitry Andric #endif
42