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);
|