Lines Matching defs:sp

60 #define	CLR(opt)	(sp->fts_options &= ~(opt))
61 #define ISSET(opt) (sp->fts_options & (opt))
62 #define SET(opt) (sp->fts_options |= (opt))
64 #define FCHDIR(sp, fd) (!ISSET(FTS_NOCHDIR) && fchdir(fd))
75 FTS *sp;
88 if ((sp = calloc(1, sizeof(FTS))) == NULL)
90 sp->fts_compar = compar;
91 sp->fts_options = options;
101 if (fts_palloc(sp, MAX(fts_maxarglen(argv), PATH_MAX)))
105 if ((parent = fts_alloc(sp, "", 0)) == NULL)
117 if ((p = fts_alloc(sp, *argv, len)) == NULL)
122 p->fts_info = fts_stat(sp, p, ISSET(FTS_COMFOLLOW));
146 root = fts_sort(sp, root, nitems);
153 if ((sp->fts_cur = fts_alloc(sp, "", 0)) == NULL)
155 sp->fts_cur->fts_link = root;
156 sp->fts_cur->fts_info = FTS_INIT;
165 if (!ISSET(FTS_NOCHDIR) && (sp->fts_rfd = open(".", O_RDONLY, 0)) < 0)
171 return (sp);
175 mem2: free(sp->fts_path);
176 mem1: free(sp);
181 fts_load(FTS *sp, FTSENT *p)
194 memmove(sp->fts_path, p->fts_name, len + 1);
200 p->fts_accpath = p->fts_path = sp->fts_path;
201 sp->fts_dev = p->fts_dev;
205 fts_close(FTS *sp)
215 if (sp->fts_cur) {
216 for (p = sp->fts_cur; p->fts_level >= FTS_ROOTLEVEL;) {
225 rfd = ISSET(FTS_NOCHDIR) ? -1 : sp->fts_rfd;
228 if (sp->fts_child)
229 fts_lfree(sp->fts_child);
230 if (sp->fts_array)
231 free(sp->fts_array);
232 free(sp->fts_path);
233 free(sp);
256 fts_read(FTS *sp)
264 if (sp->fts_cur == NULL || ISSET(FTS_STOP))
268 p = sp->fts_cur;
276 p->fts_info = fts_stat(sp, p, 0);
288 p->fts_info = fts_stat(sp, p, 1);
303 (ISSET(FTS_XDEV) && p->fts_dev != sp->fts_dev)) {
306 if (sp->fts_child) {
307 fts_lfree(sp->fts_child);
308 sp->fts_child = NULL;
315 if (sp->fts_child && ISSET(FTS_NAMEONLY)) {
317 fts_lfree(sp->fts_child);
318 sp->fts_child = NULL;
333 if (sp->fts_child) {
334 if (fts_safe_changedir(sp, p, -1, p->fts_accpath)) {
337 for (p = sp->fts_child; p; p = p->fts_link)
341 } else if ((sp->fts_child = fts_build(sp, BREAD)) == NULL) {
346 p = sp->fts_child;
347 sp->fts_child = NULL;
361 if (FCHDIR(sp, sp->fts_rfd)) {
365 fts_load(sp, p);
366 return (sp->fts_cur = p);
377 p->fts_info = fts_stat(sp, p, 1);
389 name: t = sp->fts_path + NAPPEND(p->fts_parent);
392 return (sp->fts_cur = p);
406 return (sp->fts_cur = NULL);
410 sp->fts_path[p->fts_pathlen] = '\0';
418 if (FCHDIR(sp, sp->fts_rfd)) {
420 sp->fts_cur = p;
424 if (FCHDIR(sp, p->fts_symfd)) {
429 sp->fts_cur = p;
434 fts_safe_changedir(sp, p->fts_parent, -1, "..")) {
436 sp->fts_cur = p;
440 return (sp->fts_cur = p);
451 fts_set(FTS *sp __unused, FTSENT *p, int instr)
463 fts_children(FTS *sp, int instr)
474 p = sp->fts_cur;
499 if (sp->fts_child)
500 fts_lfree(sp->fts_child);
517 return (sp->fts_child = fts_build(sp, instr));
521 sp->fts_child = fts_build(sp, instr);
527 return (sp->fts_child);
545 fts_build(FTS *sp, int type)
558 cur = sp->fts_cur;
609 if (fts_safe_changedir(sp, cur, dirfd(dirp), NULL)) {
634 cp = sp->fts_path + len;
638 maxlen = sp->fts_pathlen - len;
654 if (!(p = fts_alloc(sp, dp->d_name, strlen(dp->d_name))))
657 oldaddr = sp->fts_path;
658 if (fts_palloc(sp, strlen(dp->d_name) +len + 1)) {
675 if (oldaddr != sp->fts_path) {
678 cp = sp->fts_path + len;
680 maxlen = sp->fts_pathlen - len;
684 p->fts_parent = sp->fts_cur;
725 p->fts_info = fts_stat(sp, p, 0);
751 fts_padjust(sp, head);
758 if (len == sp->fts_pathlen || nitems == 0)
771 (cur->fts_level == FTS_ROOTLEVEL ? FCHDIR(sp, sp->fts_rfd) :
772 fts_safe_changedir(sp, cur->fts_parent, -1, ".."))) {
786 if (sp->fts_compar && nitems > 1)
787 head = fts_sort(sp, head, nitems);
792 fts_stat(FTS *sp, FTSENT *p, int follow)
861 fts_sort(FTS *sp, FTSENT *head, int nitems)
872 if (nitems > sp->fts_nitems) {
875 sp->fts_nitems = nitems + 40;
876 if ((a = realloc(sp->fts_array,
877 sp->fts_nitems * sizeof(FTSENT *))) == NULL) {
878 if (sp->fts_array)
879 free(sp->fts_array);
880 sp->fts_array = NULL;
881 sp->fts_nitems = 0;
884 sp->fts_array = a;
886 for (ap = sp->fts_array, p = head; p; p = p->fts_link)
888 qsort((void *)sp->fts_array, nitems, sizeof(FTSENT *), sp->fts_compar);
889 for (head = *(ap = sp->fts_array); --nitems; ++ap)
896 fts_alloc(FTS *sp, char *name, size_t namelen)
915 p->fts_path = sp->fts_path;
944 fts_palloc(FTS *sp, size_t more)
952 if (sp->fts_pathlen + more < sp->fts_pathlen) {
953 if (sp->fts_path)
954 free(sp->fts_path);
955 sp->fts_path = NULL;
959 sp->fts_pathlen += more;
960 p = realloc(sp->fts_path, sp->fts_pathlen);
962 if (sp->fts_path)
963 free(sp->fts_path);
964 sp->fts_path = NULL;
967 sp->fts_path = p;
976 fts_padjust(FTS *sp, FTSENT *head)
979 char *addr = sp->fts_path;
989 for (p = sp->fts_child; p; p = p->fts_link)
1016 fts_safe_changedir(FTS *sp, FTSENT *p, int fd, char *path)