[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 llvm-svn: 350228
This commit is contained in:
parent
7341d0a92d
commit
bb1137da12
|
@ -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;
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue