Lines Matching refs:sp
108 #define CLR(opt) (sp->fts_options &= ~(opt))
109 #define ISSET(opt) (sp->fts_options & (opt))
110 #define SET(opt) (sp->fts_options |= (opt))
112 #define FCHDIR(sp, fd) (!ISSET(FTS_NOCHDIR) && __fchdir(fd)) argument
123 FTSOBJ *sp; in FTS_OPEN() local
136 if ((sp = malloc((u_int)sizeof(FTSOBJ))) == NULL) in FTS_OPEN()
138 memset(sp, 0, sizeof(FTSOBJ)); in FTS_OPEN()
139 sp->fts_compar = (int (*) (const void *, const void *)) compar; in FTS_OPEN()
140 sp->fts_options = options; in FTS_OPEN()
154 if (fts_palloc(sp, MAX(maxarglen, MAXPATHLEN))) in FTS_OPEN()
159 if ((parent = fts_alloc(sp, "", 0)) == NULL) in FTS_OPEN()
173 p = fts_alloc(sp, *argv, len); in FTS_OPEN()
177 p->fts_info = fts_stat(sp, p, ISSET(FTS_COMFOLLOW)); in FTS_OPEN()
201 root = fts_sort(sp, root, nitems); in FTS_OPEN()
208 if ((sp->fts_cur = fts_alloc(sp, "", 0)) == NULL) in FTS_OPEN()
210 sp->fts_cur->fts_link = root; in FTS_OPEN()
211 sp->fts_cur->fts_info = FTS_INIT; in FTS_OPEN()
221 && (sp->fts_rfd = __open(".", O_RDONLY, 0)) < 0) in FTS_OPEN()
224 return (sp); in FTS_OPEN()
228 mem2: free(sp->fts_path); in FTS_OPEN()
229 mem1: free(sp); in FTS_OPEN()
234 fts_load (FTSOBJ *sp, FTSENTRY *p) in fts_load() argument
247 memmove(sp->fts_path, p->fts_name, len + 1); in fts_load()
253 p->fts_accpath = p->fts_path = sp->fts_path; in fts_load()
254 sp->fts_dev = p->fts_dev; in fts_load()
258 FTS_CLOSE (FTSOBJ *sp) in FTS_CLOSE() argument
268 if (sp->fts_cur) { in FTS_CLOSE()
269 for (p = sp->fts_cur; p->fts_level >= FTS_ROOTLEVEL;) { in FTS_CLOSE()
278 if (sp->fts_child) in FTS_CLOSE()
279 fts_lfree(sp->fts_child); in FTS_CLOSE()
280 free(sp->fts_array); in FTS_CLOSE()
281 free(sp->fts_path); in FTS_CLOSE()
285 saved_errno = __fchdir(sp->fts_rfd) ? errno : 0; in FTS_CLOSE()
286 (void)__close(sp->fts_rfd); in FTS_CLOSE()
291 free(sp); in FTS_CLOSE()
298 free(sp); in FTS_CLOSE()
311 FTS_READ (FTSOBJ *sp) in FTS_READ() argument
319 if (sp->fts_cur == NULL || ISSET(FTS_STOP)) in FTS_READ()
323 p = sp->fts_cur; in FTS_READ()
331 p->fts_info = fts_stat(sp, p, 0); in FTS_READ()
343 p->fts_info = fts_stat(sp, p, 1); in FTS_READ()
358 (ISSET(FTS_XDEV) && p->fts_dev != sp->fts_dev)) { in FTS_READ()
361 if (sp->fts_child) { in FTS_READ()
362 fts_lfree(sp->fts_child); in FTS_READ()
363 sp->fts_child = NULL; in FTS_READ()
370 if (sp->fts_child != NULL && ISSET(FTS_NAMEONLY)) { in FTS_READ()
372 fts_lfree(sp->fts_child); in FTS_READ()
373 sp->fts_child = NULL; in FTS_READ()
388 if (sp->fts_child != NULL) { in FTS_READ()
389 if (fts_safe_changedir(sp, p, -1, p->fts_accpath)) { in FTS_READ()
392 for (p = sp->fts_child; p != NULL; in FTS_READ()
397 } else if ((sp->fts_child = fts_build(sp, BREAD)) == NULL) { in FTS_READ()
402 p = sp->fts_child; in FTS_READ()
403 sp->fts_child = NULL; in FTS_READ()
404 sp->fts_cur = p; in FTS_READ()
411 sp->fts_cur = p; in FTS_READ()
419 if (FCHDIR(sp, sp->fts_rfd)) { in FTS_READ()
423 fts_load(sp, p); in FTS_READ()
435 p->fts_info = fts_stat(sp, p, 1); in FTS_READ()
447 name: t = sp->fts_path + NAPPEND(p->fts_parent); in FTS_READ()
455 sp->fts_cur = p; in FTS_READ()
465 return (sp->fts_cur = NULL); in FTS_READ()
469 sp->fts_path[p->fts_pathlen] = '\0'; in FTS_READ()
477 if (FCHDIR(sp, sp->fts_rfd)) { in FTS_READ()
482 if (FCHDIR(sp, p->fts_symfd)) { in FTS_READ()
491 fts_safe_changedir(sp, p->fts_parent, -1, "..")) { in FTS_READ()
507 FTS_SET (FTSOBJ *sp, FTSENTRY *p, int instr) in FTS_SET() argument
519 FTS_CHILDREN(FTSOBJ *sp, int instr) in FTS_CHILDREN() argument
530 p = sp->fts_cur; in FTS_CHILDREN()
555 if (sp->fts_child != NULL) in FTS_CHILDREN()
556 fts_lfree(sp->fts_child); in FTS_CHILDREN()
573 return (sp->fts_child = fts_build(sp, instr)); in FTS_CHILDREN()
577 sp->fts_child = fts_build(sp, instr); in FTS_CHILDREN()
581 return (sp->fts_child); in FTS_CHILDREN()
609 fts_build (FTSOBJ *sp, int type) in fts_build() argument
623 cur = sp->fts_cur; in fts_build()
684 if (fts_safe_changedir(sp, cur, dirfd(dirp), NULL)) { in fts_build()
709 cp = sp->fts_path + len; in fts_build()
716 maxlen = sp->fts_pathlen - len; in fts_build()
726 if ((p = fts_alloc(sp, dp->d_name, _D_EXACT_NAMLEN (dp))) == NULL) in fts_build()
729 oldaddr = sp->fts_path; in fts_build()
730 if (fts_palloc(sp, _D_EXACT_NAMLEN (dp) + len + 1)) { in fts_build()
746 if (oldaddr != sp->fts_path) { in fts_build()
749 cp = sp->fts_path + len; in fts_build()
751 maxlen = sp->fts_pathlen - len; in fts_build()
770 p->fts_parent = sp->fts_cur; in fts_build()
801 p->fts_info = fts_stat(sp, p, 0); in fts_build()
827 fts_padjust(sp, head); in fts_build()
834 if (len == sp->fts_pathlen || nitems == 0) in fts_build()
848 FCHDIR(sp, sp->fts_rfd) : in fts_build()
849 fts_safe_changedir(sp, cur->fts_parent, -1, ".."))) { in fts_build()
865 if (sp->fts_compar && nitems > 1) in fts_build()
866 head = fts_sort(sp, head, nitems); in fts_build()
871 fts_stat (FTSOBJ *sp, FTSENTRY *p, int follow) in fts_stat() argument
951 fts_sort (FTSOBJ *sp, FTSENTRY *head, int nitems) in fts_sort() argument
962 if (nitems > sp->fts_nitems) { in fts_sort()
965 sp->fts_nitems = nitems + 40; in fts_sort()
966 if ((a = realloc(sp->fts_array, in fts_sort()
967 (size_t)(sp->fts_nitems * sizeof(FTSENTRY *)))) == NULL) { in fts_sort()
968 free(sp->fts_array); in fts_sort()
969 sp->fts_array = NULL; in fts_sort()
970 sp->fts_nitems = 0; in fts_sort()
973 sp->fts_array = a; in fts_sort()
975 for (ap = sp->fts_array, p = head; p; p = p->fts_link) in fts_sort()
977 qsort((void *)sp->fts_array, nitems, sizeof(FTSENTRY *), sp->fts_compar); in fts_sort()
978 for (head = *(ap = sp->fts_array); --nitems; ++ap) in fts_sort()
985 fts_alloc (FTSOBJ *sp, const char *name, size_t namelen) in fts_alloc() argument
1011 p->fts_path = sp->fts_path; in fts_alloc()
1039 fts_palloc (FTSOBJ *sp, size_t more) in fts_palloc() argument
1043 sp->fts_pathlen += more + 256; in fts_palloc()
1049 if (sp->fts_pathlen < 0 || sp->fts_pathlen >= USHRT_MAX) { in fts_palloc()
1050 free(sp->fts_path); in fts_palloc()
1051 sp->fts_path = NULL; in fts_palloc()
1055 p = realloc(sp->fts_path, sp->fts_pathlen); in fts_palloc()
1057 free(sp->fts_path); in fts_palloc()
1058 sp->fts_path = NULL; in fts_palloc()
1061 sp->fts_path = p; in fts_palloc()
1070 fts_padjust (FTSOBJ *sp, FTSENTRY *head) in fts_padjust() argument
1073 char *addr = sp->fts_path; in fts_padjust()
1083 for (p = sp->fts_child; p; p = p->fts_link) in fts_padjust()
1110 fts_safe_changedir (FTSOBJ *sp, FTSENTRY *p, int fd, const char *path) in fts_safe_changedir() argument