Optimized hard_link_one() to not call f_name() so many times.
authorWayne Davison <wayned@samba.org>
Fri, 2 Jan 2004 07:34:49 +0000 (07:34 +0000)
committerWayne Davison <wayned@samba.org>
Fri, 2 Jan 2004 07:34:49 +0000 (07:34 +0000)
hlink.c

diff --git a/hlink.c b/hlink.c
index 3826ce5..d9facb4 100644 (file)
--- a/hlink.c
+++ b/hlink.c
@@ -120,40 +120,34 @@ int check_hard_link(struct file_struct *file)
 static void hard_link_one(int i)
 {
        STRUCT_STAT st1, st2;
 static void hard_link_one(int i)
 {
        STRUCT_STAT st1, st2;
+       char *hlink2, *hlink1 = f_name(&hlink_list[i - 1]);
 
 
-       if (link_stat(f_name(&hlink_list[i - 1]), &st1) != 0)
+       if (link_stat(hlink1, &st1) != 0)
                return;
 
                return;
 
-       if (link_stat(f_name(&hlink_list[i]), &st2) != 0) {
-               if (do_link
-                   (f_name(&hlink_list[i - 1]),
-                    f_name(&hlink_list[i])) != 0) {
-                       if (verbose > 0)
+       hlink2 = f_name(&hlink_list[i]);
+       if (link_stat(hlink2, &st2) != 0) {
+               if (do_link(hlink1, hlink2)) {
+                       if (verbose > 0) {
                                rprintf(FINFO, "link %s => %s : %s\n",
                                rprintf(FINFO, "link %s => %s : %s\n",
-                                       f_name(&hlink_list[i]),
-                                       f_name(&hlink_list[i - 1]),
-                                       strerror(errno));
+                                       hlink2, hlink1, strerror(errno));
+                       }
                        return;
                }
        } else {
                if (st2.st_dev == st1.st_dev && st2.st_ino == st1.st_ino)
                        return;
 
                        return;
                }
        } else {
                if (st2.st_dev == st1.st_dev && st2.st_ino == st1.st_ino)
                        return;
 
-               if (robust_unlink(f_name(&hlink_list[i])) != 0 ||
-                   do_link(f_name(&hlink_list[i - 1]),
-                           f_name(&hlink_list[i])) != 0) {
-                       if (verbose > 0)
+               if (robust_unlink(hlink2) || do_link(hlink1, hlink2)) {
+                       if (verbose > 0) {
                                rprintf(FINFO, "link %s => %s : %s\n",
                                rprintf(FINFO, "link %s => %s : %s\n",
-                                       f_name(&hlink_list[i]),
-                                       f_name(&hlink_list[i - 1]),
-                                       strerror(errno));
+                                       hlink2, hlink1, strerror(errno));
+                       }
                        return;
                }
        }
        if (verbose > 0)
                        return;
                }
        }
        if (verbose > 0)
-               rprintf(FINFO, "%s => %s\n",
-                       f_name(&hlink_list[i]),
-                       f_name(&hlink_list[i - 1]));
+               rprintf(FINFO, "%s => %s\n", hlink2, hlink1);
 }
 #endif
 
 }
 #endif