Nguyễn Thái Ngọc Duy  <pclo...@gmail.com> writes:

> @@ -1024,11 +1035,15 @@ static void prepare_packed_git_one(char *objdir, int 
> local)
>               int namelen = strlen(de->d_name);
>               struct packed_git *p;
>  
> -             if (!has_extension(de->d_name, ".idx"))
> +             if (!has_extension(de->d_name, ".idx")) {
> +                     report_pack_garbage(path, len - 1, de->d_name);
>                       continue;
> +             }
>  
> -             if (len + namelen + 1 > sizeof(path))
> +             if (len + namelen + 1 > sizeof(path)) {
> +                     report_pack_garbage(path, len - 1, de->d_name);
>                       continue;
> +             }
>  
>               /* Don't reopen a pack we already have. */
>               strcpy(path + len, de->d_name);
> @@ -1042,8 +1057,10 @@ static void prepare_packed_git_one(char *objdir, int 
> local)
>                * .pack file that we can map.
>                */
>               p = add_packed_git(path, len + namelen, local);
> -             if (!p)
> +             if (!p) {
> +                     report_pack_garbage(path, len - 1, de->d_name);
>                       continue;
> +             }
>               install_packed_git(p);
>       }
>       closedir(dir);

I forgot to mention one more thing.  Your report_pack_garbage()
special cases ".pack" to see if it is a regular file, but this loop
structure causes a regular file whose name ends with ".pack" but
without corresponding ".idx" file to go unreported.

I think the loop should be restructured to iterate over all known
file types and report unknown ones, if you want to repurpose it for
the reporting, something along this line, perhaps:

        for (each name) {
                if (does it end with ".idx") {
                        if (is it unusable ".idx") {
                                report garbage;
                        }
                        continue;
                }
                if (! we are in report mode)
                        continue;
                if (does it end with ".pack") {
                        if (!have we seen corresponding ".idx")
                                remember it;
                        continue;
                }
                report garbage;
        }
        for (remembered pack) {
                if (does it have corresponding ".idx" &&
                        is it really usable ".pack")
                        continue;
                report garbage;
        }

--
To unsubscribe from this list: send the line "unsubscribe git" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to