+ dist = fuzzy_distance(name, len, fname, fname_len);
+ /* Add some extra weight to how well the suffixes match. */
+ dist += fuzzy_distance(suf, suf_len, fname_suf, fname_suf_len)
+ * 10;
+ if (verbose > 4) {
+ rprintf(FINFO, "fuzzy distance for %s = %d.%05d\n",
+ name, (int)(dist>>16), (int)(dist&0xFFFF));
+ }
+ if (dist <= lowest_dist) {
+ lowest_dist = dist;
+ lowest_j = j;
+ }
+ }
+
+ return lowest_j;
+}
+
+void check_for_finished_hlinks(int itemizing, enum logcode code)
+{
+ struct file_struct *file;
+ int ndx;
+
+ while ((ndx = get_hlink_num()) != -1) {
+ if (ndx < 0 || ndx >= the_file_list->count)
+ continue;
+
+ file = the_file_list->files[ndx];
+ if (!file->link_u.links)
+ continue;
+
+ hard_link_cluster(file, ndx, itemizing, code);
+ }
+}
+
+static int phase = 0;
+
+/* Acts on the_file_list->file's ndx'th item, whose name is fname. If a dir,
+ * make sure it exists, and has the right permissions/timestamp info. For
+ * all other non-regular files (symlinks, etc.) we create them here. For
+ * regular files that have changed, we try to find a basis file and then
+ * start sending checksums.