Lines Matching defs:sp

58 #define	CLR(opt)	(sp->fts_options &= ~(opt))
59 #define ISSET(opt) (sp->fts_options & (opt))
60 #define SET(opt) (sp->fts_options |= (opt))
62 #define FCHDIR(sp, fd) (!ISSET(FTS_NOCHDIR) && fchdir(fd))
73 FTS *sp;
86 if ((sp = calloc(1, sizeof(FTS))) == NULL)
88 sp->fts_compar = compar;
89 sp->fts_options = options;
99 if (fts_palloc(sp, MAX(fts_maxarglen(argv), MAXPATHLEN)))
103 if ((parent = fts_alloc(sp, "", 0)) == NULL)
115 if ((p = fts_alloc(sp, *argv, len)) == NULL)
120 p->fts_info = fts_stat(sp, p, ISSET(FTS_COMFOLLOW));
144 root = fts_sort(sp, root, nitems);
151 if ((sp->fts_cur = fts_alloc(sp, "", 0)) == NULL)
153 sp->fts_cur->fts_link = root;
154 sp->fts_cur->fts_info = FTS_INIT;
163 if (!ISSET(FTS_NOCHDIR) && (sp->fts_rfd = open(".", O_RDONLY, 0)) < 0)
169 return (sp);
173 mem2: free(sp->fts_path);
174 mem1: free(sp);
179 fts_load(FTS *sp, FTSENT *p)
192 memmove(sp->fts_path, p->fts_name, len + 1);
198 p->fts_accpath = p->fts_path = sp->fts_path;
199 sp->fts_dev = p->fts_dev;
203 fts_close(FTS *sp)
213 if (sp->fts_cur) {
214 for (p = sp->fts_cur; p->fts_level >= FTS_ROOTLEVEL;) {
223 rfd = ISSET(FTS_NOCHDIR) ? -1 : sp->fts_rfd;
226 if (sp->fts_child)
227 fts_lfree(sp->fts_child);
228 if (sp->fts_array)
229 free(sp->fts_array);
230 free(sp->fts_path);
231 free(sp);
254 fts_read(FTS *sp)
262 if (sp->fts_cur == NULL || ISSET(FTS_STOP))
266 p = sp->fts_cur;
274 p->fts_info = fts_stat(sp, p, 0);
286 p->fts_info = fts_stat(sp, p, 1);
301 (ISSET(FTS_XDEV) && p->fts_dev != sp->fts_dev)) {
304 if (sp->fts_child) {
305 fts_lfree(sp->fts_child);
306 sp->fts_child = NULL;
313 if (sp->fts_child && ISSET(FTS_NAMEONLY)) {
315 fts_lfree(sp->fts_child);
316 sp->fts_child = NULL;
331 if (sp->fts_child) {
332 if (fts_safe_changedir(sp, p, -1, p->fts_accpath)) {
335 for (p = sp->fts_child; p; p = p->fts_link)
339 } else if ((sp->fts_child = fts_build(sp, BREAD)) == NULL) {
344 p = sp->fts_child;
345 sp->fts_child = NULL;
359 if (FCHDIR(sp, sp->fts_rfd)) {
363 fts_load(sp, p);
364 return (sp->fts_cur = p);
375 p->fts_info = fts_stat(sp, p, 1);
387 name: t = sp->fts_path + NAPPEND(p->fts_parent);
390 return (sp->fts_cur = p);
404 return (sp->fts_cur = NULL);
408 sp->fts_path[p->fts_pathlen] = '\0';
416 if (FCHDIR(sp, sp->fts_rfd)) {
418 sp->fts_cur = p;
422 if (FCHDIR(sp, p->fts_symfd)) {
427 sp->fts_cur = p;
432 fts_safe_changedir(sp, p->fts_parent, -1, "..")) {
434 sp->fts_cur = p;
438 return (sp->fts_cur = p);
449 fts_set(FTS *sp, FTSENT *p, int instr)
461 fts_children(FTS *sp, int instr)
472 p = sp->fts_cur;
497 if (sp->fts_child)
498 fts_lfree(sp->fts_child);
515 return (sp->fts_child = fts_build(sp, instr));
519 sp->fts_child = fts_build(sp, instr);
525 return (sp->fts_child);
543 fts_build(FTS *sp, int type)
556 cur = sp->fts_cur;
607 if (fts_safe_changedir(sp, cur, dirfd(dirp), NULL)) {
632 cp = sp->fts_path + len;
636 maxlen = sp->fts_pathlen - len;
652 if (!(p = fts_alloc(sp, dp->d_name, strlen(dp->d_name))))
655 oldaddr = sp->fts_path;
656 if (fts_palloc(sp, strlen(dp->d_name) +len + 1)) {
673 if (oldaddr != sp->fts_path) {
676 cp = sp->fts_path + len;
678 maxlen = sp->fts_pathlen - len;
682 p->fts_parent = sp->fts_cur;
723 p->fts_info = fts_stat(sp, p, 0);
749 fts_padjust(sp, head);
756 if (len == sp->fts_pathlen || nitems == 0)
769 (cur->fts_level == FTS_ROOTLEVEL ? FCHDIR(sp, sp->fts_rfd) :
770 fts_safe_changedir(sp, cur->fts_parent, -1, ".."))) {
784 if (sp->fts_compar && nitems > 1)
785 head = fts_sort(sp, head, nitems);
790 fts_stat(FTS *sp, FTSENT *p, int follow)
859 fts_sort(FTS *sp, FTSENT *head, int nitems)
870 if (nitems > sp->fts_nitems) {
873 sp->fts_nitems = nitems + 40;
874 if ((a = realloc(sp->fts_array,
875 sp->fts_nitems * sizeof(FTSENT *))) == NULL) {
876 if (sp->fts_array)
877 free(sp->fts_array);
878 sp->fts_array = NULL;
879 sp->fts_nitems = 0;
882 sp->fts_array = a;
884 for (ap = sp->fts_array, p = head; p; p = p->fts_link)
886 qsort((void *)sp->fts_array, nitems, sizeof(FTSENT *), sp->fts_compar);
887 for (head = *(ap = sp->fts_array); --nitems; ++ap)
894 fts_alloc(FTS *sp, char *name, size_t namelen)
914 p->fts_path = sp->fts_path;
943 fts_palloc(FTS *sp, size_t more)
951 if (sp->fts_pathlen + more < sp->fts_pathlen) {
952 if (sp->fts_path)
953 free(sp->fts_path);
954 sp->fts_path = NULL;
958 sp->fts_pathlen += more;
959 p = realloc(sp->fts_path, sp->fts_pathlen);
961 if (sp->fts_path)
962 free(sp->fts_path);
963 sp->fts_path = NULL;
966 sp->fts_path = p;
975 fts_padjust(FTS *sp, FTSENT *head)
978 char *addr = sp->fts_path;
988 for (p = sp->fts_child; p; p = p->fts_link)
1015 fts_safe_changedir(FTS *sp, FTSENT *p, int fd, char *path)