X-Git-Url: http://git.zerfleddert.de/cgi-bin/gitweb.cgi/proxmark3-svn/blobdiff_plain/9b952b29ebba638c59ab03621c0f04fca7ec602c..a6d4e93cb55b2cdfbdcb84a57ff3a3609325ec47:/client/util.c?ds=sidebyside diff --git a/client/util.c b/client/util.c index d07c915c..8357f601 100644 --- a/client/util.c +++ b/client/util.c @@ -8,10 +8,6 @@ // utilities //----------------------------------------------------------------------------- -#if !defined(_WIN32) -#define _POSIX_C_SOURCE 199309L // need nanosleep() -#endif - #include "util.h" #include @@ -22,6 +18,10 @@ #include #include "data.h" +#ifdef _WIN32 +#include +#endif + #define MAX_BIN_BREAK_LENGTH (3072+384+1) #ifndef _WIN32 @@ -169,12 +169,12 @@ char *sprint_bin_break(const uint8_t *data, const size_t len, const uint8_t brea size_t in_index = 0; // loop through the out_index to make sure we don't go too far - for (size_t out_index=0; out_index < max_len-1; out_index++) { + for (size_t out_index=0; out_index < max_len; out_index++) { // set character - (should be binary but verify it isn't more than 1 digit) if (data[in_index]<10) sprintf(tmp++, "%u", (unsigned int) data[in_index]); // check if a line break is needed and we have room to print it in our array - if ( (breaks > 0) && !((in_index+1) % breaks) && (out_index+1 != max_len) ) { + if ( (breaks > 0) && !((in_index+1) % breaks) && (out_index+1 < max_len) ) { // increment and print line break out_index++; sprintf(tmp++, "%s","\n"); @@ -193,13 +193,14 @@ char *sprint_hex_ascii(const uint8_t *data, const size_t len) { static char buf[1024]; char *tmp = buf; memset(buf, 0x00, 1024); - size_t max_len = (len > 1010) ? 1010 : len; - + size_t max_len = (len > 255) ? 255 : len; + // max 255 bytes * 3 + 2 characters = 767 in buffer sprintf(tmp, "%s| ", sprint_hex(data, max_len) ); size_t i = 0; size_t pos = (max_len * 3)+2; - while(i < max_len){ + // add another 255 characters ascii = 1020 characters of buffer used + while(i < max_len) { char c = data[i]; if ( (c < 32) || (c == 127)) c = '.'; @@ -321,7 +322,7 @@ char * printBits(size_t const size, void const * const ptr) // ------------------------------------------------------------------------- // line - param line -// bg, en - symbol numbers in param line of beginning an ending parameter +// bg, en - symbol numbers in param line of beginning and ending parameter // paramnum - param number (from 0) // ------------------------------------------------------------------------- int param_getptr(const char *line, int *bg, int *en, int paramnum) @@ -354,6 +355,15 @@ int param_getptr(const char *line, int *bg, int *en, int paramnum) } +int param_getlength(const char *line, int paramnum) +{ + int bg, en; + + if (param_getptr(line, &bg, &en, paramnum)) return 0; + + return en - bg + 1; +} + char param_getchar(const char *line, int paramnum) { int bg, en; @@ -613,37 +623,43 @@ void clean_ascii(unsigned char *buf, size_t len) { } } +// replace \r \n to \0 +void strcleanrn(char *buf, size_t len) { + strcreplace(buf, len, '\n', '\0'); + strcreplace(buf, len, '\r', '\0'); +} -// Timer functions -#if !defined (_WIN32) -#include - -static void nsleep(uint64_t n) { - struct timespec timeout; - timeout.tv_sec = n/1000000000; - timeout.tv_nsec = n%1000000000; - while (nanosleep(&timeout, &timeout) && errno == EINTR); +// replace char in buffer +void strcreplace(char *buf, size_t len, char from, char to) { + for (size_t i = 0; i < len; i++) { + if (buf[i] == from) + buf[i] = to; + } } -void msleep(uint32_t n) { - nsleep(1000000 * n); +char *strmcopy(char *buf) { + char * str = NULL; + if ((str = (char*) malloc(strlen(buf) + 1)) != NULL) { + memset(str, 0, strlen(buf) + 1); + strcpy(str, buf); + } + return str; } -#endif // _WIN32 -// a milliseconds timer for performance measurement -uint64_t msclock() { +// determine number of logical CPU cores (use for multithreaded functions) +extern int num_CPUs(void) +{ #if defined(_WIN32) -#include - struct _timeb t; - if (_ftime_s(&t)) { - return 0; - } else { - return 1000 * t.time + t.millitm; - } + #include + SYSTEM_INFO sysinfo; + GetSystemInfo(&sysinfo); + return sysinfo.dwNumberOfProcessors; +#elif defined(__linux__) || defined(__APPLE__) + #include + return sysconf(_SC_NPROCESSORS_ONLN); #else - struct timespec t; - clock_gettime(CLOCK_MONOTONIC, &t); - return (t.tv_sec * 1000 + t.tv_nsec / 1000000); + return 1; #endif } +