Remove unneeded string copies
This commit is contained in:
parent
7619fcb198
commit
0c3acb74c2
|
@ -121,7 +121,7 @@ void Client::redraw_ifn()
|
|||
context().ui().refresh();
|
||||
}
|
||||
|
||||
static void reload_buffer(Context& context, const String& filename)
|
||||
static void reload_buffer(Context& context, StringView filename)
|
||||
{
|
||||
CharCoord view_pos = context.window().position();
|
||||
ByteCoord cursor_pos = context.selections().main().cursor();
|
||||
|
|
13
src/file.cc
13
src/file.cc
|
@ -132,29 +132,30 @@ String read_file(StringView filename)
|
|||
return read_fd(fd);
|
||||
}
|
||||
|
||||
Buffer* create_buffer_from_file(String filename)
|
||||
Buffer* create_buffer_from_file(StringView filename)
|
||||
{
|
||||
filename = real_path(parse_filename(filename));
|
||||
String real_filename = real_path(parse_filename(filename));
|
||||
|
||||
int fd = open(filename.c_str(), O_RDONLY);
|
||||
int fd = open(real_filename.c_str(), O_RDONLY);
|
||||
if (fd == -1)
|
||||
{
|
||||
if (errno == ENOENT)
|
||||
return nullptr;
|
||||
|
||||
throw file_access_error(filename, strerror(errno));
|
||||
throw file_access_error(real_filename, strerror(errno));
|
||||
}
|
||||
auto close_fd = on_scope_end([&]{ close(fd); });
|
||||
|
||||
struct stat st;
|
||||
fstat(fd, &st);
|
||||
if (S_ISDIR(st.st_mode))
|
||||
throw file_access_error(filename, "is a directory");
|
||||
throw file_access_error(real_filename, "is a directory");
|
||||
|
||||
const char* data = (const char*)mmap(nullptr, st.st_size, PROT_READ, MAP_PRIVATE, fd, 0);
|
||||
auto unmap = on_scope_end([&]{ munmap((void*)data, st.st_size); });
|
||||
|
||||
return create_buffer_from_data({data, data + st.st_size}, filename, Buffer::Flags::File, st.st_mtime);
|
||||
return create_buffer_from_data({data, data + st.st_size}, real_filename,
|
||||
Buffer::Flags::File, st.st_mtime);
|
||||
}
|
||||
|
||||
static void write(int fd, StringView data)
|
||||
|
|
|
@ -36,7 +36,7 @@ String get_kak_binary_path();
|
|||
String read_fd(int fd);
|
||||
String read_file(StringView filename);
|
||||
|
||||
Buffer* create_buffer_from_file(String filename);
|
||||
Buffer* create_buffer_from_file(StringView filename);
|
||||
|
||||
void write_buffer_to_file(Buffer& buffer, StringView filename);
|
||||
void write_buffer_to_fd(Buffer& buffer, int fd);
|
||||
|
|
Loading…
Reference in New Issue
Block a user