From b3ef0fc8daa41e433f1919a4933a1cc047f59341 Mon Sep 17 00:00:00 2001 From: Adrian Kummerlaender Date: Sat, 20 Feb 2016 22:30:11 +0100 Subject: Interpose `open` library function `open` is not as side effect free as I had imagined - i.e. if the flag `O_TRUNC` is passed it truncates the file contents alongside opening the file descriptor. In practice this is done by _emacs_ prior to writing the new file content and as such needs to be intercepted so we can start tracking the file before it is changed. Interposing `open` required some changes to make the library work without including `fcntl.h`. This header not only defines some of the flags we require to check if a library call actually is able to change files but also defines the `open` library function. While implementing this change I noticed that the function interpositions implemented in C++ actually need to be declared as `external "C"` so their names do not get wrangled during compilation. I suspect that this was previously implicitly done for e.g. `mmap` and `write` by the included C standard library headers. However this did not work for `open` which is why all function interpositions are now explicitly declared external. End result: _emacs_ file changes are now tracked correctly. --- src/utility/logger.h | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) (limited to 'src/utility/logger.h') diff --git a/src/utility/logger.h b/src/utility/logger.h index 0dd88a6..229032c 100644 --- a/src/utility/logger.h +++ b/src/utility/logger.h @@ -5,7 +5,8 @@ #include -#include +#include +#include namespace utility { -- cgit v1.2.3