/** * @file file_tests.c * * @remark Copyright 2002 OProfile authors * @remark Read the file COPYING * * @author John Levon * @author Philippe Elie */ #include "op_file.h" #include <stdlib.h> #include <unistd.h> #include <stdio.h> #include <string.h> #include <limits.h> static char * tests[][2] = { { "/usr/bin/../bin", "/usr/bin" }, { "/../usr/bin/", "/usr/bin" }, { "/../../usr/bin/", "/usr/bin" }, { "/../../usr/bin/.", "/usr/bin" }, { "/../../usr/bin/./", "/usr/bin" }, { "/usr/./bin", "/usr/bin" }, { "/usr/././bin", "/usr/bin" }, { "/usr///", "/usr" }, { "../", "/" }, { "./", "/usr" }, { ".", "/usr" }, { "./../", "/" }, { "bin/../bin/../", "/usr" }, { "../../../../../", "/" }, { "/usr/bin/../../..", "/" }, { "/usr/bin/../../../", "/" }, { "././.", "/usr" }, /* POSIX namespace ignored by realpath(3) */ { "//", "/" }, { "//usr", "/usr" }, { "///", "/" }, { NULL, NULL }, }; int main(void) { char tmp[PATH_MAX]; size_t i = 0; if (chdir("/usr")) { fprintf(stderr, "chdir(\"/usr\") failed for %s\n", tests[i][0]); exit(EXIT_FAILURE); } while (tests[i][0]) { if (!realpath(tests[i][0], tmp)) { fprintf(stderr, "NULL return for %s\n", tests[i][0]); exit(EXIT_FAILURE); } if (strcmp(tmp, tests[i][1])) { fprintf(stderr, "%s does not match %s given %s\n", tmp, tests[i][1], tests[i][0]); exit(EXIT_FAILURE); } ++i; } return EXIT_SUCCESS; }