dir.c: move prep_exclude

Move prep_exclude in preparation for the next patch. Signed-off-by: Karsten Blees <blees@dcon.de> Signed-off-by: Junio C Hamano <gitster@pobox.com>

Karsten Blees committed Apr 15, 2013 at 21:11 UTC 6cd5c582dcf8e6b960079247ac9d0dbace856458
1 file changed +72 -72
dir.c
+72 -72
@@ -578,78 +578,6 @@ void add_excludes_from_file(struct dir_struct *dir, const char *fname)
578 die("cannot use %s as an exclude file", fname);
579 }
580
581 -/*
582 - * Loads the per-directory exclude list for the substring of base
583 - * which has a char length of baselen.
584 - */
585 -static void prep_exclude(struct dir_struct *dir, const char *base, int baselen)
586 -{
587 - struct exclude_list_group *group;
588 - struct exclude_list *el;
589 - struct exclude_stack *stk = NULL;
590 - int current;
591 -
592 - if ((!dir->exclude_per_dir) ||
593 - (baselen + strlen(dir->exclude_per_dir) >= PATH_MAX))
594 - return; /* too long a path -- ignore */
595 -
596 - group = &dir->exclude_list_group[EXC_DIRS];
597 -
598 - /* Pop the exclude lists from the EXCL_DIRS exclude_list_group
599 - * which originate from directories not in the prefix of the
600 - * path being checked. */
601 - while ((stk = dir->exclude_stack) != NULL) {
602 - if (stk->baselen <= baselen &&
603 - !strncmp(dir->basebuf, base, stk->baselen))
604 - break;
605 - el = &group->el[dir->exclude_stack->exclude_ix];
606 - dir->exclude_stack = stk->prev;
607 - free((char *)el->src); /* see strdup() below */
608 - clear_exclude_list(el);
609 - free(stk);
610 - group->nr--;
611 - }
612 -
613 - /* Read from the parent directories and push them down. */
614 - current = stk ? stk->baselen : -1;
615 - while (current < baselen) {
616 - struct exclude_stack *stk = xcalloc(1, sizeof(*stk));
617 - const char *cp;
618 -
619 - if (current < 0) {
620 - cp = base;
621 - current = 0;
622 - }
623 - else {
624 - cp = strchr(base + current + 1, '/');
625 - if (!cp)
626 - die("oops in prep_exclude");
627 - cp++;
628 - }
629 - stk->prev = dir->exclude_stack;
630 - stk->baselen = cp - base;
631 - memcpy(dir->basebuf + current, base + current,
632 - stk->baselen - current);
633 - strcpy(dir->basebuf + stk->baselen, dir->exclude_per_dir);
634 - /*
635 - * dir->basebuf gets reused by the traversal, but we
636 - * need fname to remain unchanged to ensure the src
637 - * member of each struct exclude correctly
638 - * back-references its source file. Other invocations
639 - * of add_exclude_list provide stable strings, so we
640 - * strdup() and free() here in the caller.
641 - */
642 - el = add_exclude_list(dir, EXC_DIRS, strdup(dir->basebuf));
643 - stk->exclude_ix = group->nr - 1;
644 - add_excludes_from_file_to_list(dir->basebuf,
645 - dir->basebuf, stk->baselen,
646 - el, 1);
647 - dir->exclude_stack = stk;
648 - current = stk->baselen;
649 - }
650 - dir->basebuf[baselen] = '\0';
651 -}
652 -
581 int match_basename(const char *basename, int basenamelen,
582 const char *pattern, int prefix, int patternlen,
583 int flags)
@@ -815,6 +743,78 @@ static struct exclude *last_exclude_matching_from_lists(struct dir_struct *dir,
743 return NULL;
744 }
745
746 +/*
747 + * Loads the per-directory exclude list for the substring of base
748 + * which has a char length of baselen.
749 + */
750 +static void prep_exclude(struct dir_struct *dir, const char *base, int baselen)
751 +{
752 + struct exclude_list_group *group;
753 + struct exclude_list *el;
754 + struct exclude_stack *stk = NULL;
755 + int current;
756 +
757 + if ((!dir->exclude_per_dir) ||
758 + (baselen + strlen(dir->exclude_per_dir) >= PATH_MAX))
759 + return; /* too long a path -- ignore */
760 +
761 + group = &dir->exclude_list_group[EXC_DIRS];
762 +
763 + /* Pop the exclude lists from the EXCL_DIRS exclude_list_group
764 + * which originate from directories not in the prefix of the
765 + * path being checked. */
766 + while ((stk = dir->exclude_stack) != NULL) {
767 + if (stk->baselen <= baselen &&
768 + !strncmp(dir->basebuf, base, stk->baselen))
769 + break;
770 + el = &group->el[dir->exclude_stack->exclude_ix];
771 + dir->exclude_stack = stk->prev;
772 + free((char *)el->src); /* see strdup() below */
773 + clear_exclude_list(el);
774 + free(stk);
775 + group->nr--;
776 + }
777 +
778 + /* Read from the parent directories and push them down. */
779 + current = stk ? stk->baselen : -1;
780 + while (current < baselen) {
781 + struct exclude_stack *stk = xcalloc(1, sizeof(*stk));
782 + const char *cp;
783 +
784 + if (current < 0) {
785 + cp = base;
786 + current = 0;
787 + }
788 + else {
789 + cp = strchr(base + current + 1, '/');
790 + if (!cp)
791 + die("oops in prep_exclude");
792 + cp++;
793 + }
794 + stk->prev = dir->exclude_stack;
795 + stk->baselen = cp - base;
796 + memcpy(dir->basebuf + current, base + current,
797 + stk->baselen - current);
798 + strcpy(dir->basebuf + stk->baselen, dir->exclude_per_dir);
799 + /*
800 + * dir->basebuf gets reused by the traversal, but we
801 + * need fname to remain unchanged to ensure the src
802 + * member of each struct exclude correctly
803 + * back-references its source file. Other invocations
804 + * of add_exclude_list provide stable strings, so we
805 + * strdup() and free() here in the caller.
806 + */
807 + el = add_exclude_list(dir, EXC_DIRS, strdup(dir->basebuf));
808 + stk->exclude_ix = group->nr - 1;
809 + add_excludes_from_file_to_list(dir->basebuf,
810 + dir->basebuf, stk->baselen,
811 + el, 1);
812 + dir->exclude_stack = stk;
813 + current = stk->baselen;
814 + }
815 + dir->basebuf[baselen] = '\0';
816 +}
817 +
818 /*
819 * Loads the exclude lists for the directory containing pathname, then
820 * scans all exclude lists to determine whether pathname is excluded.