diff options
author | Zeex <zeex@rocketmail.com> | 2020-05-30 19:59:20 +0600 |
---|---|---|
committer | Zeex <zeex@rocketmail.com> | 2020-05-30 20:07:29 +0600 |
commit | 2fe65f1de98ff5f3b1afab6b33b68947b6258f47 (patch) | |
tree | 7cfb84efc2ebb19e6dd61982ac6821e77deb22db | |
parent | 873e7cd795ea7f4a97db7f50c361589626f39cea (diff) | |
download | subhook-2fe65f1de98ff5f3b1afab6b33b68947b6258f47.zip subhook-2fe65f1de98ff5f3b1afab6b33b68947b6258f47.tar.gz subhook-2fe65f1de98ff5f3b1afab6b33b68947b6258f47.tar.bz2 |
Make Install(src, dst, flags) remove existing hook
-rw-r--r-- | subhook.h | 19 |
1 files changed, 12 insertions, 7 deletions
@@ -186,8 +186,13 @@ class Hook { bool Install(void *src, void *dst, HookFlags flags = HookNoFlags) { + if (hook_ != nullptr) { + subhook_remove(hook_); + subhook_free(hook_); + } + hook_ = subhook_new(src, dst, (subhook_flags_t)flags); if (hook_ == nullptr) { - hook_ = subhook_new(src, dst, (subhook_flags_t)flags); + return false; } return Install(); } @@ -211,8 +216,8 @@ class Hook { class ScopedHookRemove { public: ScopedHookRemove(Hook *hook) - : hook_(hook) - , removed_(hook_->Remove()) + : hook_(hook), + removed_(hook_->Remove()) { } @@ -234,8 +239,8 @@ class ScopedHookRemove { class ScopedHookInstall { public: ScopedHookInstall(Hook *hook) - : hook_(hook) - , installed_(hook_->Install()) + : hook_(hook), + installed_(hook_->Install()) { } @@ -243,8 +248,8 @@ class ScopedHookInstall { void *src, void *dst, HookFlags flags = HookNoFlags) - : hook_(hook) - , installed_(hook_->Install(src, dst, flags)) + : hook_(hook), + installed_(hook_->Install(src, dst, flags)) { } |