1 /* Test that values of pathconf and fpathconf are consistent for a file.
2 Copyright (C) 2013-2016 Free Software Foundation, Inc.
3 This file is part of the GNU C Library.
5 The GNU C Library is free software; you can redistribute it and/or
6 modify it under the terms of the GNU Lesser General Public
7 License as published by the Free Software Foundation; either
8 version 2.1 of the License, or (at your option) any later version.
10 The GNU C Library is distributed in the hope that it will be useful,
11 but WITHOUT ANY WARRANTY; without even the implied warranty of
12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
13 Lesser General Public License for more details.
15 You should have received a copy of the GNU Lesser General Public
16 License along with the GNU C Library; if not, see
17 <http://www.gnu.org/licenses/>. */
26 static void prepare (void);
27 #define PREPARE(argc, argv) prepare ()
29 static int do_test (void);
30 #define TEST_FUNCTION do_test ()
32 #include "../test-skeleton.c"
40 size_t test_dir_len
= strlen (test_dir
);
41 static const char dir_name
[] = "/tst-pathconf.XXXXXX";
43 size_t dirbuflen
= test_dir_len
+ sizeof (dir_name
);
44 dirbuf
= malloc (dirbuflen
);
47 puts ("Out of memory");
51 snprintf (dirbuf
, dirbuflen
, "%s%s", test_dir
, dir_name
);
52 if (mkdtemp (dirbuf
) == NULL
)
54 printf ("Cannot create temporary directory: %s\n", strerror (errno
));
58 add_temp_file (dirbuf
);
60 dir_fd
= open (dirbuf
, O_RDONLY
);
63 printf ("Cannot open directory: %s\n", strerror (errno
));
73 static const char *fifo_name
= "some-fifo";
75 size_t filenamelen
= strlen (dirbuf
) + strlen (fifo_name
) + 2;
76 char *filename
= malloc (filenamelen
);
78 snprintf (filename
, filenamelen
, "%s/%s", dirbuf
, fifo_name
);
80 /* Create a fifo in the directory. */
81 int e
= mkfifo (filename
, 0777);
84 printf ("fifo creation failed (%s)\n", strerror (errno
));
89 long dir_pathconf
= pathconf (dirbuf
, _PC_PIPE_BUF
);
93 printf ("pathconf on directory failed: %s\n", strerror (errno
));
98 long fifo_pathconf
= pathconf (filename
, _PC_PIPE_BUF
);
100 if (fifo_pathconf
< 0)
102 printf ("pathconf on file failed: %s\n", strerror (errno
));
107 int fifo
= open (filename
, O_RDONLY
| O_NONBLOCK
);
111 printf ("fifo open failed (%s)\n", strerror (errno
));
116 long dir_fpathconf
= fpathconf (dir_fd
, _PC_PIPE_BUF
);
118 if (dir_fpathconf
< 0)
120 printf ("fpathconf on directory failed: %s\n", strerror (errno
));
125 long fifo_fpathconf
= fpathconf (fifo
, _PC_PIPE_BUF
);
127 if (fifo_fpathconf
< 0)
129 printf ("fpathconf on file failed: %s\n", strerror (errno
));
134 if (fifo_pathconf
!= fifo_fpathconf
)
136 printf ("fifo pathconf (%ld) != fifo fpathconf (%ld)\n", fifo_pathconf
,
142 if (dir_pathconf
!= fifo_pathconf
)
144 printf ("directory pathconf (%ld) != fifo pathconf (%ld)\n",
145 dir_pathconf
, fifo_pathconf
);
150 if (dir_fpathconf
!= fifo_fpathconf
)
152 printf ("directory fpathconf (%ld) != fifo fpathconf (%ld)\n",
153 dir_fpathconf
, fifo_fpathconf
);
163 if (unlink (filename
) != 0)
165 printf ("Could not remove fifo (%s)\n", strerror (errno
));
169 if (rmdir (dirbuf
) != 0)
171 printf ("Could not remove directory (%s)\n", strerror (errno
));