Lines Matching refs:sp

82 #define	CLR(opt)	(sp->fts_options &= ~(opt))
83 #define ISSET(opt) (sp->fts_options & (opt))
84 #define SET(opt) (sp->fts_options |= (opt))
86 #define FCHDIR(sp, fd) (!ISSET(FTS_NOCHDIR) && fchdir(fd))
145 FTS *sp;
165 sp = &priv->ftsp_fts;
166 sp->fts_compar = compar;
167 sp->fts_options = options;
177 if (fts_palloc(sp, MAX(fts_maxarglen(argv), MAXPATHLEN)))
181 if ((parent = fts_alloc(sp, "", 0)) == NULL)
192 p = fts_alloc(sp, *argv, len);
196 p->fts_info = fts_stat(sp, p, ISSET(FTS_COMFOLLOW), -1);
220 root = fts_sort(sp, root, nitems);
227 if ((sp->fts_cur = fts_alloc(sp, "", 0)) == NULL)
229 sp->fts_cur->fts_link = root;
230 sp->fts_cur->fts_info = FTS_INIT;
240 (sp->fts_rfd = open(".", O_RDONLY | O_CLOEXEC, 0)) < 0)
243 return (sp);
247 mem2: free(sp->fts_path);
248 mem1: free(sp);
253 fts_load(FTS *sp, FTSENT *p)
266 memmove(sp->fts_path, p->fts_name, len + 1);
272 p->fts_accpath = p->fts_path = sp->fts_path;
273 sp->fts_dev = p->fts_dev;
277 fts_close(FTS *sp)
287 if (sp->fts_cur) {
288 for (p = sp->fts_cur; p->fts_level >= FTS_ROOTLEVEL;) {
297 if (sp->fts_child)
298 fts_lfree(sp->fts_child);
299 if (sp->fts_array)
300 free(sp->fts_array);
301 free(sp->fts_path);
305 saved_errno = fchdir(sp->fts_rfd) ? errno : 0;
306 (void)close(sp->fts_rfd);
311 free(sp);
318 free(sp);
331 fts_read(FTS *sp)
339 if (sp->fts_cur == NULL || ISSET(FTS_STOP))
343 p = sp->fts_cur;
351 p->fts_info = fts_stat(sp, p, 0, -1);
363 p->fts_info = fts_stat(sp, p, 1, -1);
379 (ISSET(FTS_XDEV) && p->fts_dev != sp->fts_dev)) {
382 if (sp->fts_child) {
383 fts_lfree(sp->fts_child);
384 sp->fts_child = NULL;
391 if (sp->fts_child != NULL && ISSET(FTS_NAMEONLY)) {
393 fts_lfree(sp->fts_child);
394 sp->fts_child = NULL;
409 if (sp->fts_child != NULL) {
410 if (fts_safe_changedir(sp, p, -1, p->fts_accpath)) {
413 for (p = sp->fts_child; p != NULL;
418 } else if ((sp->fts_child = fts_build(sp, BREAD)) == NULL) {
423 p = sp->fts_child;
424 sp->fts_child = NULL;
436 if (FCHDIR(sp, sp->fts_rfd)) {
441 fts_load(sp, p);
442 return (sp->fts_cur = p);
455 p->fts_info = fts_stat(sp, p, 1, -1);
469 name: t = sp->fts_path + NAPPEND(p->fts_parent);
472 return (sp->fts_cur = p);
486 return (sp->fts_cur = NULL);
490 sp->fts_path[p->fts_pathlen] = '\0';
498 if (FCHDIR(sp, sp->fts_rfd)) {
503 if (FCHDIR(sp, p->fts_symfd)) {
512 fts_safe_changedir(sp, p->fts_parent, -1, "..")) {
518 return (sp->fts_cur = p);
529 fts_set(FTS *sp, FTSENT *p, int instr)
541 fts_children(FTS *sp, int instr)
552 p = sp->fts_cur;
577 if (sp->fts_child != NULL)
578 fts_lfree(sp->fts_child);
595 return (sp->fts_child = fts_build(sp, instr));
599 sp->fts_child = fts_build(sp, instr);
600 serrno = (sp->fts_child == NULL) ? errno : 0;
608 return (sp->fts_child);
616 (fts_get_clientptr)(FTS *sp)
619 return (fts_get_clientptr(sp));
633 fts_set_clientptr(FTS *sp, void *clientptr)
636 sp->fts_clientptr = clientptr;
667 fts_build(FTS *sp, int type)
688 cur = sp->fts_cur;
722 if (fts_ufslinks(sp, cur))
758 if (fts_safe_changedir(sp, cur, dirfd(dirp), NULL)) {
781 cp = sp->fts_path + len;
788 maxlen = sp->fts_pathlen - len;
801 if ((p = fts_alloc(sp, dp->d_name, dnamlen)) == NULL)
804 oldaddr = sp->fts_path;
805 if (fts_palloc(sp, dnamlen + len + 1)) {
822 if (oldaddr != sp->fts_path) {
825 cp = sp->fts_path + len;
827 maxlen = sp->fts_pathlen - len;
831 p->fts_parent = sp->fts_cur;
860 p->fts_info = fts_stat(sp, p, 0, dirfd(dirp));
863 p->fts_info = fts_stat(sp, p, 0, -1);
900 fts_padjust(sp, head);
907 sp->fts_path[cur->fts_pathlen] = '\0';
918 FCHDIR(sp, sp->fts_rfd) :
919 fts_safe_changedir(sp, cur->fts_parent, -1, ".."))) {
935 if (sp->fts_compar && nitems > 1)
936 head = fts_sort(sp, head, nitems);
941 fts_stat(FTS *sp, FTSENT *p, int follow, int dfd)
1043 fts_sort(FTS *sp, FTSENT *head, size_t nitems)
1054 if (nitems > sp->fts_nitems) {
1055 sp->fts_nitems = nitems + 40;
1056 if ((sp->fts_array = reallocf(sp->fts_array,
1057 sp->fts_nitems * sizeof(FTSENT *))) == NULL) {
1058 sp->fts_nitems = 0;
1062 for (ap = sp->fts_array, p = head; p; p = p->fts_link)
1064 qsort(sp->fts_array, nitems, sizeof(FTSENT *), fts_compar);
1065 for (head = *(ap = sp->fts_array); --nitems; ++ap)
1072 fts_alloc(FTS *sp, char *name, size_t namelen)
1108 p->fts_path = sp->fts_path;
1114 p->fts_fts = sp;
1137 fts_palloc(FTS *sp, size_t more)
1140 sp->fts_pathlen += more + 256;
1141 sp->fts_path = reallocf(sp->fts_path, sp->fts_pathlen);
1142 return (sp->fts_path == NULL);
1150 fts_padjust(FTS *sp, FTSENT *head)
1153 char *addr = sp->fts_path;
1163 for (p = sp->fts_child; p; p = p->fts_link)
1190 fts_safe_changedir(FTS *sp, FTSENT *p, int fd, char *path)
1223 fts_ufslinks(FTS *sp, const FTSENT *ent)
1230 priv = (struct _fts_private *)sp;