diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/actual_function.h | 6 | ||||
-rw-r--r-- | src/change_log.cc | 12 |
2 files changed, 18 insertions, 0 deletions
diff --git a/src/actual_function.h b/src/actual_function.h index 0ffe0c2..8229ccf 100644 --- a/src/actual_function.h +++ b/src/actual_function.h @@ -7,6 +7,7 @@ #include <dlfcn.h> #include <sys/mman.h> +#include <sys/uio.h> #include <memory> #include <cstring> @@ -31,6 +32,11 @@ namespace actual { int, const void*, size_t >("write"); + static auto writev = get_actual_function< + ssize_t, + int, const iovec*, int + >("writev"); + static auto rename = get_actual_function< int, const char*, const char* diff --git a/src/change_log.cc b/src/change_log.cc index 4caaa6a..a060c91 100644 --- a/src/change_log.cc +++ b/src/change_log.cc @@ -44,6 +44,18 @@ ssize_t write(int fd, const void* buffer, size_t count) { return actual::write(fd, buffer, count); } +ssize_t writev(int fd, const iovec* iov, int iovcnt) { + if ( fd != *fd_guard && utility::is_regular_file(fd) ) { + const std::string file_name{ utility::get_file_name(fd) }; + + if ( !tracker->is_tracked(file_name) ) { + tracker->track(file_name); + } + } + + return actual::writev(fd, iov, iovcnt); +} + int rename(const char* old_path, const char* new_path) { if ( !tracker->is_tracked(old_path) ) { tracker->track(old_path); |