packvfs

annotate src/vnode.h @ 0:df5e9ee65a50

packvfs initial commit
author John Tsiombikas <nuclear@member.fsf.org>
date Fri, 02 Aug 2013 06:03:38 +0300
parents
children
rev   line source
nuclear@0 1 #ifndef VNODE_H_
nuclear@0 2 #define VNODE_H_
nuclear@0 3
nuclear@0 4 #include "pvfs_impl.h"
nuclear@0 5
nuclear@0 6 enum node_type {
nuclear@0 7 VNODE_FILE,
nuclear@0 8 VNODE_DIR
nuclear@0 9 };
nuclear@0 10
nuclear@0 11 struct vnode {
nuclear@0 12 char *name;
nuclear@0 13 enum node_type type;
nuclear@0 14 /* obj is PVFS_FILE* or PVFS_DIR* depending on type.
nuclear@0 15 * use VFILE/VDIR macros to access.
nuclear@0 16 */
nuclear@0 17 void *obj;
nuclear@0 18
nuclear@0 19 /* this is a link to some other vnode which is mounted in this place */
nuclear@0 20 struct vnode *target;
nuclear@0 21
nuclear@0 22 /* regular tree stuff */
nuclear@0 23 struct vnode *parent;
nuclear@0 24 struct vnode *childlist;
nuclear@0 25 struct vnode *next;
nuclear@0 26 };
nuclear@0 27
nuclear@0 28 #define VFILE(n) \
nuclear@0 29 (assert((n)->type == VNODE_FILE), (PVFS_FILE*)(n)->obj)
nuclear@0 30 #define VDIR(n) \
nuclear@0 31 (assert((n)->type == VNODE_DIR), (PVFS_DIR*)(n)->obj)
nuclear@0 32
nuclear@0 33 struct vnode *vnode_create(const char *name);
nuclear@0 34 struct vnode *vnode_create_file(const char *name, PVFS_FILE *fp);
nuclear@0 35 struct vnode *vnode_create_dir(const char *name, PVFS_DIR *dir);
nuclear@0 36 void vnode_free(struct vnode *n);
nuclear@0 37 void vnode_destroy_tree(struct vnode *tree);
nuclear@0 38
nuclear@0 39 struct vnode *vnode_lookup(const char *path);
nuclear@0 40 #define vnode_getcwd() vnode_lookup("")
nuclear@0 41 #define vnode_getroot() vnode_lookup("/")
nuclear@0 42
nuclear@0 43 int vnode_chdir(const char *name);
nuclear@0 44 int vnode_mkdir(struct vnode *parent, const char *name);
nuclear@0 45
nuclear@0 46 #endif /* VNODE_H_ */