comparison tests/test-mknod.c @ 12267:c400da5f66bb

mknod: new module Solaris 9 mknod("name/",mode,dev) mistakenly creates "name" for non-directory mode. FreeBSD 7.2 mknod("dangling/",mode,dev) mistakenly creates the target of the symlink if run as root. FreeBSD and OpenBSD mknod("fifo",S_IFIFO|mode,0) fails for non-root. Use of mknod caused link failures on mingw. * modules/mknod: New file. * m4/mknod.m4 (gl_FUNC_MKNOD): Likewise. * lib/mknod.c (mknod): Likewise. * m4/sys_stat_h.m4 (gl_SYS_STAT_H_DEFAULTS): Set witness defaults. * modules/sys_stat (Makefile.am): Substitute them. * lib/sys_stat.in.h (mknod): Declare replacement. * MODULES.html.sh (Support for systems lacking POSIX:2008): Document it. * doc/posix-functions/mknod.texi (mknod): Likewise. * modules/mknod-tests: New test. * tests/test-mknod.c: Likewise. Signed-off-by: Eric Blake <ebb9@byu.net>
author Eric Blake <ebb9@byu.net>
date Wed, 11 Nov 2009 13:23:04 -0700
parents
children 33ab12a7cea2
comparison
equal deleted inserted replaced
12266:37fd04a02bc8 12267:c400da5f66bb
1 /* Tests of mknod.
2 Copyright (C) 2009 Free Software Foundation, Inc.
3
4 This program is free software: you can redistribute it and/or modify
5 it under the terms of the GNU General Public License as published by
6 the Free Software Foundation; either version 3 of the License, or
7 (at your option) any later version.
8
9 This program is distributed in the hope that it will be useful,
10 but WITHOUT ANY WARRANTY; without even the implied warranty of
11 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 GNU General Public License for more details.
13
14 You should have received a copy of the GNU General Public License
15 along with this program. If not, see <http://www.gnu.org/licenses/>. */
16
17 /* Written by Eric Blake <ebb9@byu.net>, 2009. */
18
19 #include <config.h>
20
21 #include <sys/stat.h>
22
23 #include <fcntl.h>
24 #include <errno.h>
25 #include <stdbool.h>
26 #include <stdio.h>
27 #include <stdlib.h>
28 #include <unistd.h>
29
30 #define ASSERT(expr) \
31 do \
32 { \
33 if (!(expr)) \
34 { \
35 fprintf (stderr, "%s:%d: assertion failed\n", __FILE__, __LINE__); \
36 fflush (stderr); \
37 abort (); \
38 } \
39 } \
40 while (0)
41
42 #define BASE "test-mknod.t"
43
44 #include "test-mkfifo.h"
45
46 /* Wrapper around mknod, to create fifos. */
47 static int
48 do_mknod (char const *name, mode_t mode)
49 {
50 return mknod (name, mode | S_IFIFO, 0);
51 }
52
53 int
54 main (void)
55 {
56 /* Remove any leftovers from a previous partial run. */
57 ASSERT (system ("rm -rf " BASE "*") == 0);
58
59 /* We can only portably test creation of fifos. Anything else
60 requires root privileges and knowledge of device numbers. */
61 return test_mkfifo (do_mknod, true);
62 }