#include #include #include #include #include #include #include #include static int mastercmp(const FTSENT **a, const FTSENT **b) { int a_info, b_info; #if 0 __msan_unpoison(a, sizeof(void*)); __msan_unpoison(b, sizeof(void*)); __msan_unpoison(*a, sizeof(FTSENT)); __msan_unpoison(*b, sizeof(FTSENT)); #endif printf("(*a).fts_path=%s\n", (*a)->fts_path); printf("(*b).fts_path=%s\n", (*b)->fts_path); a_info = (*a)->fts_info; if (a_info == FTS_ERR) return (0); b_info = (*b)->fts_info; if (b_info == FTS_ERR) return (0); if (a_info == FTS_NS || b_info == FTS_NS) { if (b_info != FTS_NS) return (1); else if (a_info != FTS_NS) return (-1); else return strcmp((*a)->fts_name, (*b)->fts_name); } if (a_info != b_info && (*a)->fts_level == FTS_ROOTLEVEL) { if (a_info == FTS_D) return (1); else if (b_info == FTS_D) return (-1); } return strcmp((*a)->fts_name, (*b)->fts_name); } int main(int argc, char **argv) { FTS *ftsp; int options = 0; if (argc < 2) errx(EXIT_FAILURE, "argc < 2"); ftsp = fts_open(argv, options, mastercmp); if (ftsp == NULL) err(EXIT_FAILURE, NULL); printf("ftsp->fts_path=%s\n", ftsp->fts_path); fts_children(ftsp, 0); return EXIT_SUCCESS; }