68 lines
1.7 KiB
C
68 lines
1.7 KiB
C
// SPDX-License-Identifier: GPL-2.0-or-later
|
|
/*
|
|
* inotify testcase common definitions.
|
|
*
|
|
* Copyright (c) 2012-2019 Linux Test Project. All Rights Reserved.
|
|
* Ngie Cooper, April 2012
|
|
*/
|
|
|
|
#ifndef _INOTIFY_H
|
|
#define _INOTIFY_H
|
|
|
|
#include "lapi/syscalls.h"
|
|
|
|
/* inotify(7) wrappers */
|
|
|
|
#if __NR_inotify_init != __LTP__NR_INVALID_SYSCALL
|
|
#define myinotify_init() \
|
|
tst_syscall(__NR_inotify_init)
|
|
#else
|
|
#define myinotify_init() \
|
|
tst_syscall(__NR_inotify_init1, 0)
|
|
#endif
|
|
|
|
#define myinotify_init1(flags) \
|
|
tst_syscall(__NR_inotify_init1, flags)
|
|
|
|
#define myinotify_add_watch(fd, pathname, mask) \
|
|
tst_syscall(__NR_inotify_add_watch, fd, pathname, mask)
|
|
|
|
#define myinotify_rm_watch(fd, wd) \
|
|
tst_syscall(__NR_inotify_rm_watch, fd, wd)
|
|
|
|
static inline int safe_myinotify_init(const char *file, const int lineno, int fd)
|
|
{
|
|
if (fd < 0) {
|
|
if (errno == ENOSYS) {
|
|
tst_brk(TCONF,
|
|
"%s:%d: inotify is not configured in this kernel",
|
|
file, lineno);
|
|
} else {
|
|
tst_brk(TBROK | TERRNO, "%s:%d: inotify_init failed",
|
|
file, lineno);
|
|
}
|
|
}
|
|
return fd;
|
|
}
|
|
|
|
#define SAFE_MYINOTIFY_INIT() \
|
|
safe_myinotify_init(__FILE__, __LINE__, myinotify_init())
|
|
|
|
#define SAFE_MYINOTIFY_INIT1(flags) \
|
|
safe_myinotify_init(__FILE__, __LINE__, myinotify_init1(flags))
|
|
|
|
static inline int safe_myinotify_watch(const char *file, const int lineno, int wd, int fd, const char* fname, const char* mask)
|
|
{
|
|
if (wd < 0) {
|
|
tst_brk(TBROK | TERRNO,
|
|
"%s:%d: inotify_add_watch (%d, %s, %s) failed",
|
|
file, lineno, fd, fname, mask);
|
|
}
|
|
return wd;
|
|
}
|
|
|
|
#define SAFE_MYINOTIFY_ADD_WATCH(fd, pathname, mask) \
|
|
safe_myinotify_watch(__FILE__, __LINE__, myinotify_add_watch(fd, pathname, mask), fd, pathname, #mask)
|
|
|
|
#endif /* _INOTIFY_H */
|