• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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