path: root/procfs.h
diff options
authorJeremie Koenig <>2010-08-17 17:27:54 +0000
committerJeremie Koenig <>2010-08-30 14:14:48 +0200
commitba139824fa06a97f2a3b1cc4c6085d10a83ec2b9 (patch)
treecab204b860507636bf9a42fb5cc3368b29f9ba99 /procfs.h
parentac75e3648e6a9c3a8cf45d5fa491abd3a3ab3613 (diff)
More cleanup possibilities
* procfs.c, procfs.h: Extend the signature of the cleanup_contents callback in the procfs_node_ops structure to include the hook and contents_len. (cleanup_contents_with_free, cleanup_contents_with_vm_deallocate): New functions, can be used as a cleanup_contents callback for simple cases. * procfs_dir.c, procfs_dir.h (procfs_dir_make_node): Update, add a cleanup callback, make sure the cleanup callback is invoked if there is an error. * proclist.c (proclist_make_node), main.c (main): Update to match the new interfaces.
Diffstat (limited to 'procfs.h')
1 files changed, 5 insertions, 1 deletions
diff --git a/procfs.h b/procfs.h
index 21b0f93..3cb3223 100644
--- a/procfs.h
+++ b/procfs.h
@@ -18,7 +18,7 @@ struct procfs_node_ops
you would expect; for directories, they are an argz vector of the
names of the entries. */
error_t (*get_contents) (void *hook, void **contents, size_t *contents_len);
- void (*cleanup_contents) (void *contents);
+ void (*cleanup_contents) (void *hook, void *contents, size_t contents_len);
/* Lookup NAME in this directory, and store the result in *np. The
returned node should be created by lookup() using procfs_make_node()
@@ -29,6 +29,10 @@ struct procfs_node_ops
void (*cleanup) (void *hook);
+/* These helper functions can be used as procfs_node_ops.cleanup_contents. */
+void procfs_cleanup_contents_with_free (void *, void *, size_t);
+void procfs_cleanup_contents_with_vm_deallocate (void *, void *, size_t);
/* Create a new node and return it. Returns NULL if it fails to allocate
enough memory. In this case, ops->cleanup will be invoked. */
struct node *procfs_make_node (const struct procfs_node_ops *ops, void *hook);