- if ($^O eq 'freebsd' || $^O eq 'darwin' || $^O eq 'netbsd') {
- if (S_ISREG($modes)) {
- open(FILE, '>', $file) || return -$!;
- print FILE '';
- close(FILE);
- return 0;
- } elsif (S_ISFIFO($modes)) {
- my ($rv) = POSIX::mkfifo($file, S_IMODE($modes));
- return $rv ? 0 : -POSIX::errno();
- }
+ if (S_ISREG($modes)) {
+ open(FILE, '>', $file) || return -$!;
+ print FILE '';
+ close(FILE);
+ chmod S_IMODE($modes), $file;
+ return 0;
+ }
+ elsif (S_ISFIFO($modes)) {
+ my ($rv) = POSIX::mkfifo($file, S_IMODE($modes));
+ return $rv ? 0 : -POSIX::errno();
+ }
+ elsif (S_ISCHR($modes) || S_ISBLK($modes)) {
+ mknod($file, $modes, $dev);
+ return -$!;
+ }
+ # S_ISSOCK maybe should be handled; however, for our test it should
+ # not really matter.
+ else {
+ return -&ENOSYS;