X-Git-Url: http://cvs.zerfleddert.de/cgi-bin/gitweb.cgi/proxmark3-svn/blobdiff_plain/5249ff940f17a0ae619c178ea8648c112106e9ae..1ccba0b91b5c7c3c05127622c945c1c937bf6a3e:/client/util.c?ds=sidebyside diff --git a/client/util.c b/client/util.c index d4e59165..38dd3a12 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 = '.'; @@ -614,45 +615,21 @@ void clean_ascii(unsigned char *buf, size_t len) { } -// 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); -} -void msleep(uint32_t n) { - nsleep(1000000 * n); -} - -#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 } +