forked from Imagelibrary/rtems
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:
@@ -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;
|
||||||
|
|||||||
@@ -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(
|
||||||
|
|||||||
@@ -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
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -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(
|
||||||
|
|||||||
@@ -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 ***");
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user