diff options
| author | Jung-uk Kim <jkim@FreeBSD.org> | 2006-12-04 22:46:09 +0000 |
|---|---|---|
| committer | Jung-uk Kim <jkim@FreeBSD.org> | 2006-12-04 22:46:09 +0000 |
| commit | b34608fea54ab60a3557a8e8a052a3bc1795aa69 (patch) | |
| tree | fc1bef3488a7a4a9059e6c9d2c2300bdb5d06720 /sys | |
| parent | 323c565bed1c12f472bb827a94f3e798e386c065 (diff) | |
Notes
Diffstat (limited to 'sys')
| -rw-r--r-- | sys/compat/linux/linux_misc.c | 27 |
1 files changed, 25 insertions, 2 deletions
diff --git a/sys/compat/linux/linux_misc.c b/sys/compat/linux/linux_misc.c index 10b0ad06a3aa..4511cfe46d36 100644 --- a/sys/compat/linux/linux_misc.c +++ b/sys/compat/linux/linux_misc.c @@ -890,11 +890,34 @@ linux_mknod(struct thread *td, struct linux_mknod_args *args) printf(ARGS(mknod, "%s, %d, %d"), path, args->mode, args->dev); #endif - if (S_ISFIFO(args->mode)) + switch (args->mode & S_IFMT) { + case S_IFIFO: + case S_IFSOCK: error = kern_mkfifo(td, path, UIO_SYSSPACE, args->mode); - else + break; + + case S_IFCHR: + case S_IFBLK: error = kern_mknod(td, path, UIO_SYSSPACE, args->mode, args->dev); + break; + + case S_IFDIR: + error = EPERM; + break; + + case 0: + args->mode |= S_IFREG; + /* fall through */ + case S_IFREG: + error = kern_open(td, path, UIO_SYSSPACE, + O_WRONLY | O_CREAT | O_TRUNC, args->mode); + break; + + default: + error = EINVAL; + break; + } LFREEPATH(path); return (error); } |
