summaryrefslogtreecommitdiff
path: root/nuttx/fs/fs_internal.h
diff options
context:
space:
mode:
Diffstat (limited to 'nuttx/fs/fs_internal.h')
-rw-r--r--nuttx/fs/fs_internal.h72
1 files changed, 49 insertions, 23 deletions
diff --git a/nuttx/fs/fs_internal.h b/nuttx/fs/fs_internal.h
index 111f56aae..e63d6029f 100644
--- a/nuttx/fs/fs_internal.h
+++ b/nuttx/fs/fs_internal.h
@@ -1,4 +1,4 @@
-/************************************************************
+/****************************************************************************
* fs_internal.h
*
* Copyright (C) 2007 Gregory Nutt. All rights reserved.
@@ -31,29 +31,47 @@
* ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
* POSSIBILITY OF SUCH DAMAGE.
*
- ************************************************************/
+ ****************************************************************************/
#ifndef __FS_INTERNAL_H
#define __FS_INTERNAL_H
-/************************************************************
+/****************************************************************************
* Included Files
- ************************************************************/
+ ****************************************************************************/
#include <nuttx/config.h>
#include <nuttx/fs.h>
#include <dirent.h>
#include <nuttx/compiler.h>
-/************************************************************
+/****************************************************************************
* Definitions
- ************************************************************/
-
-#define FSNODEFLAG_DELETED 0x00000001
-
-/************************************************************
+ ****************************************************************************/
+
+#define FSNODEFLAG_TYPE_MASK 0x00000003
+#define FSNODEFLAG_TYPE_DRIVER 0x00000000
+#define FSNODEFLAG_TYPE_BLOCK 0x00000001
+#define FSNODEFLAG_TYPE_MOUNTPT 0x00000002
+#define FSNODEFLAG_DELETED 0x00000004
+
+#define INODE_IS_DRIVER(i) \
+ (((i)->i_flags & FSNODEFLAG_TYPE_MASK) == FSNODEFLAG_TYPE_DRIVER)
+#define INODE_IS_BLOCK(i) \
+ (((i)->i_flags & FSNODEFLAG_TYPE_BLOCK) == FSNODEFLAG_TYPE_BLOCK)
+#define INODE_IS_MOUNTPT(i) \
+ (((i)->i_flags & FSNODEFLAG_TYPE_MOUNTPT) == FSNODEFLAG_TYPE_MOUNTPT)
+
+#define INODE_SET_DRIVER(i) \
+ ((i)->i_flags &= ~FSNODEFLAG_TYPE_MASK)
+#define INODE_SET_BLOCK(i) \
+ ((i)->i_flags = (((i)->i_flags & ~FSNODEFLAG_TYPE_MASK) | FSNODEFLAG_TYPE_BLOCK))
+#define INODE_SET_MOUNTP(i) \
+ ((i)->i_flags = (((i)->i_flags & ~FSNODEFLAG_TYPE_MASK) | FSNODEFLAG_TYPE_MOUNTP))
+
+/****************************************************************************
* Public Types
- ************************************************************/
+ ****************************************************************************/
/* The internal representation of type DIR is just a
* container for an inode reference and a dirent structure.
@@ -69,15 +87,15 @@ struct internal_dir_s
* is called */
};
-/************************************************************
+/****************************************************************************
* Global Variables
- ************************************************************/
+ ****************************************************************************/
extern FAR struct inode *root_inode;
-/************************************************************
+/****************************************************************************
* Pulblic Function Prototypes
- ************************************************************/
+ ****************************************************************************/
#undef EXTERN
#if defined(__cplusplus)
@@ -87,34 +105,42 @@ extern "C" {
#define EXTERN extern
#endif
-/* fs_inode.c ***********************************************/
+/* fs_inode.c ***************************************************************/
EXTERN void inode_semtake(void);
EXTERN void inode_semgive(void);
EXTERN FAR struct inode *inode_search(const char **path,
FAR struct inode **peer,
- FAR struct inode **parent);
+ FAR struct inode **parent,
+ const char **relpath);
EXTERN void inode_free(FAR struct inode *node);
EXTERN const char *inode_nextname(const char *name);
+/* fs_inodereserver.c ********************************************************/
+
+EXTERN FAR struct inode *inode_reserve(const char *path);
+
+/* fs_inoderemove.c **********************************************************/
+
+EXTERN STATUS inode_remove(const char *path);
-/* fs_inodefind.c ********************************************/
+/* fs_inodefind.c ************************************************************/
-EXTERN FAR struct inode *inode_find(const char *path);
+EXTERN FAR struct inode *inode_find(const char *path, const char **relpath);
-/* fs_inodefinddir.c *****************************************/
+/* fs_inodefinddir.c *********************************************************/
EXTERN FAR struct inode *inode_finddir(const char *path);
-/* fs_inodeaddref.c ******************************************/
+/* fs_inodeaddref.c **********************************************************/
EXTERN void inode_addref(FAR struct inode *inode);
-/* fs_inoderelease.c *****************************************/
+/* fs_inoderelease.c *********************************************************/
EXTERN void inode_release(FAR struct inode *inode);
-/* fs_files.c ***********************************************/
+/* fs_files.c ***************************************************************/
#if CONFIG_NFILE_DESCRIPTORS >0
EXTERN void weak_function files_initialize(void);