From e4a23a64faf56b5822fee13d976e038174408238 Mon Sep 17 00:00:00 2001 From: Maxime Coste Date: Fri, 28 May 2021 17:03:06 +1000 Subject: Support opening files bigger than 2 GiB The real technical limit is with lines bigger than 2 GiB and buffers with more than 2 Gi lines, refactor buffer loading to make it possible to load those files. Fix an overflow with the hash_data function at the same time --- src/buffer_manager.cc | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) (limited to 'src/buffer_manager.cc') diff --git a/src/buffer_manager.cc b/src/buffer_manager.cc index 8d17cc76..32d03fc1 100644 --- a/src/buffer_manager.cc +++ b/src/buffer_manager.cc @@ -24,8 +24,7 @@ BufferManager::~BufferManager() ClientManager::instance().clear(true); } -Buffer* BufferManager::create_buffer(String name, Buffer::Flags flags, - StringView data, timespec fs_timestamp) +Buffer* BufferManager::create_buffer(String name, Buffer::Flags flags, BufferLines lines, ByteOrderMark bom, EolFormat eolformat, FsStatus fs_status) { auto path = real_path(parse_filename(name)); for (auto& buf : m_buffers) @@ -35,7 +34,7 @@ Buffer* BufferManager::create_buffer(String name, Buffer::Flags flags, throw runtime_error{"buffer name is already in use"}; } - m_buffers.push_back(std::make_unique(std::move(name), flags, data, fs_timestamp)); + m_buffers.push_back(std::make_unique(std::move(name), flags, lines, bom, eolformat, fs_status)); auto* buffer = m_buffers.back().get(); buffer->on_registered(); @@ -84,8 +83,9 @@ Buffer& BufferManager::get_first_buffer() { if (all_of(m_buffers, [](auto& b) { return (b->flags() & Buffer::Flags::Debug); })) create_buffer("*scratch*", Buffer::Flags::None, - "*** this is a *scratch* buffer which won't be automatically saved ***\n" - "*** use it for notes or open a file buffer with the :edit command ***\n"); + {StringData::create({"*** this is a *scratch* buffer which won't be automatically saved ***\n"}), + StringData::create({"*** use it for notes or open a file buffer with the :edit command ***\n"})}, + ByteOrderMark::None, EolFormat::Lf, {InvalidTime, {}, {}}); return *m_buffers.back(); } -- cgit v1.2.3