1 /**
2 * @file file_tests.c
3 *
4 * @remark Copyright 2002 OProfile authors
5 * @remark Read the file COPYING
6 *
7 * @author John Levon
8 * @author Philippe Elie
9 */
10
11 #include "op_file.h"
12
13 #include <stdlib.h>
14 #include <unistd.h>
15 #include <stdio.h>
16 #include <string.h>
17 #include <limits.h>
18
19 static char * tests[][2] = {
20 { "/usr/bin/../bin", "/usr/bin" },
21 { "/../usr/bin/", "/usr/bin" },
22 { "/../../usr/bin/", "/usr/bin" },
23 { "/../../usr/bin/.", "/usr/bin" },
24 { "/../../usr/bin/./", "/usr/bin" },
25 { "/usr/./bin", "/usr/bin" },
26 { "/usr/././bin", "/usr/bin" },
27 { "/usr///", "/usr" },
28 { "../", "/" },
29 { "./", "/usr" },
30 { ".", "/usr" },
31 { "./../", "/" },
32 { "bin/../bin/../", "/usr" },
33 { "../../../../../", "/" },
34 { "/usr/bin/../../..", "/" },
35 { "/usr/bin/../../../", "/" },
36 { "././.", "/usr" },
37 /* POSIX namespace ignored by realpath(3) */
38 { "//", "/" },
39 { "//usr", "/usr" },
40 { "///", "/" },
41 { NULL, NULL },
42 };
43
main(void)44 int main(void)
45 {
46 char tmp[PATH_MAX];
47 size_t i = 0;
48
49 if (chdir("/usr")) {
50 fprintf(stderr, "chdir(\"/usr\") failed for %s\n", tests[i][0]);
51 exit(EXIT_FAILURE);
52 }
53
54 while (tests[i][0]) {
55 if (!realpath(tests[i][0], tmp)) {
56 fprintf(stderr, "NULL return for %s\n", tests[i][0]);
57 exit(EXIT_FAILURE);
58 }
59
60 if (strcmp(tmp, tests[i][1])) {
61 fprintf(stderr, "%s does not match %s given %s\n",
62 tmp, tests[i][1], tests[i][0]);
63 exit(EXIT_FAILURE);
64 }
65 ++i;
66 }
67
68 return EXIT_SUCCESS;
69 }
70