summaryrefslogtreecommitdiffstats
path: root/cpukit
diff options
context:
space:
mode:
authorSebastian Huber <sebastian.huber@embedded-brains.de>2010-07-01 14:39:39 +0000
committerSebastian Huber <sebastian.huber@embedded-brains.de>2010-07-01 14:39:39 +0000
commit3d3a18e619ce62485d3508a6b7dd1467c912bbad (patch)
treeeeb9b9d70190c395460d0511c0c048efc883d5c0 /cpukit
parent2010-06-08 Sebastian Huber <sebastian.huber@embedded-brains.de> (diff)
downloadrtems-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/ChangeLog31
-rw-r--r--cpukit/libcsupport/Makefile.am2
-rw-r--r--cpukit/libcsupport/include/rtems/libio.h40
-rw-r--r--cpukit/libcsupport/src/mount-mktgt.c56
-rw-r--r--cpukit/libcsupport/src/mount.c17
-rw-r--r--cpukit/libcsupport/src/unmount.c11
-rw-r--r--cpukit/libnetworking/lib/ftpfs.c34
-rw-r--r--cpukit/libnetworking/rtems/ftpfs.h50
-rw-r--r--cpukit/sapi/include/confdefs.h27
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,