From 93719bf042a66459951a26194d43c90687f01d1f Mon Sep 17 00:00:00 2001 From: Josh Holtrop Date: Fri, 23 Mar 2018 20:40:20 -0400 Subject: [PATCH] Print number of lines and bytes written to file --- src/core/Buffer.cc | 12 +++++++++++- src/core/Buffer.h | 2 +- src/gui/Window.cc | 9 +++++++-- 3 files changed, 19 insertions(+), 4 deletions(-) diff --git a/src/core/Buffer.cc b/src/core/Buffer.cc index 8de2d40..3896bb1 100644 --- a/src/core/Buffer.cc +++ b/src/core/Buffer.cc @@ -119,8 +119,9 @@ void Buffer::load_text_in_buffer(uint8_t * buffer, size_t buffer_size, size_t da m_line_endings = text_loader.get_line_endings(); } -bool Buffer::write_to_file(const char * filename) +bool Buffer::write_to_file(const char * filename, size_t * n_lines, size_t * n_bytes) { + size_t l_n_lines = 0; File file; if (!file.open(filename, true)) { @@ -134,6 +135,7 @@ bool Buffer::write_to_file(const char * filename) while (start_of_line.valid()) { + l_n_lines++; Iterator iterator = start_of_line; iterator.go_end_of_line(true); size_t len = iterator.address() - start_of_line.address(); @@ -161,6 +163,14 @@ bool Buffer::write_to_file(const char * filename) start_of_line = iterator; } + if (n_lines != nullptr) + { + *n_lines = l_n_lines; + } + if (n_bytes != nullptr) + { + *n_bytes = bytes_written; + } return true; } diff --git a/src/core/Buffer.h b/src/core/Buffer.h index b762bf0..1fda412 100644 --- a/src/core/Buffer.h +++ b/src/core/Buffer.h @@ -156,7 +156,7 @@ public: Buffer(); Buffer(const char * filename); Buffer(const uint8_t * data, size_t data_length); - bool write_to_file(const char * filename); + bool write_to_file(const char * filename, size_t * n_lines, size_t * n_bytes); std::shared_ptr add_iterator() { diff --git a/src/gui/Window.cc b/src/gui/Window.cc index 43cae4a..a7574f5 100644 --- a/src/gui/Window.cc +++ b/src/gui/Window.cc @@ -649,9 +649,14 @@ void Window::command_write_file(const CommandParser & cp) } if (path != "") { - if (buffer->write_to_file(Path::clean(path).c_str())) + size_t n_lines; + size_t n_bytes; + if (buffer->write_to_file(Path::clean(path).c_str(), &n_lines, &n_bytes)) { - set_status("Wrote file"); + char msg[100]; + sprintf(msg, "Wrote file: %u lines, %u bytes", + (unsigned int)n_lines, (unsigned int)n_bytes); + set_status(msg); } else {