diff options
-rw-r--r-- | ChangeLog | 5 | ||||
-rw-r--r-- | sysdeps/mach/hurd/xmknod.c | 12 |
2 files changed, 14 insertions, 3 deletions
@@ -1,3 +1,8 @@ +2005-12-15 Thomas Schwinge <tschwinge@gnu.org> + + [BZ #2061] + * sysdeps/mach/hurd/xmknod.c (__xmknod): Handle S_IFREG. + 2005-12-20 Roland McGrath <roland@redhat.com> * sysdeps/unix/sysv/linux/ifreq.h: File removed. diff --git a/sysdeps/mach/hurd/xmknod.c b/sysdeps/mach/hurd/xmknod.c index 2989215..aaa6771 100644 --- a/sysdeps/mach/hurd/xmknod.c +++ b/sysdeps/mach/hurd/xmknod.c @@ -1,4 +1,5 @@ -/* Copyright (C) 1991,92,93,94,95,96,99,2002 Free Software Foundation, Inc. +/* Copyright (C) 1991,1992,1993,1994,1995,1996,1999,2002,2005 + Free Software Foundation, Inc. This file is part of the GNU C Library. The GNU C Library is free software; you can redistribute it and/or @@ -57,13 +58,18 @@ __xmknod (int vers, const char *file_name, mode_t mode, dev_t *dev) translator = _HURD_FIFO; len = sizeof (_HURD_FIFO); } + else if (S_ISREG (mode)) + { + translator = NULL; + len = 0; + } else { errno = EINVAL; return -1; } - if (! S_ISFIFO (mode)) + if (translator != NULL && ! S_ISFIFO (mode)) { /* We set the translator to "ifmt\0major\0minor\0", where IFMT depends on the S_IFMT bits of our MODE argument, and MAJOR and @@ -89,7 +95,7 @@ __xmknod (int vers, const char *file_name, mode_t mode, dev_t *dev) /* Create a new, unlinked node in the target directory. */ err = __dir_mkfile (dir, O_WRITE, (mode & ~S_IFMT) & ~_hurd_umask, &node); - if (! err) + if (! err && translator != NULL) /* Set the node's translator to make it a device. */ err = __file_set_translator (node, FS_TRANS_EXCL | FS_TRANS_SET, |