Home | History | Annotate | Download | only in tests
      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 
     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