X-Git-Url: http://git.code-monkey.de/?a=blobdiff_plain;f=pv%2Fdevices%2Finputfile.cpp;h=1bf34bad22a33bc0307199657bfe5ecf8dc9ef3d;hb=3b0acbcbcd902ac61a3841e7c558cbc5f8448b7f;hp=c30bcd33db570d1b56ff219b94928b322dc57924;hpb=cda515676ce6c2fa81e1cecacba3ea26ec2ee50e;p=pulseview.git diff --git a/pv/devices/inputfile.cpp b/pv/devices/inputfile.cpp index c30bcd3..1bf34ba 100644 --- a/pv/devices/inputfile.cpp +++ b/pv/devices/inputfile.cpp @@ -14,26 +14,34 @@ * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + * along with this program; if not, see . */ #include #include +#include #include #include "inputfile.hpp" +using std::map; +using std::shared_ptr; +using std::streamsize; +using std::string; +using std::ifstream; +using std::ios; +using std::vector; + namespace pv { namespace devices { -const std::streamsize InputFile::BufferSize = 16384; +const streamsize InputFile::BufferSize = 16384; -InputFile::InputFile(const std::shared_ptr &context, - const std::string &file_name, - std::shared_ptr format, - const std::map &options) : +InputFile::InputFile(const shared_ptr &context, + const string &file_name, + shared_ptr format, + const map &options) : File(file_name), context_(context), format_(format), @@ -56,19 +64,20 @@ void InputFile::open() // open() should add the input device to the session but // we can't open the device without sending some data first - f = new std::ifstream(file_name_, std::ios::binary); + f = new ifstream(file_name_, ios::binary); + + vector buffer(BufferSize); - char buffer[BufferSize]; - f->read(buffer, BufferSize); - const std::streamsize size = f->gcount(); + f->read(buffer.data(), BufferSize); + const streamsize size = f->gcount(); if (size == 0) return; - input_->send(buffer, size); + input_->send(buffer.data(), size); try { device_ = input_->device(); - } catch (sigrok::Error) { + } catch (sigrok::Error&) { return; } @@ -87,22 +96,22 @@ void InputFile::start() void InputFile::run() { - char buffer[BufferSize]; - if (!f) { // Previous call to run() processed the entire file already - f = new std::ifstream(file_name_, std::ios::binary); + f = new ifstream(file_name_, ios::binary); input_->reset(); } + vector buffer(BufferSize); + interrupt_ = false; while (!interrupt_ && !f->eof()) { - f->read(buffer, BufferSize); - const std::streamsize size = f->gcount(); + f->read(buffer.data(), BufferSize); + const streamsize size = f->gcount(); if (size == 0) break; - input_->send(buffer, size); + input_->send(buffer.data(), size); if (size != BufferSize) break;