fanotify.c revision 34bbcc6270c7c1adc1687e4115aa64a265850730
1#include "defs.h" 2 3#include "xlat/fan_classes.h" 4#include "xlat/fan_init_flags.h" 5 6#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 13int 14sys_fanotify_init(struct tcb *tcp) 15{ 16 unsigned flags; 17 18 if (exiting(tcp)) 19 return 0; 20 21 flags = tcp->u_arg[0]; 22 printxval(fan_classes, flags & FAN_ALL_CLASS_BITS, "FAN_CLASS_???"); 23 flags &= ~FAN_ALL_CLASS_BITS; 24 if (flags) { 25 tprints("|"); 26 printflags(fan_init_flags, flags, "FAN_???"); 27 } 28 tprints(", "); 29 tprint_open_modes((unsigned) tcp->u_arg[1]); 30 31 return 0; 32} 33 34#include "xlat/fan_mark_flags.h" 35#include "xlat/fan_event_flags.h" 36 37int 38sys_fanotify_mark(struct tcb *tcp) 39{ 40 unsigned long long mask = 0; 41 int argn; 42 43 if (exiting(tcp)) 44 return 0; 45 46 printfd(tcp, tcp->u_arg[0]); 47 tprints(", "); 48 printflags(fan_mark_flags, (unsigned) tcp->u_arg[1], "FAN_MARK_???"); 49 tprints(", "); 50 /* 51 * the mask argument is defined as 64-bit, 52 * but kernel uses the lower 32 bits only. 53 */ 54 argn = getllval(tcp, &mask, 2); 55 printflags(fan_event_flags, mask, "FAN_???"); 56 tprints(", "); 57 if ((int) tcp->u_arg[argn] == FAN_NOFD) 58 tprints("FAN_NOFD, "); 59 else 60 print_dirfd(tcp, tcp->u_arg[argn]); 61 printpath(tcp, tcp->u_arg[argn + 1]); 62 63 return 0; 64} 65