bool Popen(const std::string& Cmd, llvm::SmallVectorImpl<char>& Buf, bool RdE) { if (FILE *PF = ::popen(RdE ? (Cmd + " 2>&1").c_str() : Cmd.c_str(), "r")) { Buf.resize(0); const size_t Chunk = Buf.capacity_in_bytes(); while (true) { const size_t Len = Buf.size(); Buf.resize(Len + Chunk); const size_t R = ::fread(&Buf[Len], sizeof(char), Chunk, PF); if (R < Chunk) { Buf.resize(Len + R); break; } } ::pclose(PF); return !Buf.empty(); } return false; }