Lines Matching refs:sp
64 #define CLR(opt) (sp->fts_options &= ~(opt))
65 #define ISSET(opt) (sp->fts_options & (opt))
66 #define SET(opt) (sp->fts_options |= (opt))
68 #define FCHDIR(sp, fd) (!ISSET(FTS_NOCHDIR) && fchdir(fd))
119 FTS *sp;
139 sp = &priv->ftsp_fts;
140 sp->fts_compar = compar;
141 sp->fts_options = options;
151 if (fts_palloc(sp, MAX(fts_maxarglen(argv), MAXPATHLEN)))
155 if ((parent = fts_alloc(sp, "", 0)) == NULL)
166 p = fts_alloc(sp, *argv, len);
170 p->fts_info = fts_stat(sp, p, ISSET(FTS_COMFOLLOW), -1);
194 root = fts_sort(sp, root, nitems);
201 if ((sp->fts_cur = fts_alloc(sp, "", 0)) == NULL)
203 sp->fts_cur->fts_link = root;
204 sp->fts_cur->fts_info = FTS_INIT;
214 (sp->fts_rfd = _open(".", O_RDONLY | O_CLOEXEC, 0)) < 0)
217 return (sp);
221 mem2: free(sp->fts_path);
222 mem1: free(sp);
227 fts_load(FTS *sp, FTSENT *p)
240 memmove(sp->fts_path, p->fts_name, len + 1);
246 p->fts_accpath = p->fts_path = sp->fts_path;
247 sp->fts_dev = p->fts_dev;
251 fts_close(FTS *sp)
261 if (sp->fts_cur) {
262 for (p = sp->fts_cur; p->fts_level >= FTS_ROOTLEVEL;) {
271 if (sp->fts_child)
272 fts_lfree(sp->fts_child);
273 if (sp->fts_array)
274 free(sp->fts_array);
275 free(sp->fts_path);
279 saved_errno = fchdir(sp->fts_rfd) ? errno : 0;
280 (void)_close(sp->fts_rfd);
285 free(sp);
292 free(sp);
305 fts_read(FTS *sp)
313 if (sp->fts_cur == NULL || ISSET(FTS_STOP))
317 p = sp->fts_cur;
325 p->fts_info = fts_stat(sp, p, 0, -1);
337 p->fts_info = fts_stat(sp, p, 1, -1);
353 (ISSET(FTS_XDEV) && p->fts_dev != sp->fts_dev)) {
356 if (sp->fts_child) {
357 fts_lfree(sp->fts_child);
358 sp->fts_child = NULL;
365 if (sp->fts_child != NULL && ISSET(FTS_NAMEONLY)) {
367 fts_lfree(sp->fts_child);
368 sp->fts_child = NULL;
383 if (sp->fts_child != NULL) {
384 if (fts_safe_changedir(sp, p, -1, p->fts_accpath)) {
387 for (p = sp->fts_child; p != NULL;
392 } else if ((sp->fts_child = fts_build(sp, BREAD)) == NULL) {
397 p = sp->fts_child;
398 sp->fts_child = NULL;
410 if (FCHDIR(sp, sp->fts_rfd)) {
415 fts_load(sp, p);
416 return (sp->fts_cur = p);
429 p->fts_info = fts_stat(sp, p, 1, -1);
443 name: t = sp->fts_path + NAPPEND(p->fts_parent);
446 return (sp->fts_cur = p);
460 return (sp->fts_cur = NULL);
464 sp->fts_path[p->fts_pathlen] = '\0';
472 if (FCHDIR(sp, sp->fts_rfd)) {
477 if (FCHDIR(sp, p->fts_symfd)) {
486 fts_safe_changedir(sp, p->fts_parent, -1, "..")) {
492 return (sp->fts_cur = p);
503 fts_set(FTS *sp, FTSENT *p, int instr)
515 fts_children(FTS *sp, int instr)
526 p = sp->fts_cur;
551 if (sp->fts_child != NULL)
552 fts_lfree(sp->fts_child);
569 return (sp->fts_child = fts_build(sp, instr));
573 sp->fts_child = fts_build(sp, instr);
574 serrno = (sp->fts_child == NULL) ? errno : 0;
582 return (sp->fts_child);
590 (fts_get_clientptr)(FTS *sp)
593 return (fts_get_clientptr(sp));
607 fts_set_clientptr(FTS *sp, void *clientptr)
610 sp->fts_clientptr = clientptr;
628 fts_build(FTS *sp, int type)
642 cur = sp->fts_cur;
674 if (fts_ufslinks(sp, cur))
706 if (fts_safe_changedir(sp, cur, _dirfd(dirp), NULL)) {
729 cp = sp->fts_path + len;
736 maxlen = sp->fts_pathlen - len;
747 if ((p = fts_alloc(sp, dp->d_name, dnamlen)) == NULL)
750 oldaddr = sp->fts_path;
751 if (fts_palloc(sp, dnamlen + len + 1)) {
768 if (oldaddr != sp->fts_path) {
771 cp = sp->fts_path + len;
773 maxlen = sp->fts_pathlen - len;
777 p->fts_parent = sp->fts_cur;
806 p->fts_info = fts_stat(sp, p, 0, _dirfd(dirp));
809 p->fts_info = fts_stat(sp, p, 0, -1);
836 fts_padjust(sp, head);
843 sp->fts_path[cur->fts_pathlen] = '\0';
854 FCHDIR(sp, sp->fts_rfd) :
855 fts_safe_changedir(sp, cur->fts_parent, -1, ".."))) {
870 if (sp->fts_compar && nitems > 1)
871 head = fts_sort(sp, head, nitems);
876 fts_stat(FTS *sp, FTSENT *p, int follow, int dfd)
978 fts_sort(FTS *sp, FTSENT *head, size_t nitems)
989 if (nitems > sp->fts_nitems) {
990 sp->fts_nitems = nitems + 40;
991 if ((sp->fts_array = reallocf(sp->fts_array,
992 sp->fts_nitems * sizeof(FTSENT *))) == NULL) {
993 sp->fts_nitems = 0;
997 for (ap = sp->fts_array, p = head; p; p = p->fts_link)
999 qsort(sp->fts_array, nitems, sizeof(FTSENT *), fts_compar);
1000 for (head = *(ap = sp->fts_array); --nitems; ++ap)
1007 fts_alloc(FTS *sp, char *name, size_t namelen)
1043 p->fts_path = sp->fts_path;
1049 p->fts_fts = sp;
1072 fts_palloc(FTS *sp, size_t more)
1075 sp->fts_pathlen += more + 256;
1076 sp->fts_path = reallocf(sp->fts_path, sp->fts_pathlen);
1077 return (sp->fts_path == NULL);
1085 fts_padjust(FTS *sp, FTSENT *head)
1088 char *addr = sp->fts_path;
1098 for (p = sp->fts_child; p; p = p->fts_link)
1125 fts_safe_changedir(FTS *sp, FTSENT *p, int fd, char *path)
1158 fts_ufslinks(FTS *sp, const FTSENT *ent)
1163 priv = (struct _fts_private *)sp;