PR2160: imfs: Use ENOSYS for unsupported nodes

Return an error status with errno set to ENOSYS during node creation for
nodes not available in the current configuration.
This commit is contained in:
Sebastian Huber
2013-12-11 09:39:09 +01:00
parent 0b59942156
commit 98e5c954bd
5 changed files with 22 additions and 22 deletions

View File

@@ -380,7 +380,7 @@ extern const IMFS_node_control IMFS_node_control_sym_link;
extern const IMFS_node_control IMFS_node_control_memfile; extern const IMFS_node_control IMFS_node_control_memfile;
extern const IMFS_node_control IMFS_node_control_linfile; extern const IMFS_node_control IMFS_node_control_linfile;
extern const IMFS_node_control IMFS_node_control_fifo; extern const IMFS_node_control IMFS_node_control_fifo;
extern const IMFS_node_control IMFS_node_control_default; extern const IMFS_node_control IMFS_node_control_enosys;
extern const rtems_filesystem_operations_table miniIMFS_ops; extern const rtems_filesystem_operations_table miniIMFS_ops;
extern const rtems_filesystem_operations_table IMFS_ops; extern const rtems_filesystem_operations_table IMFS_ops;

View File

@@ -53,7 +53,7 @@ static const IMFS_node_control *const
[IMFS_SYM_LINK] = &IMFS_node_control_sym_link, [IMFS_SYM_LINK] = &IMFS_node_control_sym_link,
[IMFS_MEMORY_FILE] = &IMFS_node_control_memfile, [IMFS_MEMORY_FILE] = &IMFS_node_control_memfile,
[IMFS_LINEAR_FILE] = &IMFS_node_control_linfile, [IMFS_LINEAR_FILE] = &IMFS_node_control_linfile,
[IMFS_FIFO] = &IMFS_node_control_fifo [IMFS_FIFO] = &IMFS_node_control_enosys
}; };
int IMFS_initialize( int IMFS_initialize(

View File

@@ -20,6 +20,7 @@
#include "imfs.h" #include "imfs.h"
#include <errno.h>
#include <stdlib.h> #include <stdlib.h>
#include <string.h> #include <string.h>
@@ -139,6 +140,16 @@ void IMFS_node_free( const rtems_filesystem_location_info_t *loc )
} }
} }
static IMFS_jnode_t *IMFS_node_initialize_enosys(
IMFS_jnode_t *node,
const IMFS_types_union *info
)
{
errno = ENOSYS;
return NULL;
}
IMFS_jnode_t *IMFS_node_initialize_default( IMFS_jnode_t *IMFS_node_initialize_default(
IMFS_jnode_t *node, IMFS_jnode_t *node,
const IMFS_types_union *info const IMFS_types_union *info
@@ -159,10 +170,10 @@ IMFS_jnode_t *IMFS_node_destroy_default( IMFS_jnode_t *node )
return node; return node;
} }
const IMFS_node_control IMFS_node_control_default = { const IMFS_node_control IMFS_node_control_enosys = {
.imfs_type = IMFS_INVALID_NODE, .imfs_type = IMFS_INVALID_NODE,
.handlers = &rtems_filesystem_handlers_default, .handlers = &rtems_filesystem_handlers_default,
.node_initialize = IMFS_node_initialize_default, .node_initialize = IMFS_node_initialize_enosys,
.node_remove = IMFS_node_remove_default, .node_remove = IMFS_node_remove_default,
.node_destroy = IMFS_node_destroy_default .node_destroy = IMFS_node_destroy_default
}; };

View File

@@ -49,11 +49,11 @@ static const IMFS_node_control *const
IMFS_mini_node_controls [IMFS_TYPE_COUNT] = { IMFS_mini_node_controls [IMFS_TYPE_COUNT] = {
[IMFS_DIRECTORY] = &IMFS_node_control_directory, [IMFS_DIRECTORY] = &IMFS_node_control_directory,
[IMFS_DEVICE] = &IMFS_node_control_device, [IMFS_DEVICE] = &IMFS_node_control_device,
[IMFS_HARD_LINK] = &IMFS_node_control_default, [IMFS_HARD_LINK] = &IMFS_node_control_enosys,
[IMFS_SYM_LINK] = &IMFS_node_control_default, [IMFS_SYM_LINK] = &IMFS_node_control_enosys,
[IMFS_MEMORY_FILE] = &IMFS_node_control_memfile, [IMFS_MEMORY_FILE] = &IMFS_node_control_memfile,
[IMFS_LINEAR_FILE] = &IMFS_node_control_linfile, [IMFS_LINEAR_FILE] = &IMFS_node_control_linfile,
[IMFS_FIFO] = &IMFS_node_control_default [IMFS_FIFO] = &IMFS_node_control_enosys
}; };
int miniIMFS_initialize( int miniIMFS_initialize(

View File

@@ -38,22 +38,11 @@ static void test_main(void)
"Creating named fifo '" FIFO_PATH "'.\n" "Creating named fifo '" FIFO_PATH "'.\n"
"Must result in failure since pipes are disabled in the configuration." "Must result in failure since pipes are disabled in the configuration."
); );
errno = 0;
status = mkfifo(FIFO_PATH, 0777); status = mkfifo(FIFO_PATH, 0777);
rtems_test_assert(status == 0); rtems_test_assert(status == -1);
rtems_test_assert(errno == ENOSYS);
fd = open(FIFO_PATH, O_RDWR);
rtems_test_assert(fd >= 0);
n = read(fd, buf, sizeof(buf));
rtems_test_assert(n == -1);
rtems_test_assert(errno == ENOTSUP);
n = write(fd, buf, sizeof(buf));
rtems_test_assert(n == -1);
rtems_test_assert(errno == ENOTSUP);
status = close(fd);
rtems_test_assert(status == 0);
puts("*** END OF FIFO / PIPE OPEN TEST - 1 ***"); puts("*** END OF FIFO / PIPE OPEN TEST - 1 ***");
} }