diff options
author | Jeremie Koenig <jk@jk.fr.eu.org> | 2010-08-23 09:06:01 +0000 |
---|---|---|
committer | Jeremie Koenig <jk@jk.fr.eu.org> | 2010-08-30 14:29:53 +0200 |
commit | 687c9658628eb044be75df8074c5983e865b6394 (patch) | |
tree | 38f391e425eba23a4bc569ea251c688786b1ab6f | |
parent | 60f604f96c8f78320d415d92b325d0de80949043 (diff) |
Use a global ps_context
* proclist.c, proclist.h (proclist_create_node): Use a
ps_context passed by the caller; errors are no longer possible, rename
to proclist_make_node and change the signature accordingly.
* rootdir.c, rootdir.h (rootdir_create_node): Likewise.
* main.c (main): Create the ps_context here and pass it to
root_make_node. (root_make_node): Pass it to proclist_make_node and
rootdir_make_node.
-rw-r--r-- | main.c | 35 | ||||
-rw-r--r-- | proclist.c | 15 | ||||
-rw-r--r-- | proclist.h | 6 | ||||
-rw-r--r-- | rootdir.c | 13 | ||||
-rw-r--r-- | rootdir.h | 6 |
5 files changed, 36 insertions, 39 deletions
@@ -4,6 +4,7 @@ #include <error.h> #include <argp.h> #include <hurd/netfs.h> +#include <ps.h> #include "procfs.h" #include "proclist.h" #include "rootdir.h" @@ -94,38 +95,42 @@ struct argp argp = { }; error_t -root_make_node (struct node **np) +root_make_node (struct ps_context *pc, struct node **np) { /* We never have two root nodes alive simultaneously, so it's ok to have this as static data. */ static struct node *root_dirs[3]; - error_t err; - err = proclist_create_node (getproc (), &root_dirs[0]); - if (err) - return err; + root_dirs[0] = proclist_make_node (pc); + if (! root_dirs[0]) + goto nomem; - err = rootdir_create_node (&root_dirs[1]); - if (err) - { - netfs_nrele (root_dirs[0]); - return err; - } + root_dirs[1] = rootdir_make_node (pc); + if (! root_dirs[1]) + goto nomem; root_dirs[2] = NULL; *np = dircat_make_node (root_dirs); if (! *np) - return ENOMEM; + goto nomem; /* Since this one is not created through proc_lookup(), we have to affect an inode number to it. */ (*np)->nn_stat.st_ino = * (uint32_t *) "PROC"; return 0; + +nomem: + if (root_dirs[1]) + netfs_nrele (root_dirs[1]); + if (root_dirs[0]) + netfs_nrele (root_dirs[0]); + return ENOMEM; } int main (int argc, char **argv) { + struct ps_context *pc; mach_port_t bootstrap; error_t err; @@ -137,12 +142,16 @@ int main (int argc, char **argv) if (err) error (1, err, "Could not parse command line"); + err = ps_context_create (getproc (), &pc); + if (err) + error (1, err, "Could not create libps context"); + task_get_bootstrap_port (mach_task_self (), &bootstrap); if (bootstrap == MACH_PORT_NULL) error (1, 0, "Must be started as a translator"); netfs_init (); - err = root_make_node (&netfs_root_node); + err = root_make_node (pc, &netfs_root_node); if (err) error (1, err, "Could not create the root node"); @@ -62,24 +62,15 @@ proclist_lookup (void *hook, const char *name, struct node **np) return process_lookup_pid (pc, pid, np); } -error_t -proclist_create_node (process_t procserv, struct node **np) +struct node * +proclist_make_node (struct ps_context *pc) { static const struct procfs_node_ops ops = { .get_contents = proclist_get_contents, .lookup = proclist_lookup, .cleanup_contents = procfs_cleanup_contents_with_free, - .cleanup = (void (*)(void *)) ps_context_free, .enable_refresh_hack_and_break_readdir = 1, }; - struct ps_context *pc; - error_t err; - - err = ps_context_create (procserv, &pc); - if (err) - return err; - - *np = procfs_make_node (&ops, pc); - return 0; + return procfs_make_node (&ops, pc); } @@ -1,2 +1,4 @@ -#include <hurd/hurd_types.h> -error_t proclist_create_node (process_t procserv, struct node **np); +#include <ps.h> + +struct node * +proclist_make_node (struct ps_context *pc); @@ -357,22 +357,15 @@ static const struct procfs_dir_entry rootdir_entries[] = { {} }; -error_t -rootdir_create_node (struct node **np) +struct node +*rootdir_make_node (struct ps_context *pc) { - struct ps_context *pc; const struct procfs_dir_entry *entries; - error_t err; - - err = ps_context_create (getproc (), &pc); - if (err) - return err; entries = rootdir_entries; if (opt_fake_self < 0) entries++; - *np = procfs_dir_make_node (entries, pc, (void (*)(void *)) ps_context_free); - return 0; + return procfs_dir_make_node (entries, pc, NULL); } @@ -1,2 +1,4 @@ -error_t -rootdir_create_node (struct node **np); +#include <ps.h> + +struct node * +rootdir_make_node (struct ps_context *pc); |