diff options
Diffstat (limited to 'cpukit/libcsupport/src/base_fs.c')
-rw-r--r-- | cpukit/libcsupport/src/base_fs.c | 73 |
1 files changed, 17 insertions, 56 deletions
diff --git a/cpukit/libcsupport/src/base_fs.c b/cpukit/libcsupport/src/base_fs.c index b5681eda63..bbf6d8d4be 100644 --- a/cpukit/libcsupport/src/base_fs.c +++ b/cpukit/libcsupport/src/base_fs.c @@ -4,6 +4,9 @@ * COPYRIGHT (c) 1989-2008. * On-Line Applications Research Corporation (OAR). * + * Modifications to support reference counting in the file system are + * Copyright (c) 2012 embedded brains GmbH. + * * The license and distribution terms for this file may be * found in the file LICENSE in this distribution or at * http://www.rtems.com/license/LICENSE. @@ -35,62 +38,20 @@ void rtems_filesystem_initialize( void ) { - int status; - const rtems_filesystem_mount_table_t *mt; - rtems_filesystem_location_info_t loc; - - /* - * Set the default umask to "022". - */ - - rtems_filesystem_umask = 022; - - /* - * mount the first filesystem. - */ - if ( rtems_filesystem_mount_table_size == 0 ) - rtems_fatal_error_occurred( 0xABCD0001 ); - - mt = &rtems_filesystem_mount_table[0]; - - status = mount( mt->device, mt->mount_point, mt->type, mt->fsoptions, NULL ); - if ( status == -1 ) + int rv = 0; + const rtems_filesystem_mount_configuration *root_config = + &rtems_filesystem_root_configuration; + + rv = mount( + root_config->source, + root_config->target, + root_config->filesystemtype, + root_config->options, + root_config->data + ); + if ( rv != 0 ) rtems_fatal_error_occurred( 0xABCD0002 ); - rtems_filesystem_link_counts = 0; - - /* setup the 'current' and 'root' directories - * - * NOTE: cloning the pathlocs is not strictly - * necessary. Since we implicitely let - * all threads that don't call - * libio_set_private_env() share the same - * (initial) 'root' and 'current' locs, - * we (also implicitely) assume that the - * root filesystem doesn't care about - * reference counts. - * I just inserted the code snippet below - * to remind everybody of the fact by - * making it more explicit... - * Ideally, every thread would have to - * call either share_private_env() or - * set_private_env() - but then: that's - * gonna hit performance. - * - * Till Straumann, 10/25/2002 - */ - /* Clone the root pathloc */ - rtems_filesystem_evaluate_path("/", 1, 0, &loc, 0); - rtems_filesystem_root = loc; - /* One more clone for the current node */ - rtems_filesystem_evaluate_path("/", 1, 0, &loc, 0); - rtems_filesystem_current = loc; - - /* Note: the global_env's refcnt doesn't matter - * as the global env is never released - */ - - /* * Traditionally RTEMS devices are under "/dev" so install this directory. * @@ -100,8 +61,8 @@ void rtems_filesystem_initialize( void ) * created that way by the IMFS. */ - status = mkdir( "/dev", 0777); - if ( status != 0 ) + rv = mkdir( "/dev", 0777); + if ( rv != 0 ) rtems_fatal_error_occurred( 0xABCD0003 ); /* |