This patch just adds some extra parentheses to stop the compiler from warning about the possible mix-up of operator precedence. diff -u -r par2cmdline-0.4-orig/par1repairer.cpp par2cmdline-0.4/par1repairer.cpp --- par2cmdline-0.4-orig/par1repairer.cpp 2004-04-15 15:40:48.000000000 +0200 +++ par2cmdline-0.4/par1repairer.cpp 2009-09-08 18:38:15.375114246 +0200 @@ -324,7 +324,7 @@ || (fileheader.datasize && (fileheader.dataoffset < sizeof(fileheader) || fileheader.dataoffset + fileheader.datasize > filesize)) || - (fileheader.datasize && (fileheader.filelistoffset <= fileheader.dataoffset && fileheader.dataoffset < fileheader.filelistoffset+fileheader.filelistsize || fileheader.dataoffset <= fileheader.filelistoffset && fileheader.filelistoffset < fileheader.dataoffset + fileheader.datasize))) + (fileheader.datasize && ((fileheader.filelistoffset <= fileheader.dataoffset && fileheader.dataoffset < fileheader.filelistoffset+fileheader.filelistsize) || (fileheader.dataoffset <= fileheader.filelistoffset && fileheader.filelistoffset < fileheader.dataoffset + fileheader.datasize)))) break; // Check the size of the file list @@ -518,9 +518,9 @@ // Check the the file extension is the correct form if ((tail[0] == 'P' || tail[0] == 'p') && ( - (tail[1] == 'A' || tail[1] == 'a') && (tail[2] == 'R' || tail[2] == 'r') + ((tail[1] == 'A' || tail[1] == 'a') && (tail[2] == 'R' || tail[2] == 'r')) || - isdigit(tail[1]) && isdigit(tail[2]) + (isdigit(tail[1]) && isdigit(tail[2])) )) { LoadRecoveryFile(filename); @@ -549,9 +549,9 @@ // Check the the file extension is the correct form if ((tail[0] == 'P' || tail[0] == 'p') && ( - (tail[1] == 'A' || tail[1] == 'a') && (tail[2] == 'R' || tail[2] == 'r') + ((tail[1] == 'A' || tail[1] == 'a') && (tail[2] == 'R' || tail[2] == 'r')) || - isdigit(tail[1]) && isdigit(tail[2]) + (isdigit(tail[1]) && isdigit(tail[2])) )) { LoadRecoveryFile(filename); @@ -652,9 +652,9 @@ // Check the the file extension is the correct form if ((tail[0] == 'P' || tail[0] == 'p') && ( - (tail[1] == 'A' || tail[1] == 'a') && (tail[2] == 'R' || tail[2] == 'r') + ((tail[1] == 'A' || tail[1] == 'a') && (tail[2] == 'R' || tail[2] == 'r')) || - isdigit(tail[1]) && isdigit(tail[2]) + (isdigit(tail[1]) && isdigit(tail[2])) )) { skip = true; diff -u -r par2cmdline-0.4-orig/verificationhashtable.h par2cmdline-0.4/verificationhashtable.h --- par2cmdline-0.4-orig/verificationhashtable.h 2003-06-03 13:48:52.000000000 +0200 +++ par2cmdline-0.4/verificationhashtable.h 2009-09-08 18:37:51.945290947 +0200 @@ -66,11 +66,11 @@ // Comparison operators for searching bool operator <(const VerificationHashEntry &r) const { - return crc < r.crc || crc == r.crc && hash < r.hash; + return crc < r.crc || (crc == r.crc && hash < r.hash); } bool operator >(const VerificationHashEntry &r) const { - return crc > r.crc || crc == r.crc && hash > r.hash; + return crc > r.crc || (crc == r.crc && hash > r.hash); } bool operator ==(const VerificationHashEntry &r) const { @@ -183,11 +183,11 @@ while (entry) { - if (entry->crc < crc || entry->crc == crc && entry->hash < hash) + if (entry->crc < crc || (entry->crc == crc && entry->hash < hash)) { entry = entry->right; } - else if (entry->crc > crc || entry->crc == crc && entry->hash > hash) + else if (entry->crc > crc || (entry->crc == crc && entry->hash > hash)) { entry = entry->left; } @@ -402,14 +402,14 @@ // have already been matched, or ones that are the wrong length while (currententry && (currententry->SourceFile() != sourcefile || currententry->IsSet() || - checksummer.ShortBlock() && checksummer.BlockLength() != currententry->GetDataBlock()->GetLength() + (checksummer.ShortBlock() && checksummer.BlockLength() != currententry->GetDataBlock()->GetLength()) ) ) { // If we found an unused entry (which was presumably for the wrong // source file) remember it (providing it is the correct length). if (0 == nextentry && !(currententry->IsSet() || - checksummer.ShortBlock() && checksummer.BlockLength() != currententry->GetDataBlock()->GetLength() + (checksummer.ShortBlock() && checksummer.BlockLength() != currententry->GetDataBlock()->GetLength()) ) ) { @@ -426,7 +426,7 @@ // Check for an unused entry which is the correct length while (nextentry && (nextentry->IsSet() || - checksummer.ShortBlock() && checksummer.BlockLength() != nextentry->GetDataBlock()->GetLength() + (checksummer.ShortBlock() && checksummer.BlockLength() != nextentry->GetDataBlock()->GetLength()) ) ) {