- if (link_stat(fnamecmpbuf, &st, 0) == 0
- && S_ISREG(st.st_mode)) {
- statret = 0;
- switch (match_level) {
- case 0:
- if (compare_dest)
- break;
- fallback_match = i;
- match_level = 1;
- /* FALL THROUGH */
- case 1:
- if (!unchanged_file(fnamecmpbuf, file, &st))
- continue;
- fallback_match = i;
- match_level = 2;
- /* FALL THROUGH */
- case 2:
- if (!unchanged_attrs(file, &st))
- continue;
- }
+ if (link_stat(fnamecmpbuf, &st, 0) < 0
+ || !S_ISREG(st.st_mode))
+ continue;
+ switch (match_level) {
+ case 0:
+ best_match = i;
+ match_level = 1;
+ if (compare_dest)
+ break;
+ /* FALL THROUGH */
+ case 1:
+ if (!unchanged_file(fnamecmpbuf, file, &st))
+ continue;
+ best_match = i;
+ match_level = 2;
+ /* FALL THROUGH */
+ case 2:
+ if (!unchanged_attrs(file, &st))
+ continue;
+ best_match = i;