diff options
author | Sebastian Huber <sebastian.huber@embedded-brains.de> | 2010-07-01 14:39:39 +0000 |
---|---|---|
committer | Sebastian Huber <sebastian.huber@embedded-brains.de> | 2010-07-01 14:39:39 +0000 |
commit | 3d3a18e619ce62485d3508a6b7dd1467c912bbad (patch) | |
tree | eeb9b9d70190c395460d0511c0c048efc883d5c0 /cpukit | |
parent | 2010-06-08 Sebastian Huber <sebastian.huber@embedded-brains.de> (diff) | |
download | rtems-3d3a18e619ce62485d3508a6b7dd1467c912bbad.tar.bz2 |
2010-06-10 Sebastian Huber <sebastian.huber@embedded-brains.de>
* libcsupport/src/unmount.c: Removed obsolete declarations. Fixed
invalid memory free.
2010-06-10 Sebastian Huber <sebastian.huber@embedded-brains.de>
* libnetworking/rtems/ftpfs.h, libnetworking/lib/ftpfs.c: Removed
rtems_ftpfs_mount().
2010-06-10 Sebastian Huber <sebastian.huber@embedded-brains.de>
* libcsupport/src/mount-mktgt.c: New file.
* libcsupport/Makefile.am: Reflect change above.
* libcsupport/include/rtems/libio.h: Declare
mount_and_make_target_path().
2010-06-09 Sebastian Huber <sebastian.huber@embedded-brains.de>
* libnetworking/rtems/ftpfs.h, libnetworking/lib/ftpfs.c: Added
rtems_ftpfs_mount() again. Documentation.
2010-06-09 Sebastian Huber <sebastian.huber@embedded-brains.de>
* libcsupport/include/rtems/libio.h, sapi/include/confdefs.h: Added
and use defines for file system types.
2010-06-09 Sebastian Huber <sebastian.huber@embedded-brains.de>
* libcsupport/src/mount.c: Fixed NULL pointer access.
Diffstat (limited to 'cpukit')
-rw-r--r-- | cpukit/ChangeLog | 31 | ||||
-rw-r--r-- | cpukit/libcsupport/Makefile.am | 2 | ||||
-rw-r--r-- | cpukit/libcsupport/include/rtems/libio.h | 40 | ||||
-rw-r--r-- | cpukit/libcsupport/src/mount-mktgt.c | 56 | ||||
-rw-r--r-- | cpukit/libcsupport/src/mount.c | 17 | ||||
-rw-r--r-- | cpukit/libcsupport/src/unmount.c | 11 | ||||
-rw-r--r-- | cpukit/libnetworking/lib/ftpfs.c | 34 | ||||
-rw-r--r-- | cpukit/libnetworking/rtems/ftpfs.h | 50 | ||||
-rw-r--r-- | cpukit/sapi/include/confdefs.h | 27 |
9 files changed, 179 insertions, 89 deletions
diff --git a/cpukit/ChangeLog b/cpukit/ChangeLog index 2432a98e87..2c4d1ae824 100644 --- a/cpukit/ChangeLog +++ b/cpukit/ChangeLog @@ -197,6 +197,37 @@ libfs/src/rfs/rtems-rfs-group.h, libfs/src/rfs/rtems-rfs-inode.h: Fix broken doxygen commands. +2010-06-10 Sebastian Huber <sebastian.huber@embedded-brains.de> + + * libcsupport/src/unmount.c: Removed obsolete declarations. Fixed + invalid memory free. + +2010-06-10 Sebastian Huber <sebastian.huber@embedded-brains.de> + + * libnetworking/rtems/ftpfs.h, libnetworking/lib/ftpfs.c: Removed + rtems_ftpfs_mount(). + +2010-06-10 Sebastian Huber <sebastian.huber@embedded-brains.de> + + * libcsupport/src/mount-mktgt.c: New file. + * libcsupport/Makefile.am: Reflect change above. + * libcsupport/include/rtems/libio.h: Declare + mount_and_make_target_path(). + +2010-06-09 Sebastian Huber <sebastian.huber@embedded-brains.de> + + * libnetworking/rtems/ftpfs.h, libnetworking/lib/ftpfs.c: Added + rtems_ftpfs_mount() again. Documentation. + +2010-06-09 Sebastian Huber <sebastian.huber@embedded-brains.de> + + * libcsupport/include/rtems/libio.h, sapi/include/confdefs.h: Added + and use defines for file system types. + +2010-06-09 Sebastian Huber <sebastian.huber@embedded-brains.de> + + * libcsupport/src/mount.c: Fixed NULL pointer access. + 2010-06-09 Ralf Corsépius <ralf.corsepius@rtems.org> * configure.ac: Remove nios2 (unsupported, no toolchain). diff --git a/cpukit/libcsupport/Makefile.am b/cpukit/libcsupport/Makefile.am index 3e80056408..368833b60b 100644 --- a/cpukit/libcsupport/Makefile.am +++ b/cpukit/libcsupport/Makefile.am @@ -44,7 +44,7 @@ ASSOCIATION_C_FILES = src/assoclocalbyname.c \ src/assocremotebylocal.c src/assocremotebyname.c BASE_FS_C_FILES = src/base_fs.c src/mount.c src/unmount.c src/libio.c \ - src/mount-mgr.c src/libio_init.c \ + src/mount-mgr.c src/mount-mktgt.c src/libio_init.c \ src/libio_sockets.c src/eval.c src/fs_null_handlers.c src/privateenv.c \ src/open_dev_console.c src/__usrenv.c src/rtems_mkdir.c diff --git a/cpukit/libcsupport/include/rtems/libio.h b/cpukit/libcsupport/include/rtems/libio.h index 3e020ee2e4..d705228c4b 100644 --- a/cpukit/libcsupport/include/rtems/libio.h +++ b/cpukit/libcsupport/include/rtems/libio.h @@ -56,7 +56,7 @@ extern "C" { typedef _off64_t rtems_off64_t; /** - * @name File system node types. + * @name File System Node Types * * @{ */ @@ -669,6 +669,23 @@ static inline rtems_device_minor_number rtems_filesystem_dev_minor_t( #define rtems_libio_is_valid_perms( _perm ) \ (~ ((~RTEMS_LIBIO_PERMS_RWX) & _perm )) +/** + * @name File System Types + * + * @{ + */ + +#define RTEMS_FILESYSTEM_TYPE_IMFS "imfs" +#define RTEMS_FILESYSTEM_TYPE_MINIIMFS "mimfs" +#define RTEMS_FILESYSTEM_TYPE_DEVFS "devfs" +#define RTEMS_FILESYSTEM_TYPE_FTPFS "ftpfs" +#define RTEMS_FILESYSTEM_TYPE_TFTPFS "tftpfs" +#define RTEMS_FILESYSTEM_TYPE_NFS "nfs" +#define RTEMS_FILESYSTEM_TYPE_DOSFS "dosfs" +#define RTEMS_FILESYSTEM_TYPE_RFS "rfs" + +/** @} */ + /* * Prototypes for filesystem */ @@ -687,6 +704,25 @@ int mount( const void *data ); +/** + * @brief Mounts a file system and makes the @a target path. + * + * The @a target path will be created with rtems_mkdir() and must not be + * @c NULL. + * + * @see mount(). + * + * @retval 0 Successful operation. + * @retval -1 An error occured. The @c errno indicates the error. + */ +int mount_and_make_target_path( + const char *source, + const char *target, + const char *filesystemtype, + rtems_filesystem_options_t options, + const void *data +); + /* * Boot Time Mount Table Structure */ @@ -719,7 +755,7 @@ extern rtems_fs_init_functions_t rtems_fs_init_helper; * The @a mode value selects the access permissions of the directory. * * @retval 0 Successful operation. - * @retval -1 An error occured. @c errno indicates the error. + * @retval -1 An error occured. The @c errno indicates the error. */ extern int rtems_mkdir(const char *path, mode_t mode); diff --git a/cpukit/libcsupport/src/mount-mktgt.c b/cpukit/libcsupport/src/mount-mktgt.c new file mode 100644 index 0000000000..3b4d50aded --- /dev/null +++ b/cpukit/libcsupport/src/mount-mktgt.c @@ -0,0 +1,56 @@ +/** + * @file + * + * @ingroup LibIO + * + * @brief mount_and_make_target_path() implementation. + */ + +/* + * Copyright (c) 2010 + * embedded brains GmbH + * Obere Lagerstr. 30 + * D-82178 Puchheim + * Germany + * <rtems@embedded-brains.de> + * + * 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. + */ + +#if HAVE_CONFIG_H +#include "config.h" +#endif + +#include <errno.h> + +#include <rtems/libio.h> + +int mount_and_make_target_path( + const char *source, + const char *target, + const char *filesystemtype, + rtems_filesystem_options_t options, + const void *data +) +{ + int rv = -1; + + if (target != NULL) { + rv = rtems_mkdir(target, S_IRWXU | S_IRWXG | S_IRWXO); + if (rv == 0) { + rv = mount( + source, + target, + filesystemtype, + options, + data + ); + } + } else { + errno = EINVAL; + } + + return rv; +} diff --git a/cpukit/libcsupport/src/mount.c b/cpukit/libcsupport/src/mount.c index 07f41f2ee4..c73ce89e35 100644 --- a/cpukit/libcsupport/src/mount.c +++ b/cpukit/libcsupport/src/mount.c @@ -93,30 +93,31 @@ static bool Is_node_fs_root( } static rtems_filesystem_mount_table_entry_t *alloc_mount_table_entry( - const char *source, - const char *target, + const char *source_or_null, + const char *target_or_null, const char *filesystemtype, size_t *target_length_ptr ) { - const char *target_str = target ? target : "/"; + const char *target = target_or_null != NULL ? target_or_null : "/"; size_t filesystemtype_size = strlen( filesystemtype ) + 1; - size_t source_size = source ? strlen( source ) + 1 : 0; - size_t target_length = strlen( target_str ); + size_t source_size = source_or_null != NULL ? + strlen( source_or_null ) + 1 : 0; + size_t target_length = strlen( target ); size_t size = sizeof( rtems_filesystem_mount_table_entry_t ) + filesystemtype_size + source_size + target_length + 1; rtems_filesystem_mount_table_entry_t *mt_entry = calloc( 1, size ); - if ( mt_entry ) { + if ( mt_entry != NULL ) { char *str = (char *) mt_entry + sizeof( *mt_entry ); mt_entry->type = str; strcpy( str, filesystemtype ); - if ( source ) { + if ( source_or_null != NULL ) { str += filesystemtype_size; mt_entry->dev = str; - strcpy( str, source ); + strcpy( str, source_or_null ); } str += source_size; diff --git a/cpukit/libcsupport/src/unmount.c b/cpukit/libcsupport/src/unmount.c index 164cf6ef69..b535ea9b53 100644 --- a/cpukit/libcsupport/src/unmount.c +++ b/cpukit/libcsupport/src/unmount.c @@ -33,16 +33,6 @@ #include <rtems/libio_.h> #include <rtems/seterr.h> -/* - * Data structures and routines private to mount/unmount pair. - */ - -extern rtems_chain_control rtems_filesystem_mount_table_control; - -int search_mt_for_mount_point( - rtems_filesystem_location_info_t *location_of_mount_point -); - bool rtems_filesystem_nodes_equal( const rtems_filesystem_location_info_t *loc1, const rtems_filesystem_location_info_t *loc2 @@ -213,7 +203,6 @@ int unmount( */ rtems_filesystem_freenode( fs_mount_loc ); - free( (void*) mt_entry->target ); free( mt_entry ); return 0; diff --git a/cpukit/libnetworking/lib/ftpfs.c b/cpukit/libnetworking/lib/ftpfs.c index 5e7f520990..c9d6363863 100644 --- a/cpukit/libnetworking/lib/ftpfs.c +++ b/cpukit/libnetworking/lib/ftpfs.c @@ -99,6 +99,8 @@ typedef struct { struct timeval timeout; } rtems_ftpfs_mount_entry; +static const rtems_filesystem_operations_table rtems_ftpfs_ops; + static const rtems_filesystem_file_handlers_r rtems_ftpfs_handlers; static const rtems_filesystem_file_handlers_r rtems_ftpfs_root_handlers; @@ -130,36 +132,6 @@ static int rtems_ftpfs_set_connection_timeout( return 0; } -#if 0 -CCJ_REMOVE_MOUNT -rtems_status_code rtems_ftpfs_mount(const char *mount_point) -{ - int rv = 0; - - if (mount_point == NULL) { - mount_point = RTEMS_FTPFS_MOUNT_POINT_DEFAULT; - } - - rv = mkdir(mount_point, S_IRWXU | S_IRWXG | S_IRWXO); - if (rv != 0) { - return RTEMS_IO_ERROR; - } - - rv = mount( - NULL, - &rtems_ftpfs_ops, - RTEMS_FILESYSTEM_READ_WRITE, - NULL, - mount_point - ); - if (rv != 0) { - return RTEMS_IO_ERROR; - } - - return RTEMS_SUCCESSFUL; -} -#endif - static rtems_status_code rtems_ftpfs_do_ioctl( const char *mount_point, ioctl_command_t req, @@ -1318,7 +1290,7 @@ static int rtems_ftpfs_fstat( return 0; } -const rtems_filesystem_operations_table rtems_ftpfs_ops = { +static const rtems_filesystem_operations_table rtems_ftpfs_ops = { .evalpath_h = rtems_ftpfs_eval_path, .evalformake_h = NULL, .link_h = NULL, diff --git a/cpukit/libnetworking/rtems/ftpfs.h b/cpukit/libnetworking/rtems/ftpfs.h index a9d89d45ef..0bb500229d 100644 --- a/cpukit/libnetworking/rtems/ftpfs.h +++ b/cpukit/libnetworking/rtems/ftpfs.h @@ -1,7 +1,7 @@ /** * @file * - * File Transfer Protocol file system (FTP client). + * @brief File Transfer Protocol file system (FTP client). */ /* @@ -46,12 +46,15 @@ extern "C" { /** * @defgroup rtems_ftpfs File Transfer Protocol File System * - * The FTP file system (FTP client) can be used to transfer files from or to - * remote hosts. + * @brief The FTP file system (FTP client) can be used to transfer files from + * or to remote hosts. * - * You can mount the FTP file system with a call to rtems_ftpfs_mount(). - * Alternatively you can use mount() with the @ref rtems_ftpfs_ops operations - * table. + * You can mount the FTP file system with a call to mount() or + * mount_and_make_target_path() with the @ref RTEMS_FILESYSTEM_TYPE_FTPFS file + * system type. + * + * You have to add @ref CONFIGURE_FILESYSTEM_FTPFS to your application + * configuration. * * You can open files either read-only or write-only. A seek is not allowed. * A close terminates the control and data connections. @@ -74,17 +77,17 @@ extern "C" { */ /** - * Well-known port number for FTP control connection. + * @brief Well-known port number for FTP control connection. */ #define RTEMS_FTPFS_CTRL_PORT 21 /** - * Default mount point for FTP file system. + * @brief Default mount point for FTP file system. */ #define RTEMS_FTPFS_MOUNT_POINT_DEFAULT "/FTP" /** - * FTP file system IO control requests. + * @brief FTP file system IO control requests. */ typedef enum { RTEMS_FTPFS_IOCTL_GET_VERBOSE = _IOR( 'd', 1, bool *), @@ -94,13 +97,8 @@ typedef enum { } rtems_ftpfs_ioctl_numbers; /** - * FTP file system operations table. - */ -extern const rtems_filesystem_operations_table rtems_ftpfs_ops; - -/** - * Returns in @a verbose if the verbose mode is enabled or disabled for the - * file system at @a mount_point. + * @brief Returns in @a verbose if the verbose mode is enabled or disabled for + * the file system at @a mount_point. * * If @a mount_point is @c NULL the default mount point * @ref RTEMS_FTPFS_MOUNT_POINT_DEFAULT will be used. @@ -108,7 +106,7 @@ extern const rtems_filesystem_operations_table rtems_ftpfs_ops; rtems_status_code rtems_ftpfs_get_verbose( const char *mount_point, bool *verbose); /** - * Enables or disables the verbose mode if @a verbose is @c true or + * @brief Enables or disables the verbose mode if @a verbose is @c true or * @c false respectively for the file system at @a mount_point. * * In the enabled verbose mode the commands and replies of the FTP control @@ -120,8 +118,8 @@ rtems_status_code rtems_ftpfs_get_verbose( const char *mount_point, bool *verbos rtems_status_code rtems_ftpfs_set_verbose( const char *mount_point, bool verbose); /** - * Returns the current timeout value in @a timeout for the file system at - * @a mount_point. + * @brief Returns the current timeout value in @a timeout for the file system + * at @a mount_point. * * If @a mount_point is @c NULL the default mount point * @ref RTEMS_FTPFS_MOUNT_POINT_DEFAULT will be used. @@ -132,7 +130,8 @@ rtems_status_code rtems_ftpfs_get_timeout( ); /** - * Sets the timeout value to @a timeout for the file system at @a mount_point. + * @brief Sets the timeout value to @a timeout for the file system at + * @a mount_point. * * The timeout value will be used during connection establishment of active * data connections. It will be also used for send and receive operations on @@ -149,13 +148,12 @@ rtems_status_code rtems_ftpfs_set_timeout( /** @} */ /** - * Creates the default mount point @ref RTEMS_FTPFS_MOUNT_POINT_DEFAULT and - * mounts the FTP file system. Do not call directly, use mount.xs - * - * It is mounted with read and write access. + * @brief Do not call directly, use mount(). */ -int rtems_ftpfs_initialize(rtems_filesystem_mount_table_entry_t *e, - const void *d); +int rtems_ftpfs_initialize( + rtems_filesystem_mount_table_entry_t *mt_entry, + const void *data +); #ifdef __cplusplus } diff --git a/cpukit/sapi/include/confdefs.h b/cpukit/sapi/include/confdefs.h index d826c27e86..3985bfbf6e 100644 --- a/cpukit/sapi/include/confdefs.h +++ b/cpukit/sapi/include/confdefs.h @@ -284,7 +284,8 @@ rtems_fs_init_functions_t rtems_fs_init_helper = */ #if !defined(CONFIGURE_FILESYSTEM_ENTRY_miniIMFS) && \ defined(CONFIGURE_FILESYSTEM_miniIMFS) -#define CONFIGURE_FILESYSTEM_ENTRY_miniIMFS { "mimfs", miniIMFS_initialize } + #define CONFIGURE_FILESYSTEM_ENTRY_miniIMFS \ + { RTEMS_FILESYSTEM_TYPE_MINIIMFS, miniIMFS_initialize } #endif /** @@ -301,7 +302,8 @@ rtems_fs_init_functions_t rtems_fs_init_helper = #if !defined(CONFIGURE_FILESYSTEM_ENTRY_DEVFS) && \ defined(CONFIGURE_FILESYSTEM_DEVFS) #include <rtems/devfs.h> -#define CONFIGURE_FILESYSTEM_ENTRY_DEVFS { "devfs", devFS_initialize } + #define CONFIGURE_FILESYSTEM_ENTRY_DEVFS \ + { RTEMS_FILESYSTEM_TYPE_DEVFS, devFS_initialize } #endif #ifdef RTEMS_NETWORKING @@ -311,7 +313,8 @@ rtems_fs_init_functions_t rtems_fs_init_helper = #if !defined(CONFIGURE_FILESYSTEM_ENTRY_FTPFS) && \ defined(CONFIGURE_FILESYSTEM_FTPFS) #include <rtems/ftpfs.h> - #define CONFIGURE_FILESYSTEM_ENTRY_FTPFS { "ftpfs", rtems_ftpfs_initialize } + #define CONFIGURE_FILESYSTEM_ENTRY_FTPFS \ + { RTEMS_FILESYSTEM_TYPE_FTPFS, rtems_ftpfs_initialize } #endif /** @@ -320,7 +323,8 @@ rtems_fs_init_functions_t rtems_fs_init_helper = #if !defined(CONFIGURE_FILESYSTEM_ENTRY_TFTPFS) && \ defined(CONFIGURE_FILESYSTEM_TFTPFS) #include <rtems/tftp.h> - #define CONFIGURE_FILESYSTEM_ENTRY_TFTPFS { "tftpfs", rtems_tftpfs_initialize } + #define CONFIGURE_FILESYSTEM_ENTRY_TFTPFS \ + { RTEMS_FILESYSTEM_TYPE_TFTPFS, rtems_tftpfs_initialize } #endif /** @@ -329,7 +333,8 @@ rtems_fs_init_functions_t rtems_fs_init_helper = #if !defined(CONFIGURE_FILESYSTEM_ENTRY_NFSFS) && \ defined(CONFIGURE_FILESYSTEM_NFSFS) #include <librtemsNfs.h> - #define CONFIGURE_FILESYSTEM_ENTRY_NFSFS { "nfs", rtems_nfsfs_initialize } + #define CONFIGURE_FILESYSTEM_ENTRY_NFSFS \ + { RTEMS_FILESYSTEM_TYPE_NFS, rtems_nfsfs_initialize } #endif #endif @@ -339,7 +344,8 @@ rtems_fs_init_functions_t rtems_fs_init_helper = #if !defined(CONFIGURE_FILESYSTEM_ENTRY_DOSFS) && \ defined(CONFIGURE_FILESYSTEM_DOSFS) #include <rtems/dosfs.h> - #define CONFIGURE_FILESYSTEM_ENTRY_DOSFS { "dosfs", rtems_dosfs_initialize } + #define CONFIGURE_FILESYSTEM_ENTRY_DOSFS \ + { RTEMS_FILESYSTEM_TYPE_DOSFS, rtems_dosfs_initialize } #endif /** @@ -348,7 +354,8 @@ rtems_fs_init_functions_t rtems_fs_init_helper = #if !defined(CONFIGURE_FILESYSTEM_ENTRY_RFS) && \ defined(CONFIGURE_FILESYSTEM_RFS) #include <rtems/rtems-rfs.h> - #define CONFIGURE_FILESYSTEM_ENTRY_RFS { "rfs", rtems_rfs_rtems_initialise } + #define CONFIGURE_FILESYSTEM_ENTRY_RFS \ + { RTEMS_FILESYSTEM_TYPE_RFS, rtems_rfs_rtems_initialise } #endif #ifdef CONFIGURE_INIT @@ -440,11 +447,11 @@ rtems_fs_init_functions_t rtems_fs_init_helper = #ifndef CONFIGURE_HAS_OWN_MOUNT_TABLE const rtems_filesystem_mount_table_t configuration_mount_table = { #if defined(CONFIGURE_USE_DEVFS_AS_BASE_FILESYSTEM) - "devfs", + RTEMS_FILESYSTEM_TYPE_DEVFS, #elif defined(CONFIGURE_USE_MINIIMFS_AS_BASE_FILESYSTEM) - "mimfs", + RTEMS_FILESYSTEM_TYPE_MINIIMFS, #else /* using IMFS as base filesystem */ - "imfs", + RTEMS_FILESYSTEM_TYPE_IMFS, #endif RTEMS_FILESYSTEM_READ_WRITE, NULL, |