diff options
author | Michal Gorny <mgorny@gentoo.org> | 2019-01-02 17:36:50 +0000 |
---|---|---|
committer | Michal Gorny <mgorny@gentoo.org> | 2019-01-02 17:36:50 +0000 |
commit | b7de60bbc7db22341dfd9fdc176645e63d5b9035 (patch) | |
tree | 1776a836b953e70ba7f6c5fe0994e818cd91a56c /lib/sanitizer_common/sanitizer_common_interceptors.inc | |
parent | 90c23495b2d86478f1f6f3c0cc64c089aabe8b12 (diff) | |
download | compiler-rt-b7de60bbc7db22341dfd9fdc176645e63d5b9035.tar.gz |
[sanitizer_common] Fix devname_r() return type on !NetBSD
Update the interceptor for devname_r() to account for correct return
types on different platforms. This function returns int on NetBSD
but char* on FreeBSD/OSX. Noticed by @krytarowski.
Differential Revision: https://reviews.llvm.org/D56150
git-svn-id: https://llvm.org/svn/llvm-project/compiler-rt/trunk@350228 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/sanitizer_common/sanitizer_common_interceptors.inc')
-rw-r--r-- | lib/sanitizer_common/sanitizer_common_interceptors.inc | 15 |
1 files changed, 11 insertions, 4 deletions
diff --git a/lib/sanitizer_common/sanitizer_common_interceptors.inc b/lib/sanitizer_common/sanitizer_common_interceptors.inc index 35e639cd2..bf6dfd1a7 100644 --- a/lib/sanitizer_common/sanitizer_common_interceptors.inc +++ b/lib/sanitizer_common/sanitizer_common_interceptors.inc @@ -7061,12 +7061,19 @@ INTERCEPTOR(char *, devname, u64 dev, u32 type) { #endif #if SANITIZER_INTERCEPT_DEVNAME_R -INTERCEPTOR(int, devname_r, u64 dev, u32 type, char *path, uptr len) { +#if SANITIZER_NETBSD +#define DEVNAME_R_RETTYPE int +#define DEVNAME_R_SUCCESS(x) (!(x)) +#else +#define DEVNAME_R_RETTYPE char* +#define DEVNAME_R_SUCCESS(x) (x) +#endif +INTERCEPTOR(DEVNAME_R_RETTYPE, devname_r, u64 dev, u32 type, char *path, + uptr len) { void *ctx; - int res; COMMON_INTERCEPTOR_ENTER(ctx, devname_r, dev, type, path, len); - res = REAL(devname_r)(dev, type, path, len); - if (!res) + DEVNAME_R_RETTYPE res = REAL(devname_r)(dev, type, path, len); + if (DEVNAME_R_SUCCESS(res)) COMMON_INTERCEPTOR_WRITE_RANGE(ctx, path, REAL(strlen)(path) + 1); return res; } |