/core/10.5/fusefs/fuse_knote.h

http://macfuse.googlecode.com/ · C Header · 82 lines · 58 code · 19 blank · 5 comment · 0 complexity · d46807558260e161ffdd7f21905e51a9 MD5 · raw file

  1. /*
  2. * Copyright (C) 2007 Google. All Rights Reserved.
  3. * Amit Singh <singh@>
  4. */
  5. #ifndef _FUSE_KNOTE_H_
  6. #define _FUSE_KNOTE_H_
  7. #include <fuse_param.h>
  8. #if M_MACFUSE_ENABLE_KQUEUE
  9. #include <sys/event.h>
  10. /* What a kludge! */
  11. #ifndef KNOTE
  12. SLIST_HEAD(klist, knote);
  13. struct filterops {
  14. int f_isfd; /* true if ident == filedescriptor */
  15. int (*f_attach)(struct knote *kn);
  16. void (*f_detach)(struct knote *kn);
  17. int (*f_event)(struct knote *kn, long hint);
  18. };
  19. TAILQ_HEAD(kqtailq, knote); /* a list of "queued" events */
  20. struct knote {
  21. int kn_inuse; /* inuse count */
  22. struct kqtailq *kn_tq; /* pointer to tail queue */
  23. TAILQ_ENTRY(knote) kn_tqe; /* linkage for tail queue */
  24. struct kqueue *kn_kq; /* which kqueue we are on */
  25. SLIST_ENTRY(knote) kn_link; /* linkage for search list */
  26. SLIST_ENTRY(knote) kn_selnext; /* klist element chain */
  27. union {
  28. struct fileproc *p_fp; /* file data pointer */
  29. struct proc *p_proc; /* proc pointer */
  30. } kn_ptr;
  31. struct filterops *kn_fop;
  32. int kn_status; /* status bits */
  33. int kn_sfflags; /* saved filter flags */
  34. struct kevent kn_kevent;
  35. caddr_t kn_hook;
  36. int kn_hookid;
  37. int64_t kn_sdata; /* saved data field */
  38. #define kn_id kn_kevent.ident
  39. #define kn_filter kn_kevent.filter
  40. #define kn_flags kn_kevent.flags
  41. #define kn_fflags kn_kevent.fflags
  42. #define kn_data kn_kevent.data
  43. #define kn_fp kn_ptr.p_fp
  44. };
  45. #define KNOTE(list, hint) knote(list, hint)
  46. #define KNOTE_ATTACH(list, kn) knote_attach(list, kn)
  47. #define KNOTE_DETACH(list, kn) knote_detach(list, kn)
  48. extern void knote(struct klist *klist, long hint);
  49. extern int knote_attach(struct klist *list, struct knote *kn);
  50. extern int knote_detach(struct klist *list, struct knote *kn);
  51. #endif /* !KNOTE */
  52. void filt_fusedetach(struct knote *kn);
  53. int filt_fuseread(struct knote *kn, long hint);
  54. int filt_fusewrite(struct knote *kn, long hint);
  55. int filt_fusevnode(struct knote *kn, long hint);
  56. extern struct filterops fuseread_filtops;
  57. extern struct filterops fusewrite_filtops;
  58. extern struct filterops fusevnode_filtops;
  59. #define FUSE_KNOTE(vp, hint) KNOTE(&VTOFUD(vp)->c_knotes, (hint))
  60. #else
  61. #define FUSE_KNOTE(vp, hint) {}
  62. #endif /* M_MACFUSE_ENABLE_KQUEUE */
  63. #endif /* _FUSE_NODE_H_ */