diff options
-rw-r--r-- | node.c | 8 | ||||
-rw-r--r-- | node.h | 8 | ||||
-rw-r--r-- | nsmux.c | 4 |
3 files changed, 20 insertions, 0 deletions
@@ -83,6 +83,8 @@ error_t node_create (lnode_t * lnode, node_t ** node) return err; } + node_new->nn->type = NODE_TYPE_NORMAL; + /*link the lnode to the new node */ lnode->node = node_new; @@ -142,6 +144,8 @@ error_t node_create_proxy (lnode_t * lnode, node_t ** node) return err; } + node_new->nn->type = NODE_TYPE_PROXY; + /*add this new node to the list of proxies of `lnode` */ lnode_add_proxy (lnode, node_new); @@ -195,6 +199,10 @@ error_t node_create_from_port (mach_port_t port, node_t ** node) return err; } + /*The caller may want to change this to NODE_TYPE_SHADOW if it's + the case. */ + node_new->nn->type = NODE_TYPE_PROXY; + /*this node is ``orphan'' -- it is not associated to any lnode and has some service functions only */ node_new->nn->lnode = NULL; @@ -44,6 +44,11 @@ #define FLAG_NODE_INVALIDATE 0x00000002 /*this node must be updated */ #define FLAG_NODE_ULFS_UPTODATE 0x00000004 /*this node has just been updated */ /*---------------------------------------------------------------------------*/ +/*Types of nodes */ +#define NODE_TYPE_NORMAL 0 +#define NODE_TYPE_PROXY 1 +#define NODE_TYPE_SHADOW 2 +/*---------------------------------------------------------------------------*/ /*The type of offset corresponding to the current platform*/ #ifdef __USE_FILE_OFFSET64 # define OFFSET_T __off64_t @@ -75,6 +80,9 @@ struct netnode /*the flags associated with this node */ int flags; + /*the type of the current node */ + int type; + /*a port to the underlying filesystem */ file_t port; @@ -908,6 +908,7 @@ error_t /*`np` is a proxy node of the lower translator. We have to create a shadow node explicitly. */ + error = node_get_send_port (diruser, np, flags, &file); if (error) goto out; @@ -928,6 +929,9 @@ error_t if (!error && !excl) { + /*We've just created a shadow node. */ + np->nn->type = NODE_TYPE_SHADOW; + /*If there is at least one more separator in the filename, we will have to do a retry */ nextsep = magic_find_sep(sep); |