From 1e01385ff01b077bb48b7fe92ce78b3066f8a99e Mon Sep 17 00:00:00 2001 From: Sebastian Huber Date: Thu, 15 Jul 2010 07:36:37 +0000 Subject: 2010-07-16 Sebastian Huber * libcsupport/include/rtems/libio.h: Changed rtems_filesystem_node_types_t to an enum. Declare rtems_filesystem_handlers_default, rtems_filesystem_operations_default, rtems_filesystem_default_evalpath(), rtems_filesystem_default_evalformake, and rtems_filesystem_default_node_type(). * libfs/src/dosfs/msdos.h: Fixed msdos_node_type() prototype. * libfs/src/defaults/default_evalformake.c, libfs/src/defaults/default_handlers.c, libfs/src/defaults/default_node_type.c, libfs/src/defaults/default_ops.c: New files. * libfs/Makefile.am: Reflect changes above. --- cpukit/ChangeLog | 16 +++++++ cpukit/libcsupport/include/rtems/libio.h | 57 ++++++++++++++++++------- cpukit/libfs/Makefile.am | 4 +- cpukit/libfs/src/defaults/default_evalformake.c | 32 ++++++++++++++ cpukit/libfs/src/defaults/default_handlers.c | 39 +++++++++++++++++ cpukit/libfs/src/defaults/default_node_type.c | 29 +++++++++++++ cpukit/libfs/src/defaults/default_ops.c | 43 +++++++++++++++++++ cpukit/libfs/src/dosfs/msdos.h | 2 +- 8 files changed, 205 insertions(+), 17 deletions(-) create mode 100644 cpukit/libfs/src/defaults/default_evalformake.c create mode 100644 cpukit/libfs/src/defaults/default_handlers.c create mode 100644 cpukit/libfs/src/defaults/default_node_type.c create mode 100644 cpukit/libfs/src/defaults/default_ops.c diff --git a/cpukit/ChangeLog b/cpukit/ChangeLog index 65c213e667..75d437cc4a 100644 --- a/cpukit/ChangeLog +++ b/cpukit/ChangeLog @@ -1,3 +1,19 @@ +2010-07-16 Sebastian Huber + + * libcsupport/include/rtems/libio.h: Changed + rtems_filesystem_node_types_t to an enum. Declare + rtems_filesystem_handlers_default, + rtems_filesystem_operations_default, + rtems_filesystem_default_evalpath(), + rtems_filesystem_default_evalformake, and + rtems_filesystem_default_node_type(). + * libfs/src/dosfs/msdos.h: Fixed msdos_node_type() prototype. + * libfs/src/defaults/default_evalformake.c, + libfs/src/defaults/default_handlers.c, + libfs/src/defaults/default_node_type.c, + libfs/src/defaults/default_ops.c: New files. + * libfs/Makefile.am: Reflect changes above. + 2010-07-14 Joel Sherrill * libnetworking/rtems/rtems_syscall.c: Fix warning. diff --git a/cpukit/libcsupport/include/rtems/libio.h b/cpukit/libcsupport/include/rtems/libio.h index f3f9c2ea38..536e4513d7 100644 --- a/cpukit/libcsupport/include/rtems/libio.h +++ b/cpukit/libcsupport/include/rtems/libio.h @@ -56,20 +56,16 @@ extern "C" { typedef _off64_t rtems_off64_t; /** - * @name File System Node Types - * - * @{ + * @brief File system node types. */ - -#define RTEMS_FILESYSTEM_DIRECTORY 1 -#define RTEMS_FILESYSTEM_DEVICE 2 -#define RTEMS_FILESYSTEM_HARD_LINK 3 -#define RTEMS_FILESYSTEM_SYM_LINK 4 -#define RTEMS_FILESYSTEM_MEMORY_FILE 5 - -/** @} */ - -typedef int rtems_filesystem_node_types_t; +typedef enum { + RTEMS_FILESYSTEM_INVALID_NODE_TYPE, + RTEMS_FILESYSTEM_DIRECTORY, + RTEMS_FILESYSTEM_DEVICE, + RTEMS_FILESYSTEM_HARD_LINK, + RTEMS_FILESYSTEM_SYM_LINK, + RTEMS_FILESYSTEM_MEMORY_FILE +} rtems_filesystem_node_types_t; /** * @name File System Node Operations @@ -360,6 +356,10 @@ struct _rtems_filesystem_file_handlers_r { */ rtems_filesystem_rmnod_t rmnod_h; }; + +extern const rtems_filesystem_file_handlers_r +rtems_filesystem_handlers_default; + /** * This method defines the interface to the default open(2) * system call support which is provided by a file system @@ -892,10 +892,29 @@ struct _rtems_filesystem_operations_table { rtems_filesystem_statvfs_t statvfs_h; }; -/* - * @brief Default filesystem evalpath +extern const rtems_filesystem_operations_table +rtems_filesystem_operations_default; + +/** + * @brief Provides a defualt routine for filesystem + * implementation of path evaluation. */ +int rtems_filesystem_default_evalpath( + const char *pathname, + size_t pathnamelen, + int flags, + rtems_filesystem_location_info_t *pathloc +); +/** + * @brief Provides a defualt routine for filesystem + * implementation of path evaluation for make. + */ +int rtems_filesystem_default_evalformake( + const char *path, + rtems_filesystem_location_info_t *pathloc, + const char **name +); /** * @brief Provides a defualt routine for filesystem @@ -916,6 +935,14 @@ int rtems_filesystem_default_unlink( rtems_filesystem_location_info_t *pathloc /* IN */ ); +/** + * @brief Provides a defualt routine for filesystem + * implementation to determine the node type. + */ +rtems_filesystem_node_types_t rtems_filesystem_default_node_type( + rtems_filesystem_location_info_t *pathloc +); + /** * @brief Provides a defualt routine for filesystem * implementation to create a new node. diff --git a/cpukit/libfs/Makefile.am b/cpukit/libfs/Makefile.am index 416b5b8ad0..8901b184bf 100644 --- a/cpukit/libfs/Makefile.am +++ b/cpukit/libfs/Makefile.am @@ -30,7 +30,9 @@ libdefaultfs_a_SOURCES = \ src/defaults/default_write.c src/defaults/default_fpathconf.c \ src/defaults/default_unmount.c src/defaults/default_evaluate_link.c \ src/defaults/default_open.c src/defaults/default_close.c \ - src/defaults/default_fsunmount.c src/defaults/default_mknod.c + src/defaults/default_fsunmount.c src/defaults/default_mknod.c \ + src/defaults/default_node_type.c src/defaults/default_evalformake.c \ + src/defaults/default_handlers.c src/defaults/default_ops.c noinst_LIBRARIES += libimfs.a libimfs_a_SOURCES = diff --git a/cpukit/libfs/src/defaults/default_evalformake.c b/cpukit/libfs/src/defaults/default_evalformake.c new file mode 100644 index 0000000000..891d961dc1 --- /dev/null +++ b/cpukit/libfs/src/defaults/default_evalformake.c @@ -0,0 +1,32 @@ +/** + * @file + * + * @ingroup LibIO + * + * @brief rtems_filesystem_default_evalformake() implementation. + */ + +/* + * Copyright (c) 2010 + * embedded brains GmbH + * Obere Lagerstr. 30 + * D-82178 Puchheim + * Germany + * + * + * 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. + */ + +#include +#include + +int rtems_filesystem_default_evalformake( + const char *path, + rtems_filesystem_location_info_t *pathloc, + const char **name +) +{ + rtems_set_errno_and_return_minus_one( ENOTSUP ); +} diff --git a/cpukit/libfs/src/defaults/default_handlers.c b/cpukit/libfs/src/defaults/default_handlers.c new file mode 100644 index 0000000000..5343875295 --- /dev/null +++ b/cpukit/libfs/src/defaults/default_handlers.c @@ -0,0 +1,39 @@ +/** + * @file + * + * @ingroup LibIO + * + * @brief rtems_filesystem_handlers_default definition. + */ + +/* + * Copyright (c) 2010 + * embedded brains GmbH + * Obere Lagerstr. 30 + * D-82178 Puchheim + * Germany + * + * + * 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. + */ + +#include + +const rtems_filesystem_file_handlers_r rtems_filesystem_handlers_default = { + .open_h = rtems_filesystem_default_open, + .close_h = rtems_filesystem_default_close, + .read_h = rtems_filesystem_default_read, + .write_h = rtems_filesystem_default_write, + .ioctl_h = rtems_filesystem_default_ioctl, + .lseek_h = rtems_filesystem_default_lseek, + .fstat_h = rtems_filesystem_default_fstat, + .fchmod_h = rtems_filesystem_default_fchmod, + .ftruncate_h = rtems_filesystem_default_ftruncate, + .fpathconf_h = rtems_filesystem_default_fpathconf, + .fsync_h = rtems_filesystem_default_fsync, + .fdatasync_h = rtems_filesystem_default_fdatasync, + .fcntl_h = rtems_filesystem_default_fcntl, + .rmnod_h = rtems_filesystem_default_rmnod +}; diff --git a/cpukit/libfs/src/defaults/default_node_type.c b/cpukit/libfs/src/defaults/default_node_type.c new file mode 100644 index 0000000000..a118a04f72 --- /dev/null +++ b/cpukit/libfs/src/defaults/default_node_type.c @@ -0,0 +1,29 @@ +/** + * @file + * + * @ingroup LibIO + * + * @brief rtems_filesystem_default_node_type() implementation. + */ + +/* + * Copyright (c) 2010 + * embedded brains GmbH + * Obere Lagerstr. 30 + * D-82178 Puchheim + * Germany + * + * + * 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. + */ + +#include + +rtems_filesystem_node_types_t rtems_filesystem_default_node_type( + rtems_filesystem_location_info_t *pathloc +) +{ + return RTEMS_FILESYSTEM_INVALID_NODE_TYPE; +} diff --git a/cpukit/libfs/src/defaults/default_ops.c b/cpukit/libfs/src/defaults/default_ops.c new file mode 100644 index 0000000000..575cf6b2d4 --- /dev/null +++ b/cpukit/libfs/src/defaults/default_ops.c @@ -0,0 +1,43 @@ +/** + * @file + * + * @ingroup LibIO + * + * @brief rtems_filesystem_operations_default definition. + */ + +/* + * Copyright (c) 2010 + * embedded brains GmbH + * Obere Lagerstr. 30 + * D-82178 Puchheim + * Germany + * + * + * 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. + */ + +#include + +const rtems_filesystem_operations_table rtems_filesystem_operations_default = { + .evalpath_h = rtems_filesystem_default_evalpath, + .evalformake_h = rtems_filesystem_default_evalformake, + .link_h = rtems_filesystem_default_link, + .unlink_h = rtems_filesystem_default_unlink, + .node_type_h = rtems_filesystem_default_node_type, + .mknod_h = rtems_filesystem_default_mknod, + .chown_h = rtems_filesystem_default_chown, + .freenod_h = rtems_filesystem_default_freenode, + .mount_h = rtems_filesystem_default_mount, + .fsmount_me_h = rtems_filesystem_default_fsmount, + .unmount_h = rtems_filesystem_default_unmount, + .fsunmount_me_h = rtems_filesystem_default_fsunmount, + .utime_h = rtems_filesystem_default_utime, + .eval_link_h = rtems_filesystem_default_evaluate_link, + .symlink_h = rtems_filesystem_default_symlink, + .readlink_h = rtems_filesystem_default_readlink, + .rename_h = rtems_filesystem_default_rename, + .statvfs_h = rtems_filesystem_default_statvfs +}; diff --git a/cpukit/libfs/src/dosfs/msdos.h b/cpukit/libfs/src/dosfs/msdos.h index 03ea5a5a88..2740f98204 100644 --- a/cpukit/libfs/src/dosfs/msdos.h +++ b/cpukit/libfs/src/dosfs/msdos.h @@ -242,7 +242,7 @@ int msdos_unlink(rtems_filesystem_location_info_t *pathloc /* IN */); int msdos_free_node_info(rtems_filesystem_location_info_t *pathloc /* IN */); -int msdos_node_type(rtems_filesystem_location_info_t *pathloc); +rtems_filesystem_node_types_t msdos_node_type(rtems_filesystem_location_info_t *pathloc); int msdos_mknod( const char *path, /* IN */ -- cgit v1.2.3