X-Git-Url: http://git.zerfleddert.de/cgi-bin/gitweb.cgi/proxmark3-svn/blobdiff_plain/68541dddc2734755f4fd306e327dffa89640ecdd..9764d3ea0ec65f520efd4528301da00eedbfbad4:/client/util.c?ds=sidebyside diff --git a/client/util.c b/client/util.c index 5c2579b1..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 @@ -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,46 +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 - - // WORKAROUND FOR MinGW (some versions - use if normal code does not compile) - // It has no _ftime_s and needs explicit inclusion of timeb.h - #include - struct _timeb t; - _ftime(&t); - return 1000 * t.time + t.millitm; - - // NORMAL CODE (use _ftime_s) - //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 } +