static void test_abspath_vs_normpath(void) { const char *abs = t_abspath_to("../../bin", "/usr/lib/"); test_assert_strcmp(abs, "/usr/lib//../../bin"); const char *norm = NULL, *error = NULL; test_assert(t_normpath_to("../../bin", "/usr///lib/", &norm, &error) == 0); test_assert_strcmp(norm, "/bin"); }
static void test_files_read_dir(const char *path) { DIR *dirp; /* open the directory */ if ((dirp = opendir(path)) == NULL) { if (errno == ENOENT || errno == EACCES) return; i_fatal("test files: " "failed to open directory %s: %m", path); } /* read entries */ for (;;) { const char *file; struct dirent *dp; struct stat st; errno = 0; if ((dp=readdir(dirp)) == NULL) break; if (*dp->d_name == '.') continue; file = t_abspath_to(dp->d_name, path); if (stat(file, &st) == 0) { if (S_ISREG(st.st_mode)) { file += 2; /* skip "./" */ file = p_strdup(files_pool, file); array_append(&files, &file, 1); } else { test_files_read_dir(file); } } } if (errno != 0) i_fatal("test files: " "failed to read directory %s: %m", path); /* Close the directory */ if (closedir(dirp) < 0) i_error("test files: " "failed to close directory %s: %m", path); }