110ab2aceSGeorge Karpenkov //===- FuzzerUtilLinux.cpp - Misc utils for Linux. ------------------------===//
210ab2aceSGeorge Karpenkov //
32946cd70SChandler Carruth // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
42946cd70SChandler Carruth // See https://llvm.org/LICENSE.txt for license information.
52946cd70SChandler Carruth // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
610ab2aceSGeorge Karpenkov //
710ab2aceSGeorge Karpenkov //===----------------------------------------------------------------------===//
810ab2aceSGeorge Karpenkov // Misc utils for Linux.
910ab2aceSGeorge Karpenkov //===----------------------------------------------------------------------===//
10226866e1SDokyung Song #include "FuzzerPlatform.h"
119802089eSVitaly Buka #if LIBFUZZER_LINUX || LIBFUZZER_NETBSD || LIBFUZZER_FREEBSD ||                \
12*53065c54SDavid Carlier     LIBFUZZER_EMSCRIPTEN
1304304d12SMatt Morehouse #include "FuzzerCommand.h"
1410ab2aceSGeorge Karpenkov 
1510ab2aceSGeorge Karpenkov #include <stdlib.h>
1663f48717SKostya Serebryany #include <sys/types.h>
1763f48717SKostya Serebryany #include <sys/wait.h>
18e5b603a4SMarco Vanotti #include <unistd.h>
1963f48717SKostya Serebryany 
2010ab2aceSGeorge Karpenkov 
2110ab2aceSGeorge Karpenkov namespace fuzzer {
2210ab2aceSGeorge Karpenkov 
ExecuteCommand(const Command & Cmd)2304304d12SMatt Morehouse int ExecuteCommand(const Command &Cmd) {
2404304d12SMatt Morehouse   std::string CmdLine = Cmd.toString();
2563f48717SKostya Serebryany   int exit_code = system(CmdLine.c_str());
2663f48717SKostya Serebryany   if (WIFEXITED(exit_code))
2763f48717SKostya Serebryany     return WEXITSTATUS(exit_code);
2863f48717SKostya Serebryany   return exit_code;
2910ab2aceSGeorge Karpenkov }
3010ab2aceSGeorge Karpenkov 
DiscardOutput(int Fd)31e5b603a4SMarco Vanotti void DiscardOutput(int Fd) {
32e5b603a4SMarco Vanotti   FILE* Temp = fopen("/dev/null", "w");
33e5b603a4SMarco Vanotti   if (!Temp)
34e5b603a4SMarco Vanotti     return;
35e5b603a4SMarco Vanotti   dup2(fileno(Temp), Fd);
36e5b603a4SMarco Vanotti   fclose(Temp);
37e5b603a4SMarco Vanotti }
38e5b603a4SMarco Vanotti 
3910ab2aceSGeorge Karpenkov } // namespace fuzzer
4010ab2aceSGeorge Karpenkov 
419802089eSVitaly Buka #endif
42