blob: 8ceca0e47db870e4102ee754906b658e88e020cb [file] [log] [blame]
Dmitry V. Levin99db95d2014-02-05 04:13:18 +00001#include "defs.h"
Dmitry V. Levin99db95d2014-02-05 04:13:18 +00002
Dmitry V. Levin0ed617b2014-04-25 23:30:54 +00003#include "xlat/fan_classes.h"
Dmitry V. Levin0ed617b2014-04-25 23:30:54 +00004#include "xlat/fan_init_flags.h"
Dmitry V. Levin99db95d2014-02-05 04:13:18 +00005
Dmitry V. Levin34bbcc62015-02-19 21:55:09 +00006#ifndef FAN_ALL_CLASS_BITS
7# define FAN_ALL_CLASS_BITS (FAN_CLASS_NOTIF | FAN_CLASS_CONTENT | FAN_CLASS_PRE_CONTENT)
8#endif
9#ifndef FAN_NOFD
10# define FAN_NOFD -1
11#endif
12
Dmitry V. Levina0bd3742015-04-07 01:36:50 +000013SYS_FUNC(fanotify_init)
Dmitry V. Levin99db95d2014-02-05 04:13:18 +000014{
15 unsigned flags;
16
17 if (exiting(tcp))
18 return 0;
19
20 flags = tcp->u_arg[0];
21 printxval(fan_classes, flags & FAN_ALL_CLASS_BITS, "FAN_CLASS_???");
22 flags &= ~FAN_ALL_CLASS_BITS;
23 if (flags) {
24 tprints("|");
25 printflags(fan_init_flags, flags, "FAN_???");
26 }
27 tprints(", ");
28 tprint_open_modes((unsigned) tcp->u_arg[1]);
29
30 return 0;
31}
32
Dmitry V. Levin0ed617b2014-04-25 23:30:54 +000033#include "xlat/fan_mark_flags.h"
Dmitry V. Levin0ed617b2014-04-25 23:30:54 +000034#include "xlat/fan_event_flags.h"
Dmitry V. Levin99db95d2014-02-05 04:13:18 +000035
Dmitry V. Levina0bd3742015-04-07 01:36:50 +000036SYS_FUNC(fanotify_mark)
Dmitry V. Levin99db95d2014-02-05 04:13:18 +000037{
Dmitry V. Levin1ea64732015-01-10 00:08:58 +000038 unsigned long long mask = 0;
39 int argn;
40
Dmitry V. Levin99db95d2014-02-05 04:13:18 +000041 if (exiting(tcp))
42 return 0;
43
44 printfd(tcp, tcp->u_arg[0]);
45 tprints(", ");
46 printflags(fan_mark_flags, (unsigned) tcp->u_arg[1], "FAN_MARK_???");
47 tprints(", ");
Dmitry V. Levin1ea64732015-01-10 00:08:58 +000048 /*
49 * the mask argument is defined as 64-bit,
50 * but kernel uses the lower 32 bits only.
51 */
52 argn = getllval(tcp, &mask, 2);
Mike Frysinger28e3d6f2015-02-26 14:16:13 -050053#ifdef HPPA
54 /* Parsic is weird. See arch/parisc/kernel/sys_parisc32.c. */
55 mask = (mask << 32) | (mask >> 32);
56#endif
Dmitry V. Levin1ea64732015-01-10 00:08:58 +000057 printflags(fan_event_flags, mask, "FAN_???");
Dmitry V. Levin99db95d2014-02-05 04:13:18 +000058 tprints(", ");
Dmitry V. Levin1ea64732015-01-10 00:08:58 +000059 if ((int) tcp->u_arg[argn] == FAN_NOFD)
Dmitry V. Levin99db95d2014-02-05 04:13:18 +000060 tprints("FAN_NOFD, ");
61 else
Dmitry V. Levin1ea64732015-01-10 00:08:58 +000062 print_dirfd(tcp, tcp->u_arg[argn]);
63 printpath(tcp, tcp->u_arg[argn + 1]);
Dmitry V. Levin99db95d2014-02-05 04:13:18 +000064
65 return 0;
66}