summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSebastian Huber <sebastian.huber@embedded-brains.de>2013-12-11 09:39:09 +0100
committerSebastian Huber <sebastian.huber@embedded-brains.de>2013-12-11 09:39:09 +0100
commit98e5c954bdb40d0e66d33eedcdd157fcbecbb114 (patch)
treee23f0c261956540f6a391610306c2c97b4496703
parentpsxsignal06: Fix bug where mutex not locked and add EPERM error check (diff)
downloadrtems-98e5c954bdb40d0e66d33eedcdd157fcbecbb114.tar.bz2
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.
-rw-r--r--cpukit/libfs/src/imfs/imfs.h2
-rw-r--r--cpukit/libfs/src/imfs/imfs_init.c2
-rw-r--r--cpukit/libfs/src/imfs/imfs_initsupp.c15
-rw-r--r--cpukit/libfs/src/imfs/miniimfs_init.c6
-rw-r--r--testsuites/sptests/spfifo01/init.c19
5 files changed, 22 insertions, 22 deletions
diff --git a/cpukit/libfs/src/imfs/imfs.h b/cpukit/libfs/src/imfs/imfs.h
index f6ddc7dccf..f4025ebc5a 100644
--- a/cpukit/libfs/src/imfs/imfs.h
+++ b/cpukit/libfs/src/imfs/imfs.h
@@ -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_linfile;
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 IMFS_ops;
diff --git a/cpukit/libfs/src/imfs/imfs_init.c b/cpukit/libfs/src/imfs/imfs_init.c
index f6409196aa..ec61643e7b 100644
--- a/cpukit/libfs/src/imfs/imfs_init.c
+++ b/cpukit/libfs/src/imfs/imfs_init.c
@@ -53,7 +53,7 @@ static const IMFS_node_control *const
[IMFS_SYM_LINK] = &IMFS_node_control_sym_link,
[IMFS_MEMORY_FILE] = &IMFS_node_control_memfile,
[IMFS_LINEAR_FILE] = &IMFS_node_control_linfile,
- [IMFS_FIFO] = &IMFS_node_control_fifo
+ [IMFS_FIFO] = &IMFS_node_control_enosys
};
int IMFS_initialize(
diff --git a/cpukit/libfs/src/imfs/imfs_initsupp.c b/cpukit/libfs/src/imfs/imfs_initsupp.c
index 7fe1e16b96..339a04f952 100644
--- a/cpukit/libfs/src/imfs/imfs_initsupp.c
+++ b/cpukit/libfs/src/imfs/imfs_initsupp.c
@@ -20,6 +20,7 @@
#include "imfs.h"
+#include <errno.h>
#include <stdlib.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 *node,
const IMFS_types_union *info
@@ -159,10 +170,10 @@ IMFS_jnode_t *IMFS_node_destroy_default( IMFS_jnode_t *node )
return node;
}
-const IMFS_node_control IMFS_node_control_default = {
+const IMFS_node_control IMFS_node_control_enosys = {
.imfs_type = IMFS_INVALID_NODE,
.handlers = &rtems_filesystem_handlers_default,
- .node_initialize = IMFS_node_initialize_default,
+ .node_initialize = IMFS_node_initialize_enosys,
.node_remove = IMFS_node_remove_default,
.node_destroy = IMFS_node_destroy_default
};
diff --git a/cpukit/libfs/src/imfs/miniimfs_init.c b/cpukit/libfs/src/imfs/miniimfs_init.c
index e06cda65ef..df50c05f6c 100644
--- a/cpukit/libfs/src/imfs/miniimfs_init.c
+++ b/cpukit/libfs/src/imfs/miniimfs_init.c
@@ -49,11 +49,11 @@ static const IMFS_node_control *const
IMFS_mini_node_controls [IMFS_TYPE_COUNT] = {
[IMFS_DIRECTORY] = &IMFS_node_control_directory,
[IMFS_DEVICE] = &IMFS_node_control_device,
- [IMFS_HARD_LINK] = &IMFS_node_control_default,
- [IMFS_SYM_LINK] = &IMFS_node_control_default,
+ [IMFS_HARD_LINK] = &IMFS_node_control_enosys,
+ [IMFS_SYM_LINK] = &IMFS_node_control_enosys,
[IMFS_MEMORY_FILE] = &IMFS_node_control_memfile,
[IMFS_LINEAR_FILE] = &IMFS_node_control_linfile,
- [IMFS_FIFO] = &IMFS_node_control_default
+ [IMFS_FIFO] = &IMFS_node_control_enosys
};
int miniIMFS_initialize(
diff --git a/testsuites/sptests/spfifo01/init.c b/testsuites/sptests/spfifo01/init.c
index e01204ede1..9128a678e4 100644
--- a/testsuites/sptests/spfifo01/init.c
+++ b/testsuites/sptests/spfifo01/init.c
@@ -38,22 +38,11 @@ static void test_main(void)
"Creating named fifo '" FIFO_PATH "'.\n"
"Must result in failure since pipes are disabled in the configuration."
);
- status = mkfifo(FIFO_PATH, 0777);
- rtems_test_assert(status == 0);
-
- 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);
+ errno = 0;
+ status = mkfifo(FIFO_PATH, 0777);
+ rtems_test_assert(status == -1);
+ rtems_test_assert(errno == ENOSYS);
puts("*** END OF FIFO / PIPE OPEN TEST - 1 ***");
}