summaryrefslogtreecommitdiffstats
path: root/cpukit/libcsupport/src/mknod.c
diff options
context:
space:
mode:
Diffstat (limited to 'cpukit/libcsupport/src/mknod.c')
-rw-r--r--cpukit/libcsupport/src/mknod.c15
1 files changed, 13 insertions, 2 deletions
diff --git a/cpukit/libcsupport/src/mknod.c b/cpukit/libcsupport/src/mknod.c
index c786c6d756..c2c86e7afe 100644
--- a/cpukit/libcsupport/src/mknod.c
+++ b/cpukit/libcsupport/src/mknod.c
@@ -40,8 +40,19 @@ int mknod(
const char *name_start;
int result;
- if ( !(mode & (S_IFREG|S_IFCHR|S_IFBLK|S_IFIFO) ) )
- rtems_set_errno_and_return_minus_one( EINVAL );
+ /*
+ * The file type is field within the mode. Check we have a sane mode set.
+ */
+ switch (mode & S_IFMT) {
+ case S_IFDIR:
+ case S_IFCHR:
+ case S_IFBLK:
+ case S_IFREG:
+ case S_IFIFO:
+ break;
+ default:
+ rtems_set_errno_and_return_minus_one( EINVAL );
+ }
if ( S_ISFIFO(mode) )
rtems_set_errno_and_return_minus_one( ENOTSUP );