From 6a815262548e55973ebcb33a8e6f42a10e553f2f Mon Sep 17 00:00:00 2001 From: arunmu Date: Wed, 16 Mar 2016 14:14:11 +0530 Subject: [PATCH] Refactored Buffer --- main | Bin 97060 -> 92956 bytes subprocess.hpp | 86 ++++++++++++++++++++++++++++------------ test/test_subprocess.cc | 2 +- 3 files changed, 61 insertions(+), 27 deletions(-) diff --git a/main b/main index f1114b00c8a44957c27e803f2cd2e8f39c8c6641..7b9ba6df6efa5405312df1535a62410259894706 100755 GIT binary patch delta 22510 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 QFJl9?6_v7`9q@kpKRET6&Hw-a delta 23290 zcmeHvd3;pGvj6Fm1j3pH0)YgWum)L70)Zd`xk_}9#jq)gNFWIYWeE^u5u6DynsGQ1 zY~w`S;=3;Bb%~CVpbmyL(Tg&uSA!r1h08%vf)_C2!uwWtpCk;t_x}9-^P3NSs=rm$ z)z$0iuF3H9mtikl2rG6+MKbNOPvqt;!=lSOXd3Yoe~_~B4x7Il9bNmUAJ1Mw@Uh( zk^=K(`ly)NcCyrQCcOmD@tm>O`1 zQXtX-={4>T8E7dMDPiPQ6yM-uzUkZ3ci1zy_Lzo}bZ^X^EiD-b~9wCFTI8WnrLbP-2malbIHV z@*8hvTImo?YXe>;5`CUh$p-p9pA*(2tnP12yN|oVMn4Y$y-3;QCiT`f^*Y z3DqZ_JyL{{(q222PvjPx6^<)&$mSm*B|_z*GG2jlJ~u)xm|4=E?qiBE>)60 z?rJmSd)_UooBrL;{Q9WH`iSrO>ruU<4jhJh>QGFB3zE#|Pu5B=b8dFD{ zrHW&s1@UX(njOF6Nzo~`MKEze=&=YF4gIOMc-TEs>D^;|U3A~*w~s1|9{(Ry_MKz= zz386$yrcYR^x!U8FyVFuepMc$teupSkMcepuF=De@yQ)V=-<`xjUD>vLymD@hq-#I zI^MZsH~rj?d|1cD`j|TYa>w3L$E;dpYnNv`uk9kzDILebd_0G8c8\-)>Z7!46uJ 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 diff --git a/subprocess.hpp b/subprocess.hpp index cfd5d3f..1c00d0f 100755 --- a/subprocess.hpp +++ b/subprocess.hpp @@ -21,10 +21,6 @@ extern "C" { namespace subprocess { -using Buffer = std::vector; -using OutBuffer = std::vector; -using ErrBuffer = std::vector; - // Max buffer size allocated on stack for read error // from pipe static const size_t SP_MAX_ERR_BUF_SIZ = 1024; @@ -271,6 +267,22 @@ struct error }; // ~~~~ End Popen Args ~~~~ +// + + +class Buffer +{ +public: + Buffer() {} + Buffer(size_t cap) { buf.resize(cap); } + void add_cap(size_t cap) { buf.resize(cap); } +public: + std::vector buf; + size_t length = 0; +}; + +using OutBuffer = Buffer; +using ErrBuffer = Buffer; // Fwd Decl. class Popen; @@ -323,10 +335,10 @@ public: void operator=(const Communication&) = delete; public: int send(const char* msg, size_t length); - int send(const Buffer& msg); + int send(const std::vector& msg); std::pair communicate(const char* msg, size_t length); - std::pair communicate(const Buffer& msg) + std::pair communicate(const std::vector& msg) { return communicate(msg.data(), msg.size()); } void set_out_buf_cap(size_t cap) { out_buf_cap_ = cap; } @@ -393,13 +405,13 @@ public: /* Communication forwarding API's */ int send(const char* msg, size_t length) { return comm_.send(msg, length); } - int send(const Buffer& msg) + int send(const std::vector& msg) { return comm_.send(msg); } std::pair communicate(const char* msg, size_t length) { return comm_.communicate(msg, length); } - std::pair communicate(const Buffer& msg) + std::pair communicate(const std::vector& msg) { return comm_.communicate(msg); } @@ -469,13 +481,13 @@ public: int send(const char* msg, size_t length) { return stream_.send(msg, length); } - int send(const Buffer& msg) + int send(const std::vector& msg) { return stream_.send(msg); } std::pair communicate(const char* msg, size_t length) { return stream_.communicate(msg, length); } - std::pair communicate(const Buffer& msg) + std::pair communicate(const std::vector& msg) { return stream_.communicate(msg); } private: @@ -574,7 +586,11 @@ void Popen::execute_process() throw (CalledProcessError, OSError) try { char err_buf[SP_MAX_ERR_BUF_SIZ] = {0,}; - int read_bytes = util::read_atmost_n(err_rd_pipe, err_buf, SP_MAX_ERR_BUF_SIZ); + + int read_bytes = util::read_atmost_n( + err_rd_pipe, + err_buf, + SP_MAX_ERR_BUF_SIZ); close(err_rd_pipe); if (read_bytes || strlen(err_buf)) { @@ -755,7 +771,7 @@ namespace detail { return std::fwrite(msg, sizeof(char), length, stream_->input()); } - int Communication::send(const Buffer& msg) + int Communication::send(const std::vector& msg) { return send(msg.data(), msg.size()); } @@ -787,9 +803,13 @@ namespace detail { // Read till EOF // ATTN: This could be blocking, if the process // at the other end screws up, we get screwed up as well - obuf.resize(out_buf_cap_); - int rbytes = util::read_atmost_n(fileno(stream_->output()), - (char*)obuf.data(), obuf.size()); + obuf.add_cap(out_buf_cap_); + + int rbytes = util::read_atmost_n( + fileno(stream_->output()), + obuf.buf.data(), + obuf.buf.size()); + if (rbytes == -1) { throw OSError("read to obuf failed", errno); } @@ -797,9 +817,13 @@ namespace detail { stream_->output_.reset(); } else if (stream_->error()) { // Same screwness applies here as well - ebuf.resize(err_buf_cap_); - int rbytes = util::read_atmost_n(fileno(stream_->error()), - (char*)ebuf.data(), ebuf.size()); + ebuf.add_cap(err_buf_cap_); + + int rbytes = util::read_atmost_n( + fileno(stream_->error()), + ebuf.buf.data(), + ebuf.buf.size()); + if (rbytes == -1) { throw OSError("read to ebuf failed", errno); } @@ -822,16 +846,26 @@ namespace detail { std::vector bg_threads; if (stream_->output()) { - obuf.resize(out_buf_cap_); - bg_threads.push_back(std::thread( - util::read_atmost_n, fileno(stream_->output()), - (char*)obuf.data(), obuf.size())); + obuf.add_cap(out_buf_cap_); + + bg_threads.push_back( + std::thread( + util::read_atmost_n, + fileno(stream_->output()), + obuf.buf.data(), + obuf.buf.size()) + ); } if (stream_->error()) { - ebuf.resize(err_buf_cap_); - bg_threads.push_back(std::thread( - util::read_atmost_n, fileno(stream_->error()), - (char*)ebuf.data(), ebuf.size())); + ebuf.add_cap(err_buf_cap_); + + bg_threads.push_back( + std::thread( + util::read_atmost_n, + fileno(stream_->error()), + ebuf.buf.data(), + ebuf.buf.size()) + ); } if (stream_->input()) { if (msg) { diff --git a/test/test_subprocess.cc b/test/test_subprocess.cc index f3a6ac1..58ec7d8 100755 --- a/test/test_subprocess.cc +++ b/test/test_subprocess.cc @@ -9,7 +9,7 @@ void test_input() const char* msg = "one\ntwo\nthree\nfour\nfive\n"; p.send(msg, strlen(msg)); auto res = p.communicate(nullptr, 0); - std::cout << res.first.data() << std::endl; + std::cout << res.first.buf.data() << std::endl; } int main() {