summaryrefslogtreecommitdiff
path: root/netfs-sample/node.h
diff options
context:
space:
mode:
Diffstat (limited to 'netfs-sample/node.h')
-rw-r--r--netfs-sample/node.h168
1 files changed, 168 insertions, 0 deletions
diff --git a/netfs-sample/node.h b/netfs-sample/node.h
new file mode 100644
index 00000000..dcd618d4
--- /dev/null
+++ b/netfs-sample/node.h
@@ -0,0 +1,168 @@
+/*----------------------------------------------------------------------------*/
+/*node.h*/
+/*----------------------------------------------------------------------------*/
+/*Node management. Also see lnode.h*/
+/*----------------------------------------------------------------------------*/
+/*Based on the code of unionfs translator.*/
+/*----------------------------------------------------------------------------*/
+/*Copyright (C) 2001, 2002, 2005 Free Software Foundation, Inc.
+ Written by Sergiu Ivanov <unlimitedscolobb@gmail.com>.
+
+ This program is free software; you can redistribute it and/or
+ modify it under the terms of the GNU General Public License as
+ published by the Free Software Foundation; either version 2 of the
+ License, or * (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful, but
+ WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
+ USA.*/
+/*----------------------------------------------------------------------------*/
+#ifndef __NODE_H__
+#define __NODE_H__
+
+/*----------------------------------------------------------------------------*/
+#include <error.h>
+#include <sys/stat.h>
+#include <hurd/netfs.h>
+/*----------------------------------------------------------------------------*/
+#include "lnode.h"
+/*----------------------------------------------------------------------------*/
+
+/*----------------------------------------------------------------------------*/
+/*--------Macros--------------------------------------------------------------*/
+/*Checks whether the give node is the root of the filterfs filesystem*/
+#define NODE_IS_ROOT(n) (((n)->nn->lnode->dir) ? (0) : (1))
+/*----------------------------------------------------------------------------*/
+/*Node flags*/
+#define FLAG_NODE_ULFS_FIXED 0x00000001 /*this node should not be updated*/
+#define FLAG_NODE_INVALIDATE 0x00000002 /*this node must be updated*/
+#define FLAG_NODE_ULFS_UPTODATE 0x00000004 /*this node has just been updated*/
+/*----------------------------------------------------------------------------*/
+/*The type of offset corresponding to the current platform*/
+#ifdef __USE_FILE_OFFSET64
+# define OFFSET_T __off64_t
+#else
+# define OFFSET_T __off_t
+#endif /*__USE_FILE_OFFSET64*/
+/*----------------------------------------------------------------------------*/
+/*The size of a chunk of a string (for a small optimization in checking
+ the property)*/
+#define STRING_CHUNK 256
+/*----------------------------------------------------------------------------*/
+
+/*----------------------------------------------------------------------------*/
+/*The user-defined node for libnetfs*/
+struct netnode
+ {
+ /*the reference to the corresponding light node*/
+ lnode_t * lnode;
+
+ /*the flags associated with this node (might be not required)*/
+ int flags;
+
+ /*a port to the underlying filesystem*/
+ file_t port;
+
+ /*the neighbouring entries in the cache*/
+ node_t * ncache_prev, * ncache_next;
+ };/*struct netnode*/
+/*----------------------------------------------------------------------------*/
+typedef struct netnode netnode_t;
+/*----------------------------------------------------------------------------*/
+/*A list element containing directory entry*/
+struct node_dirent
+ {
+ /*the directory entry*/
+ struct dirent * dirent;
+
+ /*the next element*/
+ struct node_dirent * next;
+ };/*struct node_dirent*/
+/*----------------------------------------------------------------------------*/
+typedef struct node_dirent node_dirent_t;
+/*----------------------------------------------------------------------------*/
+
+/*----------------------------------------------------------------------------*/
+/*--------Global Variables----------------------------------------------------*/
+/*The lock protecting the underlying filesystem*/
+extern struct mutex ulfs_lock;
+/*----------------------------------------------------------------------------*/
+
+/*----------------------------------------------------------------------------*/
+/*--------Functions-----------------------------------------------------------*/
+/*Derives a new node from `lnode` and adds a reference to `lnode`*/
+error_t
+node_create
+ (
+ lnode_t * lnode,
+ node_t ** node /*store the result here*/
+ );
+/*----------------------------------------------------------------------------*/
+/*Destroys the specified node and removes a light reference from the
+ associated light node*/
+void
+node_destroy
+ (
+ node_t * np
+ );
+/*----------------------------------------------------------------------------*/
+/*Creates the root node and the corresponding lnode*/
+error_t
+node_create_root
+ (
+ node_t ** root_node /*store the result here*/
+ );
+/*----------------------------------------------------------------------------*/
+/*Initializes the port to the underlying filesystem for the root node*/
+error_t
+node_init_root
+ (
+ node_t * node /*the root node*/
+ );
+/*----------------------------------------------------------------------------*/
+/*Frees a list of dirents*/
+void
+node_entries_free
+ (
+ node_dirent_t * dirents /*free this*/
+ );
+/*----------------------------------------------------------------------------*/
+/*Reads the directory entries from `node`, which must be locked*/
+error_t
+node_entries_get
+ (
+ node_t * node,
+ node_dirent_t ** dirents /*store the result here*/
+ );
+/*----------------------------------------------------------------------------*/
+/*Makes sure that all ports to the underlying filesystem of `node` are up to
+ date*/
+error_t
+node_update
+ (
+ node_t * node
+ );
+/*----------------------------------------------------------------------------*/
+/*Computes the size of the given directory*/
+error_t
+node_get_size
+ (
+ node_t * dir,
+ OFFSET_T * off
+ );
+/*----------------------------------------------------------------------------*/
+/*Remove the file called `name` under `dir`*/
+error_t
+node_unlink_file
+ (
+ node_t * dir,
+ char * name
+ );
+/*----------------------------------------------------------------------------*/
+#endif /*__NODE_H__*/