X-Git-Url: https://git.zerfleddert.de/cgi-bin/gitweb.cgi/proxmark3-svn/blobdiff_plain/e719470c461e38fb3ad99416d06fa1b5b19ff357..33936c2155d034f445693006c50adbfd0ad5f036:/client/reveng/poly.c?ds=sidebyside

diff --git a/client/reveng/poly.c b/client/reveng/poly.c
index 64e4a2db..35e38af3 100644
--- a/client/reveng/poly.c
+++ b/client/reveng/poly.c
@@ -1,8 +1,8 @@
 /* poly.c
- * Greg Cook, 24/Feb/2016
+ * Greg Cook, 26/Jul/2016
  */
 
-/* CRC RevEng, an arbitrary-precision CRC calculator and algorithm finder
+/* CRC RevEng: arbitrary-precision CRC calculator and algorithm finder
  * Copyright (C) 2010, 2011, 2012, 2013, 2014, 2015, 2016  Gregory Cook
  *
  * This file is part of CRC RevEng.
@@ -18,10 +18,11 @@
  * GNU General Public License for more details.
  *
  * You should have received a copy of the GNU General Public License
- * along with CRC RevEng.  If not, see <http://www.gnu.org/licenses/>.
+ * along with CRC RevEng.  If not, see <https://www.gnu.org/licenses/>.
  */
 
-/* 2015-07-29: discard leading $, &, 0x from argument to strtop()
+/* 2016-06-27: pcmp() shortcut returns 0 when pointers identical
+ * 2015-07-29: discard leading $, &, 0x from argument to strtop()
  * 2015-04-03: added direct mode to strtop()
  * 2014-01-11: added LOFS(), RNDUP()
  * 2013-09-16: SIZE(), IDX(), OFS() macros bitshift if BMP_POF2
@@ -511,6 +512,8 @@ pcmp(const poly_t *a, const poly_t *b) {
 	if(a->length > b->length) return(1);
 	aptr = a->bitmap;
 	bptr = b->bitmap;
+	if(aptr == bptr)
+		return(0);
 	for(iter=0UL; iter < a->length; iter += BMP_BIT) {
 		if(*aptr < *bptr)
 			return(-1);
@@ -796,15 +799,15 @@ prev(poly_t *poly) {
 	unsigned long fulllength = poly->length + ofs;
 	bmp_t accu;
 
-	if(ofs)
+	if(ofs) {
 		/* removable optimisation */
 		if(poly->length < (unsigned long) BMP_BIT) {
 			*poly->bitmap = rev(*poly->bitmap >> ofs, (int) poly->length) << ofs;
 			return;
 		}
-
-		/* claim remaining bits of last word (as we use public function pshift()) */
-		poly->length = fulllength;
+	}
+	/* claim remaining bits of last word (as we use public function pshift()) */
+	poly->length = fulllength;
 
 	/* reverse and swap words in the array, leaving it right-justified */
 	while(leftidx < rightidx) {