• Home
  • History
  • Annotate
  • Raw
  • Download
  • only in /netgear-R7000-V1.0.7.12_1.2.5/ap/gpl/timemachine/netatalk-2.2.5/libatalk/util/

Lines Matching refs:data

172 static int ftw_dir (struct ftw_data *data, struct STAT *st,
251 add_object (struct ftw_data *data, struct STAT *st)
258 return __tsearch (newp, &data->known_objects, object_compare) ? 0 : -1;
263 find_object (struct ftw_data *data, struct STAT *st)
268 return __tfind (&obj, &data->known_objects, object_compare) != NULL;
273 open_dir_stream (int *dfdp, struct ftw_data *data, struct dir_data *dirp)
277 if (data->dirstreams[data->actdir] != NULL)
289 DIR *st = data->dirstreams[data->actdir]->stream;
321 data->dirstreams[data->actdir]->content = realloc (buf, actsize);
322 if (data->dirstreams[data->actdir]->content == NULL)
332 data->dirstreams[data->actdir]->stream = NULL;
333 data->dirstreams[data->actdir]->streamfd = -1;
334 data->dirstreams[data->actdir] = NULL;
342 assert (data->dirstreams[data->actdir] == NULL);
346 int fd = openat(*dfdp, data->dirbuf + data->ftw.base, O_RDONLY);
355 if (data->flags & FTW_CHDIR)
357 name = data->dirbuf + data->ftw.base;
362 name = data->dirbuf;
373 data->dirstreams[data->actdir] = dirp;
375 if (++data->actdir == data->maxdir)
376 data->actdir = 0;
385 process_entry (struct ftw_data *data, struct dir_data *dir, const char *name, size_t namlen)
397 new_buflen = data->ftw.base + namlen + 2;
398 if (data->dirbufsize < new_buflen)
403 data->dirbufsize = 2 * new_buflen;
404 newp = (char *) realloc (data->dirbuf, data->dirbufsize);
407 data->dirbuf = newp;
410 *((char *) __mempcpy (data->dirbuf + data->ftw.base, name, namlen)) = '\0';
415 (data->flags & FTW_PHYS) ? AT_SYMLINK_NOFOLLOW : 0);
418 if ((data->flags & FTW_CHDIR) == 0)
419 name = data->dirbuf;
421 statres = ((data->flags & FTW_PHYS)
430 else if (data->flags & FTW_PHYS)
457 || !(data->flags & FTW_MOUNT) || st.st_dev == data->dev))
461 if ((data->flags & FTW_PHYS)
462 || (!find_object (data, &st)
464 && (result = add_object (data, &st)) == 0))
465 result = ftw_dir (data, &st, dir);
468 result = (*data->func) (data->dirbuf, &st, data->cvt_arr[flag],
469 &data->ftw);
472 if ((data->flags & FTW_ACTIONRETVAL) && result == FTW_SKIP_SUBTREE)
480 ftw_dir (struct ftw_data *data, struct STAT *st, struct dir_data *old_dir)
484 int previous_base = data->ftw.base;
491 data, &dir);
496 result = (*data->func) (data->dirbuf, st, FTW_DNR, &data->ftw);
502 if (!(data->flags & FTW_DEPTH))
504 result = (*data->func) (data->dirbuf, st, FTW_D, &data->ftw);
514 if (data->actdir-- == 0)
515 data->actdir = data->maxdir - 1;
516 data->dirstreams[data->actdir] = NULL;
522 if (data->flags & FTW_CHDIR)
532 ++data->ftw.level;
533 startp = data->dirbuf + strlen(data->dirbuf);
535 assert (startp != data->dirbuf);
538 data->ftw.base = startp - data->dirbuf;
542 result = process_entry (data, &dir, d->d_name, NAMLEN (d));
559 if (data->actdir-- == 0)
560 data->actdir = data->maxdir - 1;
561 data->dirstreams[data->actdir] = NULL;
573 result = process_entry (data, &dir, runp, endp - runp);
583 if ((data->flags & FTW_ACTIONRETVAL) && result == FTW_SKIP_SIBLINGS)
587 data->dirbuf[data->ftw.base - 1] = '\0';
588 --data->ftw.level;
591 data->ftw.base = previous_base;
594 if (result == 0 && (data->flags & FTW_DEPTH))
595 result = (*data->func) (data->dirbuf, st, FTW_DP, &data->ftw);
598 && (data->flags & FTW_CHDIR)
600 || ((data->flags & FTW_ACTIONRETVAL)
611 if (data->ftw.base == 1)
633 struct ftw_data data;
650 data.maxdir = descriptors < 1 ? 1 : descriptors;
651 data.actdir = 0;
652 data.dirstreams = (struct dir_data **) alloca (data.maxdir
654 memset (data.dirstreams, '\0', data.maxdir * sizeof (struct dir_data *));
657 data.dirbufsize = MAX (2 * strlen (dir), PATH_MAX);
658 data.dirbuf = (char *) malloc (data.dirbufsize);
659 if (data.dirbuf == NULL)
661 cp = mystpcpy (data.dirbuf, dir);
663 while (cp > data.dirbuf + 1 && cp[-1] == '/')
667 data.ftw.level = 0;
670 while (cp > data.dirbuf && cp[-1] != '/')
672 data.ftw.base = cp - data.dirbuf;
674 data.flags = flags;
682 data.func = (NFTW_FUNC_T) func;
686 data.cvt_arr = is_nftw ? nftw_arr : ftw_arr;
689 data.known_objects = NULL;
709 else if (data.maxdir > 1)
711 --data.maxdir;
713 if (data.ftw.base > 0)
715 /* Change to the directory the file is in. In data.dirbuf
718 if (data.ftw.base == 1)
723 char ch = data.dirbuf[data.ftw.base - 1];
724 data.dirbuf[data.ftw.base - 1] = '\0';
725 result = __chdir (data.dirbuf);
726 data.dirbuf[data.ftw.base - 1] = ch;
736 if (data.flags & FTW_CHDIR)
738 name = data.dirbuf + data.ftw.base;
743 name = data.dirbuf;
753 result = (*data.func) (data.dirbuf, &st, data.cvt_arr[FTW_SLN],
754 &data.ftw);
766 data.dev = st.st_dev;
770 result = add_object (&data, &st);
773 result = ftw_dir (&data, &st, NULL);
779 result = (*data.func) (data.dirbuf, &st, data.cvt_arr[flag],
780 &data.ftw);
808 mytdestroy (data.known_objects, free);
809 free (data.dirbuf);