X-Git-Url: http://g0dil.de/git?a=blobdiff_plain;f=Scheduler%2FWriteHelper.ct;h=fadb65f441effc34576ea42a22f7e4c6f6b471b6;hb=db007c39287e3c666dd6b53edc8c3404617c7dd5;hp=9dfa7479367a818fafb89ffb6454b1de154b0b4c;hpb=8421c3a8da7485cb8781045494ecaab3ed84f403;p=senf.git diff --git a/Scheduler/WriteHelper.ct b/Scheduler/WriteHelper.ct index 9dfa747..fadb65f 100644 --- a/Scheduler/WriteHelper.ct +++ b/Scheduler/WriteHelper.ct @@ -25,17 +25,17 @@ // Custom includes #include -#include "Utils/Exception.hh" +#include "../Utils/Exception.hh" #include "Scheduler.hh" #define prefix_ ///////////////////////////////ct.p//////////////////////////////////////// template -prefix_ senf::WriteHelper::WriteHelper(Handle handle, std::string data, +prefix_ senf::WriteHelper::WriteHelper(Handle handle, std::string const & data, Callback callback) : handle_(handle), data_(data), callback_(callback), - offset_(0), errno_(0) + offset_(data_.begin()), errno_(0) { senf::Scheduler::instance() .add(handle_, boost::bind(&WriteHelper::dispatchProcess, ptr(this), _1, _2), @@ -46,9 +46,9 @@ template prefix_ std::string const & senf::WriteHelper::data() const { - if (offset_ > 0) { - data_.erase(0,offset_); - offset_ = 0; + if (offset_ > data_.begin()) { + data_.erase(data_.begin(),offset_); + offset_ = data_.begin(); } return data_; } @@ -78,15 +78,16 @@ prefix_ void senf::WriteHelper::process(Handle handle, bool complete_ (false); try { if (event != senf::Scheduler::EV_WRITE) - throw senf::SystemException(EPIPE); - offset_ += handle.write(data_.data()+offset_,data_.size()-offset_); - if (offset_ >= data_.size()) { + throw SystemException(EPIPE SENF_EXC_DEBUGINFO); + offset_ = handle.write(std::make_pair(offset_,data_.end())); + if (offset_ == data_.end()) { data_.erase(); + offset_ = data_.begin(); complete_ = true; } } catch (senf::SystemException const & ex) { - errno_ = ex.err; + errno_ = ex.errorNumber(); done(); return; } @@ -111,4 +112,6 @@ prefix_ void senf::WriteHelper::done() // c-file-style: "senf" // indent-tabs-mode: nil // ispell-local-dictionary: "american" +// compile-command: "scons -u test" +// comment-column: 40 // End: