| 2595 | } |
| 2596 | |
| 2597 | static int read_cached_dir(struct cached_dir *cdir) |
| 2598 | { |
| 2599 | struct dirent *de; |
| 2600 | |
| 2601 | if (cdir->fdir) { |
| 2602 | de = readdir_skip_dot_and_dotdot(cdir->fdir); |
| 2603 | if (!de) { |
| 2604 | cdir->d_name = NULL; |
| 2605 | cdir->d_type = DT_UNKNOWN; |
| 2606 | return -1; |
| 2607 | } |
| 2608 | cdir->d_name = de->d_name; |
| 2609 | cdir->d_type = DTYPE(de); |
| 2610 | return 0; |
| 2611 | } |
| 2612 | while (cdir->nr_dirs < cdir->untracked->dirs_nr) { |
| 2613 | struct untracked_cache_dir *d = cdir->untracked->dirs[cdir->nr_dirs]; |
| 2614 | if (!d->recurse) { |
| 2615 | cdir->nr_dirs++; |
| 2616 | continue; |
| 2617 | } |
| 2618 | cdir->ucd = d; |
| 2619 | cdir->nr_dirs++; |
| 2620 | return 0; |
| 2621 | } |
| 2622 | cdir->ucd = NULL; |
| 2623 | if (cdir->nr_files < cdir->untracked->untracked_nr) { |
| 2624 | struct untracked_cache_dir *d = cdir->untracked; |
| 2625 | cdir->file = d->untracked[cdir->nr_files++]; |
| 2626 | return 0; |
| 2627 | } |
| 2628 | return -1; |
| 2629 | } |
| 2630 | |
| 2631 | static void close_cached_dir(struct cached_dir *cdir) |
| 2632 | { |
no test coverage detected