summaryrefslogtreecommitdiffstats
path: root/filesystem/pathname_eval.rst
diff options
context:
space:
mode:
authorAmar Takhar <verm@darkbeer.org>2016-01-16 10:28:13 -0500
committerAmar Takhar <verm@darkbeer.org>2016-05-02 20:51:22 -0400
commit2d1dc3fe734a091e7d2b0ce335484be0db6c56b0 (patch)
treeb4bb1f51bbfcfaf5050b6d99d22c388fac8d85b8 /filesystem/pathname_eval.rst
parentFix markup warnings. (diff)
downloadrtems-docs-2d1dc3fe734a091e7d2b0ce335484be0db6c56b0.tar.bz2
Split document into seperate files by section.
Diffstat (limited to '')
-rw-r--r--filesystem/pathname_eval.rst95
1 files changed, 95 insertions, 0 deletions
diff --git a/filesystem/pathname_eval.rst b/filesystem/pathname_eval.rst
new file mode 100644
index 0000000..a9ed6c4
--- /dev/null
+++ b/filesystem/pathname_eval.rst
@@ -0,0 +1,95 @@
+Pathname Evaluation
+###################
+
+This chapter describes the pathname evaluation process for the
+RTEMS Filesystem Infrastructure.
+.. code:: c
+
+ XXX Include graphic of the path evaluation process
+
+Pathname Evaluation Handlers
+============================
+
+There are two pathname evaluation routines. The handler patheval()
+is called to find, verify privlages on and return information on a node
+that exists. The handler evalformake() is called to find, verify
+permissions, and return information on a node that is to become a parent.
+Additionally, evalformake() returns a pointer to the start of the name of
+the new node to be created.
+
+Pathname evaluation is specific to a filesystem.
+Each filesystem is required to provide both a patheval() and an evalformake()
+routine. Both of these routines gets a name to evaluate and a node indicating
+where to start the evaluation.
+
+Crossing a Mount Point During Path Evaluation
+=============================================
+
+If the filesystem supports the mount command, the evaluate routines
+must handle crossing the mountpoint. The evaluate routine should evaluate
+the name upto the first directory node where the new filesystem is mounted.
+The filesystem may process terminator characters prior to calling the
+evaluate routine for the new filesystem. A pointer to the portion of the
+name which has not been evaluated along with the root node of the new
+file system ( gotten from the mount table entry ) is passed to the correct
+mounted filesystem evaluate routine.
+
+The rtems_filesystem_location_info_t Structure
+==============================================
+
+The ``rtems_filesystem_location_info_t`` structure contains all information
+necessary for identification of a node.
+
+The generic rtems filesystem code defines two global
+rtems_filesystem_location_info_t structures, the``rtems_filesystem_root`` and the ``rtems_filesystem_current``.
+Both are initially defined to be the root node of the base filesystem.
+Once the chdir command is correctly used the ``rtems_filesystem_current``
+is set to the location specified by the command.
+
+The filesystem generic code peeks at the first character in the name to be
+evaluated. If this character is a valid seperator, the``rtems_filesystem_root`` is used as the node to start the evaluation
+with. Otherwise, the ``rtems_filesystem_current`` node is used as the
+node to start evaluating with. Therefore, a valid
+rtems_filesystem_location_info_t is given to the evaluate routine to start
+evaluation with. The evaluate routines are then responsible for making
+any changes necessary to this structure to correspond to the name being
+parsed.
+.. code:: c
+
+ struct rtems_filesystem_location_info_tt {
+ void \*node_access;
+ rtems_filesystem_file_handlers_r \*handlers;
+ rtems_filesystem_operations_table \*ops;
+ rtems_filesystem_mount_table_entry_t \*mt_entry;
+ };
+
+*node_access*
+ This element is filesystem specific. A filesystem can define and store
+ any information necessary to identify a node at this location. This element
+ is normally filled in by the filesystem’s evaluate routine. For the
+ filesystem’s root node, the filesystem’s initilization routine should
+ fill this in, and it should remain valid until the instance of the
+ filesystem is unmounted.
+
+*handlers*
+ This element is defined as a set of routines that may change within a
+ given filesystem based upon node type. For example a directory and a
+ memory file may have to completely different read routines. This element
+ is set to an initialization state defined by the mount table, and may
+ be set to the desired state by the evaluation routines.
+
+*ops*
+ This element is defined as a set of routines that remain static for the
+ filesystem. This element identifies entry points into the filesystem
+ to the generic code.
+
+*mt_entry*
+ This element identifies the mount table entry for this instance of the
+ filesystem.
+
+.. COMMENT: COPYRIGHT (c) 1988-2002.
+
+.. COMMENT: On-Line Applications Research Corporation (OAR).
+
+.. COMMENT: All rights reserved.
+