X-Git-Url: https://git.zerfleddert.de/cgi-bin/gitweb.cgi/proxmark3-svn/blobdiff_plain/f46c3663218b685d7d5ed83781daea1360595261..6cd2eef44ba915ffca378435429b3585e7d83797:/client/reveng/cli.c

diff --git a/client/reveng/cli.c b/client/reveng/cli.c
index 7747b9af..224eedd6 100644
--- a/client/reveng/cli.c
+++ b/client/reveng/cli.c
@@ -183,8 +183,10 @@ int reveng_main(int argc, char *argv[]) {
 					return 0;
 					//exit(EXIT_FAILURE);
 				}
-				if(c < 0)
+				if(c < 0){
 					uerror("no preset models available");
+					return 0;
+				}
 				/* must set width so that parameter to -ipx is not zeroed */
 				width = plen(model.spoly);
 				rflags |= R_HAVEP | R_HAVEI | R_HAVERI | R_HAVERO | R_HAVEX;
@@ -314,8 +316,10 @@ ippx:
 			break;
 		case 'D': /* D  dump all models */
 			args = mcount();
-			if(!args)
+			if(!args){
 				uerror("no preset models available");
+				return 0;
+			}
 			for(mode = 0; mode < args; ++mode) {
 				mbynum(&model, mode);
 				mcanon(&model);
@@ -327,8 +331,10 @@ ippx:
 			 * either attaching names to arbitrary models or forcing to a preset
 			 * mmatch(&model, M_OVERWR);
 			 */
-			if(~model.flags & P_MULXN)
+			if(~model.flags & P_MULXN){
 				uerror("not a Williams model compliant algorithm");
+				return 0;
+			}
 			string = mtostr(&model);
 			puts(string);
 			free(string);
@@ -348,10 +354,14 @@ ippx:
 			}
 			break;
 		case 's': /* s  search for algorithm */
-			if(!width)
+			if(!width){
 				uerror("must specify positive -k or -w before -s");
-			if(~model.flags & P_MULXN)
+				return 0;
+			}
+			if(~model.flags & P_MULXN){
 				uerror("cannot search for non-Williams compliant models");
+				return 0;
+			}
 			praloc(&model.spoly, width);
 			praloc(&model.init, width);
 			praloc(&model.xorout, width);
@@ -366,8 +376,10 @@ ippx:
 
 			/* allocate argument array */
 			args = argc - optind;
-			if(!(apolys = malloc(args * sizeof(poly_t))))
+			if(!(apolys = malloc(args * sizeof(poly_t)))){
 				uerror("cannot allocate memory for argument list");
+				return 0;
+			}
 
 			for(pptr = apolys; optind < argc; ++optind) {
 				if(uflags & C_INFILE)
@@ -432,11 +444,13 @@ ippx:
 			if(uflags & C_RESULT) {
 				for(qptr = apolys; qptr < pptr; ++qptr)
 					pfree(qptr);
-				return 1;
+				//return 1;
 				//exit(EXIT_SUCCESS);
 			}
-			if(!(model.flags & P_REFIN) != !(model.flags & P_REFOUT))
+			if(!(model.flags & P_REFIN) != !(model.flags & P_REFOUT)){
 				uerror("cannot search for crossed-endian models");
+				return 0;
+			}
 			pass = 0;
 			do {
 				mptr = candmods = reveng(&model, qpoly, rflags, args, apolys);
@@ -465,7 +479,6 @@ ippx:
 			break;
 		default:  /* no mode specified */
 			fprintf(stderr, "%s: no mode switch specified. Use %s -h for help.\n", myname, myname);
-			return 0;
 			//exit(EXIT_FAILURE);
 	}
 
@@ -592,7 +605,19 @@ usage(void) {
 			"\t-c calculate CRCs\t\t-d dump algorithm parameters\n"
 			"\t-D list preset algorithms\t-e echo (and reformat) input\n"
 			"\t-s search for algorithm\t\t-v calculate reversed CRCs\n"
-			"\t-h | -u | -? show this help\n"
+			"\t-g search for alg given hex+crc\t-h | -u | -? show this help\n"
+			"Common Use Examples:\n"
+			"\t   reveng -g 01020304e3\n"
+			"\t      Searches for a known/common crc preset that computes the crc\n"
+			"\t      on the end of the given hex string\n"
+			"\t   reveng -w 8 -s 01020304e3 010204039d\n"
+			"\t      Searches for any possible 8 bit width crc calc that computes\n"
+			"\t      the crc on the end of the given hex string(s)\n"
+			"\t   reveng -m CRC-8 -c 01020304\n"
+			"\t      Calculates the crc-8 of the given hex string\n"
+			"\t   reveng -D\n"
+			"\t      Outputs a list of all known/common crc models with their\n"
+			"\t      preset values\n"
 			"\n"
 			"Copyright (C) 2010, 2011, 2012, 2013, 2014, 2015  Gregory Cook\n"
 			"This is free software; see the source for copying conditions.  There is NO\n"