summaryrefslogtreecommitdiff
path: root/procfs_dir.h
blob: 12e99d2a696a9d789094da6b4a4d47fa59d0617b (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
/* This module provides an abstraction layer for implementing simple
   directories with (mostly) static contents.  The user defines the
   contents of the directory by providing a table of entries and various
   optional callback functions.  */

/* These operations define how a given entry will behave.  Either can be
   omitted, both from the entry-specific operations and from the
   directory-wide defaults.  */
struct procfs_dir_entry_ops
{
  /* Called when this entry is looked up to create a corresponding node.  */
  struct node *(*make_node)(void *dir_hook, const void *entry_hook);
  /* If this is provided and returns 0, this entry will be hidden.  */
  int (*exists)(void *dir_hook, const void *entry_hook);
};

/* Describes an individual directory entry, associating a NAME with
 * arbitrary HOOK data and node-specific OPS.  */
struct procfs_dir_entry
{
  const char *name;
  const void *hook;
  struct procfs_dir_entry_ops ops;
};

/* Describes a complete directory. ENTRIES is a table terminated by a
   null NAME field. ENTRY_OPS provides default operations for the
   entries which don't specify them.  The optional CLEANUP function
   should release all the resources associated with the directory hook.  */
struct procfs_dir_ops
{
  const struct procfs_dir_entry *entries;
  void (*cleanup)(void *dir_hook);
  struct procfs_dir_entry_ops entry_ops;
};

/* Create and return a new node for the directory described in OPS.
   The DIR_HOOK is passed the MAKE_NODE callback function of looked up
   entries, as well as to the CLEANUP callback when the node is
   destroyed.  If not enough memory can be allocated, OPS->CLEANUP is
   invoked immediately and NULL is returned.  */
struct node *
procfs_dir_make_node (const struct procfs_dir_ops *ops, void *dir_hook);