/**
* @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;
}