From cbc5664d370230803ac25705485ef1c6ed5f8416 Mon Sep 17 00:00:00 2001 From: Alberto Gonzalez Date: Mon, 16 Mar 2020 16:42:04 +0000 Subject: [PATCH] Clean up `exec` code according to review. MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit Co-Authored-By: Miodrag Milanović --- passes/cmds/exec.cc | 23 ++++++++++++++++++----- 1 file changed, 18 insertions(+), 5 deletions(-) diff --git a/passes/cmds/exec.cc b/passes/cmds/exec.cc index ec7b5b377..7b5428f16 100644 --- a/passes/cmds/exec.cc +++ b/passes/cmds/exec.cc @@ -20,7 +20,16 @@ #include "kernel/register.h" #include "kernel/log.h" #include -#include + +#if defined(_WIN32) +# define WIFEXITED(x) 1 +# define WIFSIGNALED(x) 0 +# define WIFSTOPPED(x) 0 +# define WEXITSTATUS(x) ((x) & 0xff) +# define WTERMSIG(x) SIGTERM +#else +# include +#endif USING_YOSYS_NAMESPACE PRIVATE_NAMESPACE_BEGIN @@ -63,7 +72,7 @@ struct ExecPass : public Pass { void execute(std::vector args, RTLIL::Design *design) YS_OVERRIDE { std::string cmd = ""; - char buf[4096] = {}; + char buf[1024] = {}; std::string linebuf = ""; bool flag_cmd = false; bool flag_quiet = false; @@ -139,7 +148,11 @@ struct ExecPass : public Pass { fflush(stdout); bool keep_reading = true; - auto *f = popen(cmd.c_str(), "r"); + int status = 0; + int retval = 0; + +#ifndef EMSCRIPTEN + FILE *f = popen(cmd.c_str(), "r"); if (f == nullptr) log_cmd_error("errno %d after popen() returned NULL.\n", errno); while (keep_reading) { @@ -162,8 +175,8 @@ struct ExecPass : public Pass { pos = linebuf.find('\n'); } } - int status = pclose(f); - int retval = -1; + status = pclose(f); +#endif if(WIFEXITED(status)) { retval = WEXITSTATUS(status); -- 2.30.2