summaryrefslogtreecommitdiffstats
path: root/c/src/exec/libcsupport/src/mount.c
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--c/src/exec/libcsupport/src/mount.c274
1 files changed, 0 insertions, 274 deletions
diff --git a/c/src/exec/libcsupport/src/mount.c b/c/src/exec/libcsupport/src/mount.c
deleted file mode 100644
index 9ea08b7e2b..0000000000
--- a/c/src/exec/libcsupport/src/mount.c
+++ /dev/null
@@ -1,274 +0,0 @@
-/*
- * mount()
- *
- * XXX
- *
- * XXX make sure no required ops are NULL
- * XXX make sure no optional ops you are using are NULL
- * XXX unmount should be required.
- *
- * COPYRIGHT (c) 1989-1999.
- * On-Line Applications Research Corporation (OAR).
- *
- * The license and distribution terms for this file may be
- * found in the file LICENSE in this distribution or at
- * http://www.OARcorp.com/rtems/license.html.
- *
- * $Id$
- */
-
-#if HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include <sys/types.h>
-#include <sys/stat.h>
-#include <chain.h>
-#include <fcntl.h>
-#include <unistd.h>
-#include <errno.h>
-#include <stdlib.h>
-#include <string.h>
-#include <assert.h>
-
-#include <rtems/libio_.h>
-
-Chain_Control rtems_filesystem_mount_table_control;
-
-/*
- * Prototypes that probably should be somewhere else.
- */
-
-int init_fs_mount_table( void );
-static int Is_node_fs_root(
- rtems_filesystem_location_info_t *loc
-);
-
-
-/*
- * XXX
- */
-
-#define FOUND 0
-#define NOT_FOUND -1
-
-/*
- * mount
- *
- * This routine will attempt to mount a new file system at the specified
- * mount point. A series of tests will be run to determine if any of the
- * following reasons exist to prevent the mount operation:
- *
- * 1) The file system type or options are not valid
- * 2) No new file system root node is specified
- * 3) The selected file system has already been mounted
- * 4) The mount point exists with the proper permissions to allow mounting
- * 5) The selected mount point already has a file system mounted to it
- *
- */
-
-int mount(
- rtems_filesystem_mount_table_entry_t **mt_entry,
- rtems_filesystem_operations_table *fs_ops,
- rtems_filesystem_options_t options,
- char *device,
- char *mount_point
-)
-{
- rtems_filesystem_location_info_t loc;
- rtems_filesystem_mount_table_entry_t *temp_mt_entry;
- rtems_filesystem_location_info_t *loc_to_free = NULL;
- size_t size;
-
-/* XXX add code to check for required operations */
-
- /*
- * Is there a file system operations table?
- */
-
- if ( fs_ops == NULL ) {
- errno = EINVAL;
- return -1;
- }
-
- /*
- * Are the file system options valid?
- */
-
- if ( options != RTEMS_FILESYSTEM_READ_ONLY &&
- options != RTEMS_FILESYSTEM_READ_WRITE ) {
- errno = EINVAL;
- return -1;
- }
-
- /*
- * Allocate a mount table entry
- */
-
- size = sizeof(rtems_filesystem_mount_table_entry_t);
- if ( device )
- size += strlen( device ) + 1;
- temp_mt_entry = malloc( size );
-
- if ( !temp_mt_entry ) {
- errno = ENOMEM;
- return -1;
- }
-
- temp_mt_entry->mt_fs_root.mt_entry = temp_mt_entry;
- temp_mt_entry->options = options;
- if ( device ) {
- temp_mt_entry->dev =
- (char *)temp_mt_entry + sizeof( rtems_filesystem_mount_table_entry_t );
- strcpy( temp_mt_entry->dev, device );
- } else
- temp_mt_entry->dev = 0;
-
- /*
- * The mount_point should be a directory with read/write/execute
- * permissions in the existing tree.
- */
-
- if ( mount_point ) {
-
- if ( rtems_filesystem_evaluate_path(
- mount_point, RTEMS_LIBIO_PERMS_RWX, &loc, TRUE ) == -1 )
- goto cleanup_and_bail;
-
- /*
- * Test to see if it is a directory
- */
-
- loc_to_free = &loc;
- if ( loc.ops->node_type_h( &loc ) != RTEMS_FILESYSTEM_DIRECTORY ) {
- errno = ENOTDIR;
- goto cleanup_and_bail;
- }
-
- /*
- * You can only mount one file system onto a single mount point.
- */
-
- if ( Is_node_fs_root( &loc ) ){
- errno = EBUSY;
- goto cleanup_and_bail;
- }
-
- /*
- * This must be a good mount point, so move the location information
- * into the allocated mount entry. Note: the information that
- * may have been allocated in loc should not be sent to freenode
- * until the system is unmounted. It may be needed to correctly
- * traverse the tree.
- */
-
- temp_mt_entry->mt_point_node.node_access = loc.node_access;
- temp_mt_entry->mt_point_node.handlers = loc.handlers;
- temp_mt_entry->mt_point_node.ops = loc.ops;
- temp_mt_entry->mt_point_node.mt_entry = loc.mt_entry;
-
- /*
- * This link to the parent is only done when we are dealing with system
- * below the base file system
- */
-
- if ( !loc.ops->mount_h ){
- errno = ENOTSUP;
- goto cleanup_and_bail;
- }
-
- if ( loc.ops->mount_h( temp_mt_entry ) ) {
- goto cleanup_and_bail;
- }
- } else {
-
- /*
- * This is a mount of the base file system --> The
- * mt_point_node.node_access will be set to null to indicate that this
- * is the root of the entire file system.
- */
-
- temp_mt_entry->mt_fs_root.node_access = NULL;
- temp_mt_entry->mt_fs_root.handlers = NULL;
- temp_mt_entry->mt_fs_root.ops = NULL;
-
- temp_mt_entry->mt_point_node.node_access = NULL;
- temp_mt_entry->mt_point_node.handlers = NULL;
- temp_mt_entry->mt_point_node.ops = NULL;
- temp_mt_entry->mt_point_node.mt_entry = NULL;
- }
-
- if ( !fs_ops->fsmount_me_h ) {
- errno = ENOTSUP;
- goto cleanup_and_bail;
- }
-
- if ( fs_ops->fsmount_me_h( temp_mt_entry ) )
- goto cleanup_and_bail;
-
- /*
- * Add the mount table entry to the mount table chain
- */
-
- Chain_Append( &rtems_filesystem_mount_table_control, &temp_mt_entry->Node );
-
- *mt_entry = temp_mt_entry;
-
- return 0;
-
-cleanup_and_bail:
-
- free( temp_mt_entry );
-
- if ( loc_to_free )
- rtems_filesystem_freenode( loc_to_free );
-
- return -1;
-}
-
-
-
-/*
- * init_fs_mount_table
- *
- * This routine will initialize the chain control element that manages the
- * mount table chain.
- */
-
-int init_fs_mount_table()
-{
- Chain_Initialize_empty ( &rtems_filesystem_mount_table_control );
- return 0;
-}
-
-/*
- * Is_node_fs_root
- *
- * This routine will run through the entries that currently exist in the
- * mount table chain. For each entry in the mount table chain it will
- * compare the mount tables root node to the node describing the selected
- * mount point. If any match is found true is returned else false is
- * returned.
- *
- */
-
-static int Is_node_fs_root(
- rtems_filesystem_location_info_t *loc
-)
-{
- Chain_Node *the_node;
- rtems_filesystem_mount_table_entry_t *the_mount_entry;
-
- /*
- * For each mount table entry
- */
-
- for ( the_node = rtems_filesystem_mount_table_control.first;
- !Chain_Is_tail( &rtems_filesystem_mount_table_control, the_node );
- the_node = the_node->next ) {
- the_mount_entry = (rtems_filesystem_mount_table_entry_t *) the_node;
- if ( the_mount_entry->mt_fs_root.node_access == loc->node_access )
- return TRUE;
- }
- return FALSE;
-}