X-Git-Url: https://git.zerfleddert.de/cgi-bin/gitweb.cgi/proxmark3-svn/blobdiff_plain/a78a3d9dc3aa42852dd3587815755c46693d7f03..790bb5ae4904175bcf7a7bdc66e8b20e9b6a0634:/client/reveng/poly.c diff --git a/client/reveng/poly.c b/client/reveng/poly.c index 119a434e..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 . + * along with CRC RevEng. If not, see . */ -/* 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 @@ -140,7 +141,7 @@ filtop(FILE *input, unsigned long length, int flags, int bperhx) { bmp_t accu = BMP_C(0); bmp_t mask = bperhx == BMP_BIT ? ~BMP_C(0) : (BMP_C(1) << bperhx) - BMP_C(1); unsigned long iter = 0UL, idx; - int cmask = ~(~0 << CHAR_BIT), c; + int cmask = (1 << CHAR_BIT) - 1, c; int count = 0, ofs; poly_t poly = PZERO; if(bperhx == 0) return(poly); @@ -205,7 +206,7 @@ strtop(const char *string, int flags, int bperhx) { bmp_t accu; bmp_t mask = bperhx == BMP_BIT ? ~BMP_C(0) : (BMP_C(1) << bperhx) - BMP_C(1); int pass, count, ofs; - int cmask = ~(~0 << CHAR_BIT), c; + int cmask = (1 << CHAR_BIT) - 1 , c; const char *s; poly_t poly = PZERO; @@ -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) {