AMD64 - Fix dev_t tests in cpdup
authorMatthew Dillon <dillon@apollo.backplane.com>
Tue, 25 Aug 2009 05:35:19 +0000 (22:35 -0700)
committerMatthew Dillon <dillon@apollo.backplane.com>
Tue, 25 Aug 2009 05:35:19 +0000 (22:35 -0700)
* cpdup was traversing mount points when it shouldn't have been, due
  to badly written st_dev tests.

bin/cpdup/cpdup.c

index 2f5a5d9..896c525 100644 (file)
@@ -909,13 +909,13 @@ relink:
                }
            }
 
-           if ((int)sdevNo >= 0 && st1.st_dev != sdevNo) {
+           if (sdevNo != (dev_t)-1 && st1.st_dev != sdevNo) {
                noLoop = 1;
            } else {
                sdevNo = st1.st_dev;
            }
 
-           if ((int)ddevNo >= 0 && st2.st_dev != ddevNo) {
+           if (ddevNo != (dev_t)-1 && st2.st_dev != ddevNo) {
                noLoop = 1;
            } else {
                ddevNo = st2.st_dev;
@@ -1385,7 +1385,7 @@ RemoveRecur(const char *dpath, dev_t devNo)
     struct stat st;
 
     if (hc_lstat(&DstHost, dpath, &st) == 0) {
-       if ((int)devNo < 0)
+       if (devNo == (dev_t)-1)
            devNo = st.st_dev;
        if (st.st_dev == devNo) {
            if (S_ISDIR(st.st_mode)) {